View | Details | Raw Unified
Collapse All | Expand All

(-) a/build.sh (-3 / +3 lines)
 Lines 87-95   else Link Here 
fi
fi
if [ -z "${GECKO_INCLUDES}" -a -z "${GECKO_LIBS}" ]; then
if [ -z "${GECKO_INCLUDES}" -a -z "${GECKO_LIBS}" ]; then
	if [ x`pkg-config --exists mozilla-xpcom && echo YES` = "xYES" ]; then
	if [ x`pkg-config --exists firefox-xpcom && echo YES` = "xYES" ]; then
		GECKO_INCLUDES=`pkg-config --cflags mozilla-xpcom`
		GECKO_INCLUDES=`pkg-config --cflags firefox-xpcom`
		GECKO_LIBS=`pkg-config --libs mozilla-xpcom`
		GECKO_LIBS=`pkg-config --libs firefox-xpcom`
		export GECKO_INCLUDES
		export GECKO_INCLUDES
		export GECKO_LIBS
		export GECKO_LIBS
		MAKE_MOZILLA=make_mozilla
		MAKE_MOZILLA=make_mozilla
(-) a/make_linux.mak (-8 / +8 lines)
 Lines 202-208   gnome_stats.o: gnome_stats.c gnome_stats.h Link Here 
#
#
# Mozilla lib
# Mozilla lib
#
#
make_mozilla:$(MOZILLA_LIB) $(PROFILE14_LIB) $(PROFILE17_LIB) $(PROFILE18_LIB)
make_mozilla:$(MOZILLA_LIB)
$(MOZILLA_LIB): $(MOZILLA_OBJECTS)
$(MOZILLA_LIB): $(MOZILLA_OBJECTS)
	$(CXX) -o $(MOZILLA_LIB) $(MOZILLA_OBJECTS) $(MOZILLALIBS) ${GECKO_LIBS}
	$(CXX) -o $(MOZILLA_LIB) $(MOZILLA_OBJECTS) $(MOZILLALIBS) ${GECKO_LIBS}
 Lines 220-241   xpcom_stats.o: xpcom_stats.cpp Link Here 
	$(CXX) $(MOZILLACFLAGS) ${GECKO_INCLUDES} -c xpcom_stats.cpp	
	$(CXX) $(MOZILLACFLAGS) ${GECKO_INCLUDES} -c xpcom_stats.cpp	
$(PROFILE14_OBJECTS): xpcom_profile.cpp
$(PROFILE14_OBJECTS): xpcom_profile.cpp
	$(CXX) -o $(PROFILE14_OBJECTS) $(MOZILLACFLAGS) ${PROFILE14_INCLUDES} -c xpcom_profile.cpp	
	$(CXX) -o $(PROFILE14_OBJECTS) $(MOZILLACFLAGS) ${PROFILE14_INCLUDES} ${GECKO_INCLUDES} -c xpcom_profile.cpp	
$(PROFILE17_OBJECTS): xpcom_profile.cpp
$(PROFILE17_OBJECTS): xpcom_profile.cpp
	$(CXX) -o $(PROFILE17_OBJECTS) $(MOZILLACFLAGS) ${PROFILE17_INCLUDES} -c xpcom_profile.cpp	
	$(CXX) -o $(PROFILE17_OBJECTS) $(MOZILLACFLAGS) ${PROFILE17_INCLUDES} ${GECKO_INCLUDES} -c xpcom_profile.cpp	
$(PROFILE18_OBJECTS): xpcom_profile.cpp
$(PROFILE18_OBJECTS): xpcom_profile.cpp
	$(CXX) -o $(PROFILE18_OBJECTS) $(MOZILLACFLAGS) ${PROFILE18_INCLUDES} -c xpcom_profile.cpp	
	$(CXX) -o $(PROFILE18_OBJECTS) $(MOZILLACFLAGS) ${PROFILE18_INCLUDES} ${GECKO_INCLUDES} -c xpcom_profile.cpp	
