⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jit_stub.c

📁 kaffe Java 解释器语言,源码,Java的子集系统,开放源代码
💻 C
字号:
/* * jit_stub.c * * Copyright (c) 2003 University of Utah and the Flux Group. * All rights reserved. * * This file is licensed under the terms of the GNU Public License. * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * * Contributed by the Flux Research Group, Department of Computer Science, * University of Utah, http://www.cs.utah.edu/flux/ */#include "config.h"#if defined(TRANSLATOR)#include <stdio.h>#include <jni.h>#include <kaffe/version.h>#include "../../libltdl/ltdl.h"#include "debug.h"#include "itypes.h"#include "classMethod.h"#include "thread.h"#include "jthread.h"#include "stringParsing.h"#include "stringSupport.h"#include <xprof/debugFile.h>JavaVMInitArgs vmargs;JNIEnv* env;int noExit = 0;extern JavaVMInitArgs Kaffe_JavaVMArgs[1]; // XXXextern int internal_test(parsedString *ps);/* If not otherwise specified, assume at least 1MB for main thread */#ifndef MAINSTACKSIZE#define MAINSTACKSIZE (1024*1024)#endif#define	CLASSPATH1	"KAFFECLASSPATH"#define	CLASSPATH2	"CLASSPATH"#define BOOTCLASSPATH 	"BOOTCLASSPATH"#define TEST_CLASSES	"TEST_CLASSES"extern Hjava_lang_Class* ObjectClass;extern Hjava_lang_Class* StringClass;extern Hjava_lang_Class* javaLangThrowable;extern Hjava_lang_Class* javaLangNullPointerException;extern Hjava_lang_Class* javaLangArrayIndexOutOfBoundsException;/* Initialisation prototypes */void initClasspath(void);void initNative(void);void initThreads(void);int main(int argc, char *argv[]){	int threadStackSize;	int retval = 1;	char *cp;	dbgSetMaskStr("MOREJIT,JIT");	vmargs.version = JAVA_VERSION_HEX;	JNI_GetDefaultJavaVMInitArgs(&vmargs);	#if defined(KAFFE_XDEBUGGING)	machine_debug_filename = "xdb.as";#endif	/* set up libtool/libltdl dlopen emulation */	LTDL_SET_PRELOADED_SYMBOLS();		cp = getenv(BOOTCLASSPATH);	vmargs.bootClasspath = cp;		cp = getenv(CLASSPATH1);	if (cp == 0) {		cp = getenv(CLASSPATH2);#if defined(DEFAULT_CLASSPATH)		if (cp == 0) {			cp = DEFAULT_CLASSPATH;		}#endif	}	vmargs.classpath = cp;	/* Machine specific initialisation first */#if defined(INIT_MD)	INIT_MD();#endif	Kaffe_JavaVMArgs[0] = vmargs;	threadStackSize = Kaffe_JavaVMArgs[0].nativeStackSize;		/* Register allocation types with gc subsystem */	main_collector = initCollector();	GC_init(main_collector);	/* Initialise the (native) threading system */	initNativeThreads(threadStackSize);	/* Initialise the string and utf8 systems */	stringInit();	utf8ConstInit();#if defined(KAFFE_XDEBUGGING)	machine_debug_file = createDebugFile(machine_debug_filename);#endif		/* Setup CLASSPATH */	initClasspath();	/* Init native support */	initNative();		/* Create the initialise and finalize names and signatures. */	init_name = utf8ConstNew("<clinit>", -1);	final_name = utf8ConstNew("finalize", -1);	void_signature = utf8ConstNew("()V", -1);	constructor_name = utf8ConstNew("<init>", -1);	Code_name = utf8ConstNew("Code", -1);	LineNumberTable_name = utf8ConstNew("LineNumberTable", -1);	ConstantValue_name = utf8ConstNew("ConstantValue", -1);	Exceptions_name = utf8ConstNew("Exceptions", -1);	SourceFile_name = utf8ConstNew("SourceFile", -1);	InnerClasses_name = utf8ConstNew("InnerClasses", -1);	if (!(init_name && final_name && void_signature &&	      constructor_name && Code_name && LineNumberTable_name &&	      ConstantValue_name && Exceptions_name &&	      SourceFile_name && InnerClasses_name)) {		dprintf("not enough memory to run kaffe\n");		ABORT();	}	{		Hjava_lang_Thread mainThread;		parsedString testName;		char *tests;				initTypes();		loadStaticClass(&ObjectClass, "java/lang/Object");		loadStaticClass(&StringClass, "java/lang/String");		loadStaticClass(&javaLangThrowable, "java/lang/Throwable");		loadStaticClass(&javaLangNullPointerException, "java/lang/NullPointerException");		loadStaticClass(&javaLangArrayIndexOutOfBoundsException, "java/lang/ArrayIndexOutOfBoundsException");		memset(&mainThread, 0, sizeof(mainThread));		jthread_createfirst(MAINSTACKSIZE,				    java_lang_Thread_NORM_PRIORITY,				    &mainThread);		if( (tests = getenv(TEST_CLASSES)) )		{			retval = parseString(				tests,				SPO_NotEmpty,				  SPO_Do,				    SPO_NonEmptyString, &testName,				    SPO_Expect, ".class",				    SPO_WhileSpace,				    SPO_Handle, internal_test, &testName,				    SPO_End,				  SPO_End,				SPO_End);			retval = !retval;		}		else		{			int lpc;			for( lpc = 1; lpc < argc; lpc++ )			{				testName.data = argv[lpc];				testName.len = strlen(argv[lpc]);				internal_test(&testName);			}		}	}	return( retval );}#elseint main(int argc, char *argv[]){	return( 0 );}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -