diff --git a/src/class.js b/src/class.js index 9d1d344..efd1039 100644 --- a/src/class.js +++ b/src/class.js @@ -22,7 +22,7 @@ function slurpFile (filename, fa) { } else if ('responseType' in xmlHttpRequest) { xmlHttpRequest.responseType = 'arraybuffer'; } else { - xmlHttpRequest.overrideMimeType('text/plain; charset=x-user-defined'); + //xmlHttpRequest.overrideMimeType('text/plain; charset=x-user-defined'); } xmlHttpRequest.send(null); if (xmlHttpRequest.status != 200 && xmlHttpRequest.status != 0) { @@ -42,6 +42,11 @@ function slurpFile (filename, fa) { if (bf) { result = [response.byteLength, response]; } else { + var a = ""; + for(var k in xmlHttpRequest){ + a+=k+","; + } + alert(a) throw "No typed arrays"; } return result; diff --git a/src/cpu.js b/src/cpu.js index 7313783..872bc93 100644 --- a/src/cpu.js +++ b/src/cpu.js @@ -16,7 +16,9 @@ /** @constructor */ var JVM = function(params,args){ - this.nativeMappingTable = {} + this.JNITable = params.JNITable || {} + this.internalJNITable = +#include "internalJNI.jsh" this.params = params; this.args = args; this.method_area = {}; @@ -40,7 +42,10 @@ var JVM = function(params,args){ this.makeInstanceOfStringFromJSSTring = function(string){ var inst = this.java_lang_string.makeInstance(); - inst["java/lang/String value"] = string; + inst["java/lang/String count"] = string.length; + var x = make1DNativeArray(string.length,true,T_CHAR); + x.value = string.toArray(); + inst["java/lang/String value"] = x; inst["java/lang/String hash"] = this.stringHashCode(string) return inst; } @@ -56,7 +61,7 @@ var JVM = function(params,args){ LOG("[Loaded " + name + "]"); } - + loaded_class.initializeClass(); return loaded_class; } diff --git a/src/infos.js b/src/infos.js index 653d820..3290d16 100644 --- a/src/infos.js +++ b/src/infos.js @@ -11,11 +11,48 @@ #include "constantPool.jsh" -function parseArgs(description){ -// "([Ljava/lang/String;)V" - var length = description.length - var sides = description.substr(1,length).split(")") - return {args:sides[0].split(","),ret:sides[1]}; +#define DSCRPT_DEFAULT 0 +#define DSCRPT_ARRAY 1 +#define DSCRPT_OBJ 2 + +function parseArgs(descriptor){ + var sides = descriptor.substr(1,descriptor.length).split(")") + var result = sides[1]; + var args = sides[0]; + var argsA = [] + var state = DSCRPT_DEFAULT; + var temp = ""; + for (var i=0; i value2){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF DEFOP(IF_ICMPGE) var branchbyte1 = READ_NEXT(); var branchbyte2 = READ_NEXT(); - var value1 = OPPOP(); var value2 = OPPOP(); + var value1 = OPPOP(); if (value1 >= value2){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -739,7 +743,7 @@ DEFOP(IFEQ) if (value == 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -750,7 +754,7 @@ DEFOP(IFNE) if (value != 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -761,7 +765,7 @@ DEFOP(IFLT) if (value < 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -772,7 +776,7 @@ DEFOP(IFLE) if (value <= 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -783,7 +787,7 @@ DEFOP(IFGT) if (value > 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -794,7 +798,7 @@ DEFOP(IFGE) if (value >= 0){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -805,7 +809,7 @@ DEFOP(IFNONNULL) if (value != NULL){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -816,7 +820,7 @@ DEFOP(IFNULL) if (value != NULL){ var branchoffset = (branchbyte1 << 8) | branchbyte2; - PC = PC + branchoffset; + PC = PC + branchoffset - 3; } ENDDEF @@ -836,7 +840,7 @@ DEFALIAS(ILOAD_1) DEFALIAS(ILOAD_2) DEFALIAS(ILOAD_3) DEFNOP() - OPPUSH(OPCODE - ILOAD_0); + OPPUSH(LOCAL_VAR(OPCODE - ILOAD_0)); ENDDEF DEFOP(IMUL) @@ -923,12 +927,31 @@ DEFOP(INVOKESTATIC) var indexbyte2 = READ_NEXT(); var args = []; - var method = xl.constantPool.get((indexbyte1 << 8) | indexbyte2); - for(var i=0; i JS JVM