$(PROFILE14_LIB): $(PROFILE14_OBJECTS)
$(PROFILE14_LIB): $(PROFILE14_OBJECTS)
	$(CXX) -o $(PROFILE14_LIB) $(PROFILE14_OBJECTS) $(MOZILLALIBS) ${PROFILE14_LIBS}
	$(CXX) -o $(PROFILE14_LIB) $(PROFILE14_OBJECTS) $(MOZILLALIBS) ${PROFILE14_LIBS} ${GECKO_LIBS}
$(PROFILE17_LIB): $(PROFILE17_OBJECTS)
$(PROFILE17_LIB): $(PROFILE17_OBJECTS)
	$(CXX) -o $(PROFILE17_LIB) $(PROFILE17_OBJECTS) $(MOZILLALIBS) ${PROFILE17_LIBS}
	$(CXX) -o $(PROFILE17_LIB) $(PROFILE17_OBJECTS) $(MOZILLALIBS) ${PROFILE17_LIBS} ${GECKO_LIBS}
$(PROFILE18_LIB): $(PROFILE18_OBJECTS)
$(PROFILE18_LIB): $(PROFILE18_OBJECTS)
	$(CXX) -o $(PROFILE18_LIB) $(PROFILE18_OBJECTS) $(MOZILLALIBS) ${PROFILE18_LIBS}
	$(CXX) -o $(PROFILE18_LIB) $(PROFILE18_OBJECTS) $(MOZILLALIBS) ${PROFILE18_LIBS} ${GECKO_LIBS}
#
#
# GLX lib
# GLX lib
 Lines 264-267   install: all Link Here 
# Clean
# Clean
#
#
clean:
clean:
	rm -f *.o *.so
	rm -f *.o *.so
(-) a/src/org/eclipse/swt/browser/Browser.java (-81 / +114 lines)
 Lines 10-24    Link Here 
 *******************************************************************************/
 *******************************************************************************/
package org.eclipse.swt.browser;
package org.eclipse.swt.browser;
import java.io.*;
import java.io.File;
import java.util.*;
import java.io.UnsupportedEncodingException;
import org.eclipse.swt.*;
import java.util.Locale;
import org.eclipse.swt.widgets.*;
import java.util.StringTokenizer;
import org.eclipse.swt.graphics.*;
import org.eclipse.swt.internal.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.internal.gtk.*;
import org.eclipse.swt.SWTError;
import org.eclipse.swt.internal.mozilla.*;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.internal.Callback;
import org.eclipse.swt.internal.Converter;
import org.eclipse.swt.internal.Library;
import org.eclipse.swt.internal.gtk.GdkEvent;
import org.eclipse.swt.internal.gtk.LONG;
import org.eclipse.swt.internal.gtk.OS;
import org.eclipse.swt.internal.mozilla.XPCOM;
import org.eclipse.swt.internal.mozilla.XPCOMObject;
import org.eclipse.swt.internal.mozilla.nsEmbedString;
import org.eclipse.swt.internal.mozilla.nsIAppShell;
import org.eclipse.swt.internal.mozilla.nsIBaseWindow;
import org.eclipse.swt.internal.mozilla.nsICategoryManager;
import org.eclipse.swt.internal.mozilla.nsIComponentManager;
import org.eclipse.swt.internal.mozilla.nsIComponentRegistrar;
import org.eclipse.swt.internal.mozilla.nsIContextMenuListener;
import org.eclipse.swt.internal.mozilla.nsICookie;
import org.eclipse.swt.internal.mozilla.nsICookieManager;
import org.eclipse.swt.internal.mozilla.nsID;
import org.eclipse.swt.internal.mozilla.nsIDOMEvent;
import org.eclipse.swt.internal.mozilla.nsIDOMMouseEvent;
import org.eclipse.swt.internal.mozilla.nsIDOMWindow;
import org.eclipse.swt.internal.mozilla.nsIDirectoryService;
import org.eclipse.swt.internal.mozilla.nsIDocShell;
import org.eclipse.swt.internal.mozilla.nsIEmbeddingSiteWindow;
import org.eclipse.swt.internal.mozilla.nsIFile;
import org.eclipse.swt.internal.mozilla.nsIIOService;
import org.eclipse.swt.internal.mozilla.nsIInterfaceRequestor;
import org.eclipse.swt.internal.mozilla.nsILocalFile;
import org.eclipse.swt.internal.mozilla.nsIPrefBranch;
import org.eclipse.swt.internal.mozilla.nsIPrefLocalizedString;
import org.eclipse.swt.internal.mozilla.nsIPrefService;
import org.eclipse.swt.internal.mozilla.nsIProperties;
import org.eclipse.swt.internal.mozilla.nsIRequest;
import org.eclipse.swt.internal.mozilla.nsIServiceManager;
import org.eclipse.swt.internal.mozilla.nsISimpleEnumerator;
import org.eclipse.swt.internal.mozilla.nsISupports;
import org.eclipse.swt.internal.mozilla.nsISupportsWeakReference;
import org.eclipse.swt.internal.mozilla.nsITooltipListener;
import org.eclipse.swt.internal.mozilla.nsIURI;
import org.eclipse.swt.internal.mozilla.nsIURIContentListener;
import org.eclipse.swt.internal.mozilla.nsIWeakReference;
import org.eclipse.swt.internal.mozilla.nsIWebBrowser;
import org.eclipse.swt.internal.mozilla.nsIWebBrowserChrome;
import org.eclipse.swt.internal.mozilla.nsIWebBrowserChromeFocus;
import org.eclipse.swt.internal.mozilla.nsIWebBrowserFocus;
import org.eclipse.swt.internal.mozilla.nsIWebBrowserStream;
import org.eclipse.swt.internal.mozilla.nsIWebNavigation;
import org.eclipse.swt.internal.mozilla.nsIWebProgress;
import org.eclipse.swt.internal.mozilla.nsIWebProgressListener;
import org.eclipse.swt.internal.mozilla.nsIWindowWatcher;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Widget;
/**
/**
 * Instances of this class implement the browser user interface
 * Instances of this class implement the browser user interface
 Lines 175-214   public Browser(Composite parent, int style) { Link Here 
		 * - mozilla17profile/mozilla17profile-gcc should succeed for mozilla 1.7.x and firefox
		 * - mozilla17profile/mozilla17profile-gcc should succeed for mozilla 1.7.x and firefox
		 * - mozilla18profile/mozilla18profile-gcc should succeed for mozilla 1.8.x (seamonkey)
		 * - mozilla18profile/mozilla18profile-gcc should succeed for mozilla 1.8.x (seamonkey)
		 */
		 */
		try {
//		Library.loadLibrary("swt-mozilla17-profile");
			Library.loadLibrary ("swt-mozilla14-profile"); //$NON-NLS-1$
		// We build the profile stuff without the need for a separate DSO
			usingProfile = true;
		usingProfile = true;
		} catch (UnsatisfiedLinkError e1) {
//		try {
			try {
//			Library.loadLibrary ("swt-mozilla14-profile"); //$NON-NLS-1$
				Library.loadLibrary ("swt-mozilla17-profile"); //$NON-NLS-1$
//			usingProfile = true;
				usingProfile = true;
//		} catch (UnsatisfiedLinkError e1) {
			} catch (UnsatisfiedLinkError e2) {
//			try {
				try {
//				Library.loadLibrary ("swt-mozilla17-profile"); //$NON-NLS-1$
					Library.loadLibrary ("swt-mozilla14-profile-gcc3"); //$NON-NLS-1$
//				usingProfile = true;
					usingProfile = true;
//			} catch (UnsatisfiedLinkError e2) {
				} catch (UnsatisfiedLinkError e3) {
//				try {
					try {
//					Library.loadLibrary ("swt-mozilla14-profile-gcc3"); //$NON-NLS-1$
						Library.loadLibrary ("swt-mozilla17-profile-gcc3"); //$NON-NLS-1$
//					usingProfile = true;
						usingProfile = true;
//				} catch (UnsatisfiedLinkError e3) {
					} catch (UnsatisfiedLinkError e4) {
//					try {
						try {
//						Library.loadLibrary ("swt-mozilla17-profile-gcc3"); //$NON-NLS-1$
							Library.loadLibrary ("swt-mozilla18-profile"); //$NON-NLS-1$
//						usingProfile = true;
							usingProfile = true;
//					} catch (UnsatisfiedLinkError e4) {
						} catch (UnsatisfiedLinkError e5) {
//						try {
							try {
//							Library.loadLibrary ("swt-mozilla18-profile"); //$NON-NLS-1$
								Library.loadLibrary ("swt-mozilla18-profile-gcc3"); //$NON-NLS-1$
//							usingProfile = true;
								usingProfile = true;
//						} catch (UnsatisfiedLinkError e5) {
							} catch (UnsatisfiedLinkError e6) {
//							try {
								/* 
//								Library.loadLibrary ("swt-mozilla18-profile-gcc3"); //$NON-NLS-1$
								* fail silently, the Browser will still work without profile support
//								usingProfile = true;
								* but will abort any attempts to navigate to HTTPS pages
//							} catch (UnsatisfiedLinkError e6) {
								*/
//								/* 
							}
//								* fail silently, the Browser will still work without profile support
						}
//								* but will abort any attempts to navigate to HTTPS pages
					}
//								*/
				}
//							}
			}
//						}
		}
//					}
//				}
//			}
//		}
		long /*int*/[] retVal = new long /*int*/[1];
		long /*int*/[] retVal = new long /*int*/[1];
		nsEmbedString pathString = new nsEmbedString(mozillaPath);
		nsEmbedString pathString = new nsEmbedString(mozillaPath);
 Lines 218-228   public Browser(Composite parent, int style) { Link Here 
		if (retVal[0] == 0) error(XPCOM.NS_ERROR_NULL_POINTER);
		if (retVal[0] == 0) error(XPCOM.NS_ERROR_NULL_POINTER);
		
		
		nsILocalFile localFile = new nsILocalFile(retVal[0]);
		nsILocalFile localFile = new nsILocalFile(retVal[0]);
		rc = XPCOM.NS_InitEmbedding(localFile.getAddress(), 0);
		rc = XPCOM.NS_InitXPCOM3(0, localFile.getAddress(), 0, 0, 0);
		localFile.Release();
		localFile.Release();
		if (rc != XPCOM.NS_OK) {
		if (rc != XPCOM.NS_OK) {
			dispose();
			dispose();
			SWT.error(SWT.ERROR_NO_HANDLES, null, " [NS_InitEmbedding "+mozillaPath+" error "+rc+"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
			SWT.error(SWT.ERROR_NO_HANDLES, null, " [NS_InitXPCOM3 "+mozillaPath+" error "+rc+"]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
		}
		}
		rc = XPCOM.NS_GetComponentManager(result);
		rc = XPCOM.NS_GetComponentManager(result);
 Lines 283-289   public Browser(Composite parent, int style) { Link Here 
			rc = properties.Get(buffer, nsIFile.NS_IFILE_IID, result);
			rc = properties.Get(buffer, nsIFile.NS_IFILE_IID, result);
			if (rc != XPCOM.NS_OK) error(rc);
			if (rc != XPCOM.NS_OK) error(rc);
			if (result[0] == 0) error(XPCOM.NS_NOINTERFACE);
			if (result[0] == 0) error(XPCOM.NS_NOINTERFACE);
			properties.Release();
			// properties.Release() is now after the Set below
			nsIFile profileDir = new nsIFile(result[0]);
			nsIFile profileDir = new nsIFile(result[0]);
			result[0] = 0;
			result[0] = 0;
 Lines 305-328   public Browser(Composite parent, int style) { Link Here 
			pathString.dispose(); //
			pathString.dispose(); //
			profileDir = new nsIFile(result[0]);
			profileDir = new nsIFile(result[0]);
			result[0] = 0;
			rc = XPCOM_PROFILE.NS_NewProfileDirServiceProvider(true, result);
			// Set the profile dir property so that it's initialized for
			// things like password manager and https
			buffer = Converter.wcsToMbcs(null, XPCOM.NS_APP_USER_PROFILE_50_DIR, true);
			rc = properties.Set(buffer, profileDir.getAddress());
			if (rc != XPCOM.NS_OK) error(rc);
			if (rc != XPCOM.NS_OK) error(rc);
			if (result[0] == 0) error(XPCOM.NS_NOINTERFACE);
			properties.Release();
			final long /*int*/ dirServiceProvider = result[0];
			result[0] = 0;
			result[0] = 0;
			rc = XPCOM_PROFILE.ProfileDirServiceProvider_Register(dirServiceProvider);
			if (rc != XPCOM.NS_OK) error(rc);
			rc = XPCOM_PROFILE.ProfileDirServiceProvider_SetProfileDir(dirServiceProvider, profileDir.getAddress());
			if (rc != XPCOM.NS_OK) error(rc);
			getDisplay().addListener(SWT.Dispose, new Listener() {
				public void handleEvent(Event e) {
					XPCOM_PROFILE.ProfileDirServiceProvider_Shutdown(dirServiceProvider);
				}
			});
		}
		}
		/*
		/*
 Lines 1354-1380   void onDispose(Display display) { Link Here 
	tip = null;
	tip = null;
	BrowserCount--;
	BrowserCount--;
	/*
	* This code is intentionally commented.  It is not possible to reinitialize
	* Mozilla once it has been terminated.  NS_InitEmbedding always fails after
	* NS_TermEmbedding has been called.  The workaround is to call NS_InitEmbedding
	* once and never call NS_TermEmbedding.
	*/
//	if (BrowserCount == 0) {
//		if (AppShell != null) {
//			// Shutdown the appshell service.
//			rc = AppShell.Spindown();
//			if (rc != XPCOM.NS_OK) error(rc);
//			AppShell.Release();
//			AppShell = null;
//		}
//		WindowCreator.Release();
//		WindowCreator = null;
//		PromptService.Release();
//		PromptService = null;
//		XPCOM.NS_TermEmbedding();
//		mozilla = false;
//	}
}
}
void Activate() {
void Activate() {
(-) a/src/org/eclipse/swt/internal/mozilla/XPCOM.java (-2 / +2 lines)
 Lines 89-94   public class XPCOM extends Platform { Link Here 
	public static final int NS_ERROR_HTMLPARSER_UNRESOLVEDDTD = 0x804e03f3;
	public static final int NS_ERROR_HTMLPARSER_UNRESOLVEDDTD = 0x804e03f3;
	public static final int NS_ERROR_FILE_NOT_FOUND = 0x80520012;
	public static final int NS_ERROR_FILE_NOT_FOUND = 0x80520012;
	public static final String NS_APP_APPLICATION_REGISTRY_DIR = "AppRegD"; //$NON-NLS-1$
	public static final String NS_APP_APPLICATION_REGISTRY_DIR = "AppRegD"; //$NON-NLS-1$
	public static final String NS_APP_USER_PROFILE_50_DIR = "ProfD"; //$NON-NLS-1$
public static final native void memmove(nsID dest, long /*int*/ src, int nbytes);
public static final native void memmove(nsID dest, long /*int*/ src, int nbytes);
public static final native void memmove(long /*int*/ dest, nsID src, int nbytes);
public static final native void memmove(long /*int*/ dest, nsID src, int nbytes);
 Lines 103-111   public static final native void memmove(long /*int*/ dest, char[] src, int nbyte Link Here 
public static final native void memmove(byte[] dest, char[] src, int nbytes);
public static final native void memmove(byte[] dest, char[] src, int nbytes);
public static final native int NS_GetComponentManager(long /*int*/[] result);
public static final native int NS_GetComponentManager(long /*int*/[] result);
public static final native int NS_GetServiceManager(long /*int*/[] result);
public static final native int NS_GetServiceManager(long /*int*/[] result);
public static final native int NS_InitEmbedding(long /*int*/ aMozBinDirectory, long /*int*/ aAppFileLocProvider);
public static final native int NS_InitXPCOM3(long /*int*/ result, long /*int*/ binDirectory, long /*int*/ appFileLocationProvider, long /*int*/ staticComponents, int componentCount);
public static final native int NS_NewLocalFile(long /*int*/ path, boolean followLinks, long /*int*/[] result);
public static final native int NS_NewLocalFile(long /*int*/ path, boolean followLinks, long /*int*/[] result);
public static final native int NS_TermEmbedding();
public static final native int strlen_PRUnichar(long /*int*/ s);
public static final native int strlen_PRUnichar(long /*int*/ s);
public static final native long /*int*/ nsEmbedCString_new();
public static final native long /*int*/ nsEmbedCString_new();
public static final native long /*int*/ nsEmbedCString_new(byte[] aString, int length);
public static final native long /*int*/ nsEmbedCString_new(byte[] aString, int length);
(-) a/xpcom.cpp (-12 lines)
 Lines 113-130   fail: Link Here 
}
}
#endif
#endif
#ifndef NO_NS_1TermEmbedding
JNIEXPORT jint JNICALL XPCOM_NATIVE(NS_1TermEmbedding)
	(JNIEnv *env, jclass that)
{
	jint rc = 0;
	XPCOM_NATIVE_ENTER(env, that, NS_1TermEmbedding_FUNC);
	rc = (jint)NS_TermEmbedding();
	XPCOM_NATIVE_EXIT(env, that, NS_1TermEmbedding_FUNC);
	return rc;
}
#endif
#ifndef NO_PR_1Free
#ifndef NO_PR_1Free
JNIEXPORT void JNICALL XPCOM_NATIVE(PR_1Free)
JNIEXPORT void JNICALL XPCOM_NATIVE(PR_1Free)
	(JNIEnv *env, jclass that, jlong arg0)
	(JNIEnv *env, jclass that, jlong arg0)
(-) a/xpcom.h (-1 lines)
 Lines 15-21    Link Here 
#define NDEBUG
#define NDEBUG
#include "nsXPCOM.h"
#include "nsXPCOM.h"
#include "nsEmbedAPI.h"	
#include "nsEmbedString.h"
#include "nsEmbedString.h"
#include "nsIInputStream.h"
#include "nsIInputStream.h"
#include "nsISupportsUtils.h"
#include "nsISupportsUtils.h"
(-) a/xpcom_profile.h (-1 / +1 lines)
 Lines 15-21    Link Here 
#define NDEBUG
#define NDEBUG
#include "nsCOMPtr.h"
#include "nsCOMPtr.h"
#include "nsProfileDirServiceProvider.h"
#include "profdirserviceprovider/nsProfileDirServiceProvider.h"
#include "xpcom_stats.h"
#include "xpcom_stats.h"
#endif /* INC_xpcom_profile_H */
#endif /* INC_xpcom_profile_H */
(-) a/xpcom_stats.cpp (-4 / +3 lines)
 Lines 31-45    Link Here 
#ifdef NATIVE_STATS
#ifdef NATIVE_STATS
int XPCOM_nativeFunctionCount = 132;
int XPCOM_nativeFunctionCount = 131;
int XPCOM_nativeFunctionCallCount[132];
int XPCOM_nativeFunctionCallCount[131];
char * XPCOM_nativeFunctionNames[] = {
char * XPCOM_nativeFunctionNames[] = {
	"Call",
	"Call",
	"NS_1GetComponentManager",
	"NS_1GetComponentManager",
	"NS_1GetServiceManager",
	"NS_1GetServiceManager",
	"NS_1InitEmbedding",
	"NS_1InitXPCOM3_FUNC",
	"NS_1NewLocalFile",
	"NS_1NewLocalFile",
	"NS_1TermEmbedding",
	"PR_1Free",
	"PR_1Free",
	"PR_1Malloc",
	"PR_1Malloc",
	"VtblCall__IJ",
	"VtblCall__IJ",
(-) a/xpcom_stats.h (-2 / +1 lines)
 Lines 41-49   typedef enum { Link Here 
	Call_FUNC,
	Call_FUNC,
	NS_1GetComponentManager_FUNC,
	NS_1GetComponentManager_FUNC,
	NS_1GetServiceManager_FUNC,
	NS_1GetServiceManager_FUNC,
	NS_1InitEmbedding_FUNC,
	NS_1InitXPCOM3_FUNC,
	NS_1NewLocalFile_FUNC,
	NS_1NewLocalFile_FUNC,
	NS_1TermEmbedding_FUNC,
	PR_1Free_FUNC,
	PR_1Free_FUNC,
	PR_1Malloc_FUNC,
	PR_1Malloc_FUNC,
	VtblCall__IJ_FUNC,
	VtblCall__IJ_FUNC,