From 45117d919ceb31c514736101cca11cb0fd502003 Mon Sep 17 00:00:00 2001 From: Jivings Date: Wed, 11 Apr 2012 11:49:16 +0100 Subject: [PATCH] Changed build process so that InternalObects are inserted early, to prevent Object reference errors. --- Cakefile | 3 +- builds/jvm-latest.tar.bz2 | Bin 143353 -> 127640 bytes deploy/jre/jvm.js | 4912 ++++++++++++++++++------------------- 3 files changed, 2458 insertions(+), 2457 deletions(-) diff --git a/Cakefile b/Cakefile index d94d3ff..7edae78 100644 --- a/Cakefile +++ b/Cakefile @@ -5,7 +5,8 @@ util = require 'util' {spawn, exec} = require 'child_process' appFiles = [ - 'src/jvm/JVM.coffee' + 'src/jvm/JVM.coffee', + 'src/jvm/InternalObjects.coffee' ] javaFiles = [ ] diff --git a/builds/jvm-latest.tar.bz2 b/builds/jvm-latest.tar.bz2 index ae3648c6d1a9c6823789bc11031c46b792ff9a5e..b4cc4f7754a8f499a5e776df8fee36d07e019678 100644 GIT binary patch literal 127640 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%0A7R`AloilR}r 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
  • |RuMOO9 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

    4a+q|<>RH6 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 WxdB)>A(A~pF_{~re} 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 diff --git a/deploy/jre/jvm.js b/deploy/jre/jvm.js index 81484e1..62c51fc 100644 --- a/deploy/jre/jvm.js +++ b/deploy/jre/jvm.js @@ -161,2889 +161,2889 @@ })(); - /* - # The Boot ClassLoader for the JVM - */ + this.JVM_Object = (function() { + JVM_Object.name = 'JVM_Object'; - this.required_classes_length = 5; + function JVM_Object(cls) { + var field, fld, supercls; + this.cls = cls; + supercls = this.cls.constant_pool[this.cls.super_class]; + if (supercls !== void 0) this.__proto__ = new JVM_Object(supercls); + this.clsObject = new JVM_Reference(0); + for (field in this.cls.fields) { + fld = this.cls.fields[field]; + this[field] = fld; + } + } - this.ClassLoader = (function() { + JVM_Object.prototype.monitor = { + aquireLock: function(thread) { + if (this.owner === thread) { + this.count++; + } else if (this.owner !== null) { + this.waiting.push(thread); + return false; + } else { + this.owner = thread; + this.count++; + } + return true; + }, + releaseLock: function(thread) { + var _i, _len, _ref; + if (this.owner !== thread) return false; + if (--this.count === 0) this.owner = null; + _ref = this.waiting; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + thread = _ref[_i]; + this.notify(thread); + } + this.waiting.length = 0; + return true; + }, + notify: function(thread) { + return this.RDA.lockAquired(thread); + }, + owner: null, + count: 0, + waiting: new Array() + }; - ClassLoader.name = 'ClassLoader'; + return JVM_Object; - ClassLoader.prototype.classReader = 1; + })(); - ClassLoader.prototype.stack = new Array; + ({ + compareTo: function(jvmObject) { + if (this.cls.real_name === jvmObject.cls.real_name) { + return true; + } else { + try { + return compareTo.__super__.constructor.apply(this, arguments).compareTo(jvmObject); + } catch (err) { + return false; + } + } + } + }); - ClassLoader.prototype.ps_id = 0; + this.JVM_Reference = (function() { - ClassLoader.prototype.required_classes = ['java/lang/Class', 'java/lang/String', 'java/lang/System', 'javascript/io/JavaScriptPrintStream']; + JVM_Reference.name = 'JVM_Reference'; - ClassLoader.prototype.initNum = 0; + function JVM_Reference(pointer) { + this.pointer = pointer; + } - ClassLoader.prototype.initcb = 0; + JVM_Reference.prototype.toString = function() { + return this.pointer; + }; - ClassLoader.prototype.loaded_classes = {}; + return JVM_Reference; - /* - Constructor - Set runtime data area and grab console from global scope - */ + })(); + JVM_Number = (function() { - function ClassLoader(initcb, initDone) { - this.initcb = initcb; - this.initDone = initDone; - this.init = __bind(this.init, this); + JVM_Number.name = 'JVM_Number'; - this.console = { - debug: function(message) { - return console.log(message); - }, - print: function(message) { - return console.log(message); - } - }; + function JVM_Number(val) { + this.val = val; } - /* - To be called on instanstiation. - Seperate to Constructor so that the JVM can resolve required classes and - their native counterparts. - */ + JVM_Number.prototype.valueOf = function() { + return this.val; + }; + return JVM_Number; - ClassLoader.prototype.init = function() { - var cls; - cls = this.required_classes[this.initNum]; - if (cls) { - this.initNum++; - this.initcb(this.find(cls), this.init); - } else { - this.initDone(); - } - return true; - }; + })(); - /* - # Find a native class on the native ClassPath - */ + this.CONSTANT_Array = (function(_super) { + __extends(CONSTANT_Array, _super); - ClassLoader.prototype.findNative = function(name) { - var req, _native; - _native = null; - req = new XMLHttpRequest(); - req.open('GET', Settings.classpath + "/" + name + ".js", false); - req.send(null); - if (req.status === 200) { - try { - eval("_native = (" + req.responseText + ")"); - } catch (err) { - console.log("" + name); - throw err; - } - _native = new _native(); - return _native; - } else { - throw 'NoClassDefFoundError'; - } - }; + CONSTANT_Array.name = 'CONSTANT_Array'; - /* - # Finds a class on the classpath - */ + function CONSTANT_Array(length, type) { + this.length = length; + this.type = type; + CONSTANT_Array.__super__.constructor.call(this, this.length); + } + return CONSTANT_Array; - ClassLoader.prototype.find = function(class_name) { - var classReader, req, _class; - if ((this.loaded_classes[class_name] != null)) { - return this.loaded_classes[class_name]; - } - if (typeof class_name === 'undefined') return; - req = new XMLHttpRequest(); - req.open('GET', "" + Settings.classpath + "/rt/" + class_name + ".class", false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - if (req.status !== 200) { - req.open('GET', "" + Settings.path + "/" + class_name + ".class", false); - req.overrideMimeType('text/plain; charset=x-user-defined'); - req.send(null); - if (req.status !== 200) throw 'NoClassDefFoundError'; - } - classReader = new ClassReader(req.responseText); - _class = classReader.parse(); - _class.constant_pool[_class.super_class] = this.find(_class.get_super(), false); - this.loaded_classes[_class.get_name()] = _class; - return _class; - }; + })(Array); - return ClassLoader; + this.CONSTANT_Object = (function() { - })(); + CONSTANT_Object.name = 'CONSTANT_Object'; - /* - # ClassReader. Loads Binary Class Data into CONSTANT_Class format. - */ + function CONSTANT_Object(classname) { + this.classname = classname; + this.value = null; + } + return CONSTANT_Object; - ClassReader = (function() { + })(); - ClassReader.name = 'ClassReader'; + this.CONSTANT_integer = (function(_super) { - function ClassReader(stream) { - this.binaryReader = new jDataView(stream); - this.binaryReader._littleEndian = false; - this.console = { - debug: function() { - return true; - }, - writeConstant: function() { - return true; + __extends(CONSTANT_integer, _super); + + CONSTANT_integer.name = 'CONSTANT_integer'; + + function CONSTANT_integer(val, sign) { + var next; + if (val == null) val = 0; + if (sign == null) sign = false; + if (sign) { + if ((val & 0x8000) !== 0) { + next = (~val) + 1 & 0xffff; + val = next * -1; } - }; + } + if (isNaN(val)) throw 'UnexpectedNaN'; + CONSTANT_integer.__super__.constructor.call(this, val); } - ClassReader.prototype.parse = function() { - var _class; - _class = new CONSTANT_Class(); - this.parseClassVars(_class); - this.parseConstantPool(_class); - this.parseFileVars(_class); - this.parseInterfaces(_class); - this.parseFields(_class); - this.parseMethods(_class); - return _class; - }; + return CONSTANT_integer; - /* - # Read number of bits specified by length - */ + })(JVM_Number); + this.CONSTANT_int = (function(_super) { - ClassReader.prototype.read = function(length) { - switch (length) { - case 1: - return this.binaryReader.getUint8(); - case 2: - return this.binaryReader.getUint16(); - case 4: - return this.binaryReader.getUint32(); - default: - return this.binaryReader.seek(this.binaryReader.tell() + length); - } - }; + __extends(CONSTANT_int, _super); - ClassReader.prototype.readDouble = function() { - return this.binaryReader.getFloat32(); - }; + CONSTANT_int.name = 'CONSTANT_int'; - ClassReader.prototype.readString = function(length) { - return this.binaryReader.getString(length); - }; + function CONSTANT_int(val, sign) { + if (val == null) val = 0; + if (sign == null) sign = false; + CONSTANT_int.__super__.constructor.call(this, val, sign); + } - ClassReader.prototype.readTag = function() { - return this.read(1); - }; + return CONSTANT_int; - ClassReader.prototype.readConstant = function(tag) { - switch (tag) { - case 1: - return this.readString(this.read(2)); - case 3: - return new CONSTANT_integer(this.binaryReader.getUint32()); - case 4: - return new CONSTANT_float(this.binaryReader.getUint32()); - case 5: - return new CONSTANT_long(this.binaryReader.getFloat64()); - case 6: - return new CONSTANT_double(this.binaryReader.getFloat64()); - case 7: - return this.read(2); - case 8: - return new CONSTANT_Stringref(this.read(2)); - case 9: - return new CONSTANT_Fieldref_info(this.read(2), this.read(2)); - case 10: - return new CONSTANT_Methodref_info(this.read(2), this.read(2)); - case 12: - return new CONSTANT_NameAndType_info(this.read(2), this.read(2)); - case 11: - return new CONSTANT_InterfaceMethodref_info(this.read(2), this.read(2)); - default: - throw "UnknownConstantException, Offset : " + this.binaryReader.tell(); - } - }; + })(CONSTANT_integer); - ClassReader.prototype.parseClassVars = function(_class) { - var valid; - this.console.debug('magic number: ' + (_class.magic_number = this.read(4)), 2); - valid = _class.magic_number.toString(16) & 0xCAFEBABE; - if (valid !== 0) alert("Not JavaClass"); - this.console.debug('minor version: ' + (_class.minor_version = this.read(2)), 2); - this.console.debug('major version: ' + (_class.major_version = this.read(2)), 2); - return true; - }; + this.CONSTANT_float = (function(_super) { - ClassReader.prototype.parseConstantPool = function(_class) { - var constant, i, tag; - _class.constant_pool_count = this.read(2); - i = 0; - this.console.debug("Constant Pool Count : " + _class.constant_pool_count, 2); - while (++i < _class.constant_pool_count) { - tag = this.readTag(); - constant = this.readConstant(tag); - _class.constant_pool[i] = constant; - this.console.writeConstant(i, tag, constant, 2); - if (tag === 5 || tag === 6) { - i++; - } else if (tag === 7) { - if (constant !== _class.this_class) _class.dependancies.push(constant); - } - } - return true; - }; + __extends(CONSTANT_float, _super); - ClassReader.prototype.parseFileVars = function(_class) { - this.console.debug('access flags: ' + (_class.access_flags = this.read(2)), 2); - this.console.debug('this class: ' + (_class.this_class = this.read(2)), 2); - _class.super_class = this.read(2); - this.console.debug('super class: ' + _class.super_class, 2); - _class.real_name = _class.constant_pool[_class.constant_pool[_class.this_class]]; - return true; - }; + CONSTANT_float.name = 'CONSTANT_float'; - ClassReader.prototype.parseInterfaces = function(_class) { - var i; - this.console.debug('interface count: ' + (_class.interfaces_count = this.read(2)), 2); - i = -1; - while (++i < _class.interfaces_count) { - this.console.debug(_class.interfaces[i] = this.read(2), 2); - } - return true; - }; + function CONSTANT_float(val) { + if (val == null) val = 0.0; + CONSTANT_float.__super__.constructor.call(this, val); + } - ClassReader.prototype.parseFields = function(_class) { - var field, i; - this.console.debug('fields count: ' + (_class.fields_count = this.read(2)), 2); - i = -1; - while (++i < _class.fields_count) { - field = this.readFieldInfo(_class); - _class.fields[field[1].real_name] = field[0]; - } - return true; - }; + return CONSTANT_float; - ClassReader.prototype.parseMethods = function(_class) { - var i, method; - this.console.debug('method count: ' + (_class.method_count = this.read(2)), 2); - i = -1; - while (++i < _class.method_count) { - method = this.readMethodInfo(_class); - _class.methods[i] = method; - } - return true; - }; + })(JVM_Number); - ClassReader.prototype.parseAttributes = function(_class) { - return _class.attributes_count(this.read(2)); - }; + this.CONSTANT_long = (function(_super) { - ClassReader.prototype.readMethodInfo = function(_class) { - var attr, i, method_info; - method_info = {}; - this.console.debug(' access flags: ' + (method_info.access_flags = this.read(2)), 2); - this.console.debug(' name index: ' + (method_info.name_index = this.read(2)), 2); - method_info.name = _class.constant_pool[method_info.name_index]; - this.console.debug(' descriptor index: ' + (method_info.descriptor_index = this.read(2)), 2); - this.console.debug(' atrribute count: ' + (method_info.attribute_count = this.read(2)), 2); - method_info.attributes = new Array(method_info.attribute_count); - i = 0; - while (i++ < method_info.attribute_count) { - attr = this.readAttribute(_class); - method_info.attributes[attr.real_name] = attr; - } - return method_info; - }; + __extends(CONSTANT_long, _super); - ClassReader.prototype.readAttribute = function(_class) { - var attribute_length, attribute_name, real_name; - attribute_name = this.read(2); - attribute_length = this.read(4); - real_name = _class.constant_pool[attribute_name]; - this.console.debug(' attribute name: ' + real_name, 2); - this.console.debug(' attribute length: ' + attribute_length, 2); - if (real_name === 'Code') { - return this.readCodeAttribute(_class, attribute_name, attribute_length); - } else { - this.read(attribute_length); - return {}; - } - }; + CONSTANT_long.name = 'CONSTANT_long'; - ClassReader.prototype.readCodeAttribute = function(_class, name_index, length) { - var code_attribute, code_length, i; - code_attribute = {}; - code_attribute.attribute_name_index = name_index; - code_attribute.real_name = _class.constant_pool[name_index]; - code_attribute.attribute_length = length; - code_attribute.max_stack = this.read(2); - code_attribute.max_locals = this.read(2); - code_attribute.code_length = this.read(4); - code_attribute.code = {}; - code_length = code_attribute.code_length; - i = -1; - while (++i < code_length) { - this.console.debug(' ' + (code_attribute.code[i] = this.read(1)), 2); - } - code_attribute.exception_table_length = this.read(2); - this.read(code_attribute.exception_table_length * 8); - code_attribute.attributes_count = this.read(2); - code_attribute.attributes = new Array(code_attribute.attributes_count); - i = -1; - while (++i < code_attribute.attributes_count) { - code_attribute.attributes[i] = this.readAttribute(_class); - } - return code_attribute; - }; + function CONSTANT_long(val) { + if (val == null) val = 0; + CONSTANT_long.__super__.constructor.call(this, val); + } - ClassReader.prototype.readFieldInfo = function(_class) { - var c, descriptor, field_info, i; - field_info = {}; - this.console.debug(' access flags: ' + (field_info.access_flags = this.read(2)), 2); - this.console.debug(' name index: ' + (field_info.name_index = this.read(2)), 2); - this.console.debug(' descriptor index: ' + (field_info.descriptor_index = this.read(2)), 2); - this.console.debug(' atrribute count: ' + (field_info.attribute_count = this.read(2)), 2); - field_info.attributes = new Array(field_info.attribute_count); - field_info.real_name = _class.constant_pool[field_info.name_index]; - i = 0; - while (i++ < field_info.attribute_count) { - field_info.attributes[i] = this.readAttribute(_class); - } - descriptor = _class.constant_pool[field_info.descriptor_index]; - if (descriptor === 'I') c = new CONSTANT_integer(); - if (descriptor === 'J') c = new CONSTANT_long(); - if (descriptor === 'F') c = new CONSTANT_float(); - if (descriptor === 'D') c = new CONSTANT_double(); - if (descriptor === 'S') c = new CONSTANT_short(); - if (descriptor === 'Z') c = new CONSTANT_boolean(); - if (descriptor === 'C') c = new CONSTANT_char(); - if (descriptor === 'B') c = new CONSTANT_byte(); - if (descriptor.charAt(0) === 'L') c = new JVM_Reference(0); - if (descriptor.charAt(0) === '[') c = new JVM_Reference(0); - return [c, field_info]; - }; + return CONSTANT_long; - return ClassReader; + })(JVM_Number); - })(); + this.CONSTANT_double = (function(_super) { - /* - Represents a Java Class file. Also provides Class verification methods. - @returns {JavaClass} - */ + __extends(CONSTANT_double, _super); + CONSTANT_double.name = 'CONSTANT_double'; - this.CONSTANT_Class = (function(_super) { + function CONSTANT_double(val) { + if (val == null) val = 0.0; + CONSTANT_double.__super__.constructor.call(this, val); + } - __extends(CONSTANT_Class, _super); + return CONSTANT_double; - CONSTANT_Class.name = 'CONSTANT_Class'; + })(JVM_Number); - function CONSTANT_Class() { - this.magic_number = 0; - this.minor_version = 0; - this.major_version = 0; - this.constant_pool_count = 0; - this.constant_pool = []; - this.access_flags = 0; - this.this_class = 0; - this.super_class = 0; - this.interfaces_count = 0; - this.interfaces = []; - this.fields_count = 0; - this.fields = {}; - this.methods_count = 0; - this.methods = {}; - this.attributes_count = 0; - this.attributes = []; - this.dependancies = []; - this.real_name = 'None'; - } + this.CONSTANT_char = (function() { - CONSTANT_Class.prototype.get_super = function() { - var cls; - cls = this.constant_pool[this.super_class]; - while (typeof cls === 'number') { - cls = this.constant_pool[cls]; - } - return cls; - }; + CONSTANT_char.name = 'CONSTANT_char'; - CONSTANT_Class.prototype.get_name = function() { - var super_ref; - super_ref = this.constant_pool[this.this_class]; - return this.constant_pool[super_ref]; - }; + function CONSTANT_char(value) { + this.value = value != null ? value : '\u0000'; + this.value = this.value.charCodeAt(); + } - CONSTANT_Class.prototype.set_method_count = function(count) { - this.methods_count = parseInt(count, 16); - this.methods = new Array(parseInt(count, 16)); - return count; - }; + return CONSTANT_char; - CONSTANT_Class.prototype.set_constant_pool_count = function(count) { - this.constant_pool_count = parseInt(count, 16); - this.constant_pool = new Array(parseInt(count, 16)); - return count; - }; + })(); - CONSTANT_Class.prototype.set_interfaces_count = function(count) { - this.interfaces_count = parseInt(count, 16); - this.interfaces = new Array(parseInt(count, 16)); - return count; - }; + this.CONSTANT_short = (function(_super) { - CONSTANT_Class.prototype.set_fields_count = function(count) { - this.fields_count = parseInt(count, 16); - this.fields = new Array(parseInt(count, 16)); - return count; - }; + __extends(CONSTANT_short, _super); - CONSTANT_Class.prototype.set_attributes_count = function(count) { - this.attributes_count = parseInt(count, 16); - this.attributes = new Array(parseInt(count, 16)); - return count; - }; + CONSTANT_short.name = 'CONSTANT_short'; - return CONSTANT_Class; + function CONSTANT_short(val) { + if (val == null) val = 0; + CONSTANT_short.__super__.constructor.call(this, val); + } - })(JVM_Object); + return CONSTANT_short; - /* - ` - compatibility = { - ArrayBuffer: typeof ArrayBuffer !== 'undefined', - DataView: typeof DataView !== 'undefined' && 'getFloat64' in DataView.prototype - } - - jDataView = function (buffer, byteOffset, byteLength, littleEndian) { - this._buffer = buffer; - - // Handle Type Errors - if (!(compatibility.ArrayBuffer && buffer instanceof ArrayBuffer) && - !(typeof buffer === 'string')) { - throw new TypeError("Type error"); - } - - // Check parameters and existing functionnalities - this._isArrayBuffer = compatibility.ArrayBuffer && buffer instanceof ArrayBuffer; - this._isDataView = compatibility.DataView && this._isArrayBuffer; - - // Default Values - this._littleEndian = littleEndian === undefined ? true : littleEndian; - - var bufferLength = this._isArrayBuffer ? buffer.byteLength : buffer.length; - if (byteOffset == undefined) { - byteOffset = 0; - } - - if (byteLength == undefined) { - byteLength = bufferLength - byteOffset; - } - - if (!this._isDataView) { - // Do additional checks to simulate DataView - if (typeof byteOffset !== 'number') { - throw new TypeError("Type error"); - } - if (typeof byteLength !== 'number') { - throw new TypeError("Type error"); - } - if (typeof byteOffset < 0) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - if (typeof byteLength < 0) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - } - - // Instanciate - if (this._isDataView) { - this._view = new DataView(buffer, byteOffset, byteLength); - this._start = 0; - } - this._start = byteOffset; - if (byteOffset >= bufferLength) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - - this._offset = 0; - this.length = byteLength; + })(JVM_Number); + + this.CONSTANT_byte = (function() { + + CONSTANT_byte.name = 'CONSTANT_byte'; + + function CONSTANT_byte(value, sign) { + var next; + this.value = value != null ? value : 0; + if (sign == null) sign = false; + if (sign) { + if ((this.value & 0x80) !== 0) { + next = (~this.value) + 1 & 0xff; + this.value = next * -1; + } + } + } + + return CONSTANT_byte; + + })(); + + this.CONSTANT_boolean = (function() { + + CONSTANT_boolean.name = 'CONSTANT_boolean'; + + function CONSTANT_boolean(value) { + this.value = value != null ? value : 0; + } + + return CONSTANT_boolean; + + })(); + + this.CONSTANT_String = (function(_super) { + + __extends(CONSTANT_String, _super); + + CONSTANT_String.name = 'CONSTANT_String'; + + function CONSTANT_String(value) { + this.value = value != null ? value : ''; + } + + return CONSTANT_String; + + })(String); + + this.JVM_RECOGNIZED_METHOD_MODIFIERS = { + JVM_ACC_PUBLIC: 0x0001, + JVM_ACC_PRIVATE: 0x0002, + JVM_ACC_PROTECTED: 0x0004, + JVM_ACC_STATIC: 0x0008, + JVM_ACC_FINAL: 0x0010, + JVM_ACC_SYNCHRONIZED: 0x0020, + JVM_ACC_BRIDGE: 0, + JVM_ACC_VARARGS: 0, + JVM_ACC_NATIVE: 0x0100, + JVM_ACC_ABSTRACT: 0x0400, + JVM_ACC_STRICT: 0, + JVM_ACC_SYNTHETIC: 0 }; - - jDataView.createBuffer = function () { - if (typeof ArrayBuffer !== 'undefined') { - var buffer = new ArrayBuffer(arguments.length); - var view = new Int8Array(buffer); - for (var i = 0; i < arguments.length; ++i) { - view[i] = arguments[i]; - } - return buffer; - } - - return String.fromCharCode.apply(null, arguments); + + this.JVM_RECOGNIZED_CLASS_MODIFIERS = { + JVM_ACC_PUBLIC: 0x0001, + JVM_ACC_FINAL: 0x0010, + JVM_ACC_SUPER: 0x0020, + JVM_ACC_INTERFACE: 0x0200, + JVM_ACC_ABSTRACT: 0x0400 }; - - jDataView.prototype = { - - // Helpers - - getString: function (length, byteOffset) { - var value; - - // Handle the lack of byteOffset - if (byteOffset === undefined) { - byteOffset = this._offset; - } - - // Error Checking - if (typeof byteOffset !== 'number') { - throw new TypeError("Type error"); - } - if (length < 0 || byteOffset + length > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - - if (this._isArrayBuffer) { - // Use Int8Array and String.fromCharCode to extract a string - var int8array = new Int8Array(this._buffer, this._start + byteOffset, length); - var stringarray = []; - for (var i = 0; i < length; ++i) { - stringarray[i] = int8array[i]; - } - value = String.fromCharCode.apply(null, stringarray); - } else { - value = this._buffer.substr(this._start + byteOffset, length); - } - - this._offset = byteOffset + length; - return value; - }, - - getChar: function (byteOffset) { - var value, size = 1; - - // Handle the lack of byteOffset - if (byteOffset === undefined) { - byteOffset = this._offset; - } - - if (this._isArrayBuffer) { - // Use Int8Array and String.fromCharCode to extract a string - value = String.fromCharCode(this.getUint8(byteOffset)); - } else { - // Error Checking - if (typeof byteOffset !== 'number') { - throw new TypeError("Type error"); - } - if (byteOffset + size > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - - value = this._buffer.charAt(this._start + byteOffset); - this._offset = byteOffset + size; - } - - return value; - }, - - tell: function () { - return this._offset; - }, - - seek: function (byteOffset) { - if (typeof byteOffset !== 'number') { - throw new TypeError("Type error"); - } - if (byteOffset < 0 || byteOffset > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - - this._offset = byteOffset; - }, - - // Compatibility functions on a String Buffer - - _endianness: function (offset, pos, max, littleEndian) { - return offset + (littleEndian ? max - pos - 1 : pos); - }, - - _getFloat64: function (offset, littleEndian) { - var b0 = this._getUint8(this._endianness(offset, 0, 8, littleEndian)), - b1 = this._getUint8(this._endianness(offset, 1, 8, littleEndian)), - b2 = this._getUint8(this._endianness(offset, 2, 8, littleEndian)), - b3 = this._getUint8(this._endianness(offset, 3, 8, littleEndian)), - b4 = this._getUint8(this._endianness(offset, 4, 8, littleEndian)), - b5 = this._getUint8(this._endianness(offset, 5, 8, littleEndian)), - b6 = this._getUint8(this._endianness(offset, 6, 8, littleEndian)), - b7 = this._getUint8(this._endianness(offset, 7, 8, littleEndian)), - - sign = 1 - (2 * (b0 >> 7)), - exponent = ((((b0 << 1) & 0xff) << 3) | (b1 >> 4)) - (Math.pow(2, 10) - 1), - - // Binary operators such as | and << operate on 32 bit values, using + and Math.pow(2) instead - mantissa = ((b1 & 0x0f) * Math.pow(2, 48)) + (b2 * Math.pow(2, 40)) + (b3 * Math.pow(2, 32)) - + (b4 * Math.pow(2, 24)) + (b5 * Math.pow(2, 16)) + (b6 * Math.pow(2, 8)) + b7; - - if (mantissa == 0 && exponent == -(Math.pow(2, 10) - 1)) { - return 0.0; - } - - if (exponent == -1023) { // Denormalized - return sign * mantissa * Math.pow(2, -1022 - 52); - } - - return sign * (1 + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); - }, - - _getFloat32: function (offset, littleEndian) { - var b0 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)), - b1 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)), - b2 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)), - b3 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)), - - sign = 1 - (2 * (b0 >> 7)), - exponent = (((b0 << 1) & 0xff) | (b1 >> 7)) - 127, - mantissa = ((b1 & 0x7f) << 16) | (b2 << 8) | b3; - - if (mantissa == 0 && exponent == -127) { - return 0.0; - } - - if (exponent == -127) { // Denormalized - return sign * mantissa * Math.pow(2, -126 - 23); - } - - return sign * (1 + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); - }, - - _getInt32: function (offset, littleEndian) { - var b = this._getUint32(offset, littleEndian); - return b > Math.pow(2, 31) - 1 ? b - Math.pow(2, 32) : b; - }, - - _getUint32: function (offset, littleEndian) { - var b3 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)), - b2 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)), - b1 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)), - b0 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); - - return (b3 * Math.pow(2, 24)) + (b2 << 16) + (b1 << 8) + b0; - }, - - _getInt16: function (offset, littleEndian) { - var b = this._getUint16(offset, littleEndian); - return b > Math.pow(2, 15) - 1 ? b - Math.pow(2, 16) : b; - }, - - _getUint16: function (offset, littleEndian) { - var b1 = this._getUint8(this._endianness(offset, 0, 2, littleEndian)), - b0 = this._getUint8(this._endianness(offset, 1, 2, littleEndian)); - - return (b1 << 8) + b0; - }, - - _getInt8: function (offset) { - var b = this._getUint8(offset); - return b > Math.pow(2, 7) - 1 ? b - Math.pow(2, 8) : b; - }, - - _getUint8: function (offset) { - if (this._isArrayBuffer) { - return new Uint8Array(this._buffer, this._start + offset, 1)[0]; - } else { - return this._buffer.charCodeAt(this._start + offset) & 0xff; - } - } - }; - - // Create wrappers - - var dataTypes = { - 'Int8': 1, - 'Int16': 2, - 'Int32': 4, - 'Uint8': 1, - 'Uint16': 2, - 'Uint32': 4, - 'Float32': 4, - 'Float64': 8 - }; - - for (var type in dataTypes) { - // Bind the variable type - (function (type) { - var size = dataTypes[type]; - - // Create the function - jDataView.prototype['get' + type] = - function (byteOffset, littleEndian) { - var value; - - // Handle the lack of endianness - if (littleEndian == undefined) { - littleEndian = this._littleEndian; - } - - // Handle the lack of byteOffset - if (byteOffset === undefined) { - byteOffset = this._offset; - } - - // Dispatch on the good method - if (this._isDataView) { - // DataView: we use the direct method - value = this._view['get' + type](byteOffset, littleEndian); - } - // ArrayBuffer: we use a typed array of size 1 if the alignment is good - // ArrayBuffer does not support endianess flag (for size > 1) - else if (this._isArrayBuffer && byteOffset % size == 0 && (size == 1 || littleEndian)) { - value = new self[type + 'Array'](this._buffer, byteOffset, 1)[0]; - } - else { - // Error Checking - if (typeof byteOffset !== 'number') { - throw new TypeError("Type error"); - } - if (byteOffset + size > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - value = this['_get' + type](this._start + byteOffset, littleEndian); - } - - // Move the internal offset forward - this._offset = byteOffset + size; - - return value; - }; - })(type); - }` + + /* JVM_ACC_ANNOTATION | \ + JVM_ACC_ENUM | \ + JVM_ACC_SYNTHETIC) */ - compatibility = { - ArrayBuffer: typeof ArrayBuffer !== "undefined", - DataView: typeof DataView !== "undefined" && "getFloat64" in DataView.prototype + this.JVM_RECOGNIZED_FIELD_MODIFIERS = { + JVM_ACC_PUBLIC: 0x0000, + JVM_ACC_PRIVATE: 0x0000, + JVM_ACC_PROTECTED: 0x0000, + JVM_ACC_STATIC: 0x0000, + JVM_ACC_FINAL: 0x0000, + JVM_ACC_VOLATILE: 0x0000, + JVM_ACC_TRANSIENT: 0x0000, + JVM_ACC_ENUM: 0x0000, + JVM_ACC_SYNTHETIC: 0x0000 }; - jDataView = function(buffer, byteOffset, byteLength, littleEndian) { - var bufferLength; - this._buffer = buffer; - if (!(compatibility.ArrayBuffer && buffer instanceof ArrayBuffer) && (typeof buffer !== "string")) { - throw new TypeError("Type error"); - } - this._isArrayBuffer = compatibility.ArrayBuffer && buffer instanceof ArrayBuffer; - this._isDataView = compatibility.DataView && this._isArrayBuffer; - this._littleEndian = (littleEndian === undefined ? true : littleEndian); - bufferLength = (this._isArrayBuffer ? buffer.byteLength : buffer.length); - if (byteOffset === undefined) byteOffset = 0; - if (byteLength === undefined) byteLength = bufferLength - byteOffset; - if (!this._isDataView) { - if (typeof byteOffset !== "number") throw new TypeError("Type error"); - if (typeof byteLength !== "number") throw new TypeError("Type error"); - if (typeof byteOffset < 0) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - if (typeof byteLength < 0) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - } - if (this._isDataView) { - this._view = new DataView(buffer, byteOffset, byteLength); - this._start = 0; - } - this._start = byteOffset; - if (byteOffset >= bufferLength) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - this._offset = 0; - return this.length = byteLength; + this.FIELD_DESCRIPTORS = { + 'B': 'CONSTANT_byte', + 'C': 'CONSTANT_char', + 'D': 'CONSTANT_double', + 'F': 'CONSTANT_float', + 'I': 'CONSTANT_integer', + 'J': 'CONSTANT_long', + 'L': 'CONSTANT_Class', + 'S': 'CONSTANT_short', + 'Z': 'CONSTANT_boolean', + '[': 'CONSTANT_Array' }; - jDataView.createBuffer = function() { - var buffer, i, view; - if (typeof ArrayBuffer !== "undefined") { - buffer = new ArrayBuffer(arguments.length); - view = new Int8Array(buffer); - i = 0; - while (i < arguments.length) { - view[i] = arguments[i]; - ++i; - } - return buffer; + /* + Used by the ClassLoader + */ + + + this.CONSTANT_Methodref_info = (function() { + + CONSTANT_Methodref_info.name = 'CONSTANT_Methodref_info'; + + function CONSTANT_Methodref_info(class_index, name_and_type_index) { + this.class_index = class_index; + this.name_and_type_index = name_and_type_index; } - return String.fromCharCode.apply(null, arguments); - }; - jDataView.prototype = { - getString: function(length, byteOffset) { - var i, int8array, stringarray, value; - value = void 0; - if (byteOffset === undefined) byteOffset = this._offset; - if (typeof byteOffset !== "number") throw new TypeError("Type error"); - if (length < 0 || byteOffset + length > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - if (this._isArrayBuffer) { - int8array = new Int8Array(this._buffer, this._start + byteOffset, length); - stringarray = []; - i = 0; - while (i < length) { - stringarray[i] = int8array[i]; - ++i; - } - value = String.fromCharCode.apply(null, stringarray); - } else { - value = this._buffer.substr(this._start + byteOffset, length); - } - this._offset = byteOffset + length; - return value; - }, - getChar: function(byteOffset) { - var size, value; - value = void 0; - size = 1; - if (byteOffset === undefined) byteOffset = this._offset; - if (this._isArrayBuffer) { - value = String.fromCharCode(this.getUint8(byteOffset)); - } else { - if (typeof byteOffset !== "number") throw new TypeError("Type error"); - if (byteOffset + size > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - value = this._buffer.charAt(this._start + byteOffset); - this._offset = byteOffset + size; - } - return value; - }, - tell: function() { - return this._offset; - }, - seek: function(byteOffset) { - if (typeof byteOffset !== "number") throw new TypeError("Type error"); - if (byteOffset < 0 || byteOffset > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - return this._offset = byteOffset; - }, - _endianness: function(offset, pos, max, littleEndian) { - return offset + (littleEndian ? max - pos - 1 : pos); - }, - _getFloat64: function(offset, littleEndian) { - var b0, b1, b2, b3, b4, b5, b6, b7, exponent, mantissa, sign; - b0 = this._getUint8(this._endianness(offset, 0, 8, littleEndian)); - b1 = this._getUint8(this._endianness(offset, 1, 8, littleEndian)); - b2 = this._getUint8(this._endianness(offset, 2, 8, littleEndian)); - b3 = this._getUint8(this._endianness(offset, 3, 8, littleEndian)); - b4 = this._getUint8(this._endianness(offset, 4, 8, littleEndian)); - b5 = this._getUint8(this._endianness(offset, 5, 8, littleEndian)); - b6 = this._getUint8(this._endianness(offset, 6, 8, littleEndian)); - b7 = this._getUint8(this._endianness(offset, 7, 8, littleEndian)); - sign = 1 - (2 * (b0 >> 7)); - exponent = (((b0 << 1) & 0xff) << 3) | (b1 >> 4) - (Math.pow(2, 10) - 1); - mantissa = (b1 & 0x0f) * Math.pow(2, 48) + (b2 * Math.pow(2, 40)) + (b3 * Math.pow(2, 32)) + (b4 * Math.pow(2, 24)) + (b5 * Math.pow(2, 16)) + (b6 * Math.pow(2, 8)) + b7; - if (mantissa === 0 && exponent === -(Math.pow(2, 10) - 1)) return 0.0; - if (exponent === -1023) return sign * mantissa * Math.pow(2, -1022 - 52); - return sign * (1 + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); - }, - _getFloat32: function(offset, littleEndian) { - var b0, b1, b2, b3, exponent, mantissa, sign; - b0 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)); - b1 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)); - b2 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)); - b3 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); - sign = 1 - (2 * (b0 >> 7)); - exponent = ((b0 << 1) & 0xff) | (b1 >> 7) - 127; - mantissa = ((b1 & 0x7f) << 16) | (b2 << 8) | b3; - if (mantissa === 0 && exponent === -127) return 0.0; - if (exponent === -127) return sign * mantissa * Math.pow(2, -126 - 23); - return sign * (1 + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); - }, - _getInt32: function(offset, littleEndian) { - var b; - b = this._getUint32(offset, littleEndian); - if (b > Math.pow(2, 31) - 1) { - return b - Math.pow(2, 32); - } else { - return b; - } - }, - _getUint32: function(offset, littleEndian) { - var b0, b1, b2, b3; - b3 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)); - b2 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)); - b1 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)); - b0 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); - return (b3 * Math.pow(2, 24)) + (b2 << 16) + (b1 << 8) + b0; - }, - _getInt16: function(offset, littleEndian) { - var b; - b = this._getUint16(offset, littleEndian); - if (b > Math.pow(2, 15) - 1) { - return b - Math.pow(2, 16); - } else { - return b; - } - }, - _getUint16: function(offset, littleEndian) { - var b0, b1; - b1 = this._getUint8(this._endianness(offset, 0, 2, littleEndian)); - b0 = this._getUint8(this._endianness(offset, 1, 2, littleEndian)); - return (b1 << 8) + b0; - }, - _getInt8: function(offset) { - var b; - b = this._getUint8(offset); - if (b > Math.pow(2, 7) - 1) { - return b - Math.pow(2, 8); - } else { - return b; - } - }, - _getUint8: function(offset) { - if (this._isArrayBuffer) { - return new Uint8Array(this._buffer, this._start + offset, 1)[0]; - } else { - return this._buffer.charCodeAt(this._start + offset) & 0xff; - } - } - }; + return CONSTANT_Methodref_info; - dataTypes = { - Int8: 1, - Int16: 2, - Int32: 4, - Uint8: 1, - Uint16: 2, - Uint32: 4, - Float32: 4, - Float64: 8 - }; + })(); - _fn = function(type) { - var size; - size = dataTypes[type]; - return jDataView.prototype["get" + type] = function(byteOffset, littleEndian) { - var value; - value = void 0; - if (littleEndian === undefined) littleEndian = this._littleEndian; - if (byteOffset === undefined) byteOffset = this._offset; - if (this._isDataView) { - value = this._view["get" + type](byteOffset, littleEndian); - } else if (this._isArrayBuffer && byteOffset % size === 0 && (size === 1 || littleEndian)) { - value = new self[type + "Array"](this._buffer, byteOffset, 1)[0]; - } else { - if (typeof byteOffset !== "number") throw new TypeError("Type error"); - if (byteOffset + size > this.length) { - throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); - } - value = this["_get" + type](this._start + byteOffset, littleEndian); - } - this._offset = byteOffset + size; - return value; - }; - }; - for (type in dataTypes) { - _fn(type); - } + this.CONSTANT_InterfaceMethodref_info = (function() { - /* - Runtime Data Area of the JVM. Stores all loaded Classes, - instantiated Objects and running or paused Threads. - */ + CONSTANT_InterfaceMethodref_info.name = 'CONSTANT_InterfaceMethodref_info'; + function CONSTANT_InterfaceMethodref_info(class_index, name_and_type_index) { + this.class_index = class_index; + this.name_and_type_index = name_and_type_index; + } - this.RDA = (function() { + return CONSTANT_InterfaceMethodref_info; - RDA.name = 'RDA'; + })(); - function RDA() { - var self; - this.waiting = new Array(); - this.method_area = {}; - this.heap = { - permgen: {}, - oldgen: {}, - younggen: {}, - id: 0, - 0: null - }; - this.heap.allocate = function(object) { - var ref; - if (object instanceof JVM_Reference) throw "Reference on heap?"; - ref = ++this.id; - object.colour = 0; - this.younggen[ref] = object; - return new JVM_Reference(ref); - }; - this.heap.get = function(ref) { - var error, object, pointer, _ref; - try { - pointer = ref.pointer; - if ((object = this.younggen[pointer]) || (object = this.oldgen[pointer]) || (object = this.permgen[pointer])) { - return object; - } else { - throw "Object not found"; - } - } catch (e) { - error = (_ref = "Failed to retrieve Object from Heap" + e) != null ? _ref : ": " + { - e: "" - }; - throw error; - } - }; - this.heap.update = function(ref, newobject) { - var pointer; - pointer = ref.pointer; - if (this.younggen[pointer]) { - return this.younggen[pointer] = newobject; - } else if (this.oldgen[pointer]) { - return this.oldgen[pointer] = newobject; - } else if (this.permgen[pointer]) { - return this.permgen[pointer] = newobject; - } else { - throw "Object not found"; - } - }; - this.threads = new Array(); - this.clinitThread = new Worker(Settings.workerpath + '/Thread.js'); - this.clinitThread['finished'] = true; - this.clinitThread.waiting = new Array(); - self = this; - this.clinitThread.loaded = 0; - this.clinitThread.onmessage = function(e) { - return self.message.call(self, e); - }; - this.clinitThread.onerror = function(e) { - return console.log(e); - }; - this.clinitThread.init = true; - this.clinitThread.callback = new Array(); + this.CONSTANT_Fieldref_info = (function() { + + CONSTANT_Fieldref_info.name = 'CONSTANT_Fieldref_info'; + + function CONSTANT_Fieldref_info(class_index, name_and_type_index) { + this.class_index = class_index; + this.name_and_type_index = name_and_type_index; } - RDA.prototype.addNative = function(name, raw_class) { - return this.method_area[name] = raw_class; - }; + return CONSTANT_Fieldref_info; - /* - Adds a Class loaded by the ClassLoader to the Method Area. - If the Class has a method, that will be executed here. - - If the Class is the entry point to the application, the main method will be - resolved and executed. - */ + })(); + this.CONSTANT_NameAndType_info = (function() { - RDA.prototype.addClass = function(classname, raw_class, instantiatedCallback, threadFinishedCallback) { - var cls, - _this = this; - cls = raw_class; - while ((cls = cls.get_super()) !== void 0) { - if (!this.method_area[cls.real_name]) { - this.method_area[cls.real_name] = cls; - } - } - this.method_area[classname] = raw_class; - return this.clinit(classname, raw_class, function() { - var method; - if (classname === _this.JVM.mainclassname) { - method = _this.JVM.JVM_ResolveMethod(raw_class, 'main', '([Ljava/lang/String;)V'); - _this.createThread(classname, method, null, threadFinishedCallback); - } - if (instantiatedCallback) return instantiatedCallback(); - }); - }; + CONSTANT_NameAndType_info.name = 'CONSTANT_NameAndType_info'; + + function CONSTANT_NameAndType_info(name_index, descriptor_index) { + this.name_index = name_index; + this.descriptor_index = descriptor_index; + } + + return CONSTANT_NameAndType_info; + + })(); + + this.CONSTANT_Stringref = (function() { + + CONSTANT_Stringref.name = 'CONSTANT_Stringref'; + + function CONSTANT_Stringref(string_index) { + this.string_index = string_index; + } + + return CONSTANT_Stringref; + + })(); + + /* + # The Boot ClassLoader for the JVM + */ + + + this.required_classes_length = 5; + + this.ClassLoader = (function() { + + ClassLoader.name = 'ClassLoader'; + + ClassLoader.prototype.classReader = 1; + + ClassLoader.prototype.stack = new Array; + + ClassLoader.prototype.ps_id = 0; + + ClassLoader.prototype.required_classes = ['java/lang/Class', 'java/lang/String', 'java/lang/System', 'javascript/io/JavaScriptPrintStream']; + + ClassLoader.prototype.initNum = 0; + + ClassLoader.prototype.initcb = 0; + + ClassLoader.prototype.loaded_classes = {}; /* - Creates a new Thread instance to execute Java methods. Each Java Thread - is represented by a JavaScript worker + Constructor + Set runtime data area and grab console from global scope */ - RDA.prototype.createThread = function(mainClassName, method, locals, callback) { - var args, id, self, t; - id = this.threads.length - 1; - t = new Worker(Settings.workerpath + '/Thread.js'); - self = this; - t.onmessage = function(e) { - return self.message.call(self, e); - }; - t.onerror = function(e) { - return console.log(e); - }; - this.threads.push(t); - if (callback) t.callback = callback; - args = { - 'action': 'new', - 'resource': { - 'class': this.method_area[mainClassName], - 'id': id, - 'entryMethod': method, - 'locals': locals + function ClassLoader(initcb, initDone) { + this.initcb = initcb; + this.initDone = initDone; + this.init = __bind(this.init, this); + + this.console = { + debug: function(message) { + return console.log(message); + }, + print: function(message) { + return console.log(message); } }; - t.postMessage(args); - return true; - }; + } /* - If a Class contains a method, it is executed as the class - is loaded + To be called on instanstiation. + Seperate to Constructor so that the JVM can resolve required classes and + their native counterparts. */ - RDA.prototype.clinit = function(classname, raw_class, callback) { - var clsini, message; - clsini = this.JVM.JVM_ResolveMethod(raw_class, '', '()V'); - if (clsini) { - message = { - 'action': 'new', - 'resource': { - 'class': raw_class, - 'id': 0, - 'entryMethod': clsini - } - }; - this.createThread(classname, clsini, null, callback); - /*@clinitThread.callback.push(callback) - - if @clinitThread.finished or !@clinitThread.init - @clinitThread.finished = false - @clinitThread.postMessage(message) - else - @clinitThread.waiting.push(message) - */ - + ClassLoader.prototype.init = function() { + var cls; + cls = this.required_classes[this.initNum]; + if (cls) { + this.initNum++; + this.initcb(this.find(cls), this.init); } else { - callback(); + this.initDone(); } return true; }; /* - Notify all threads waiting on a particular notifier object. - Threads will continue executing from where they were paused. - @see Thread.notify() + # Find a native class on the native ClassPath */ - RDA.prototype.notifyAll = function(notifierName, data) { - return true; + ClassLoader.prototype.findNative = function(name) { + var req, _native; + _native = null; + req = new XMLHttpRequest(); + req.open('GET', Settings.classpath + "/" + name + ".js", false); + req.send(null); + if (req.status === 200) { + try { + eval("_native = (" + req.responseText + ")"); + } catch (err) { + console.log("" + name); + throw err; + } + _native = new _native(); + return _native; + } else { + throw 'NoClassDefFoundError'; + } }; /* - Thread interface methods. The following are messages received from - running Threads. These are detailed individually, but are usually requests - for resources such as Objects. + # Finds a class on the classpath */ - RDA.prototype.message = function(e) { - var actions; - actions = { - 'resolveClass': function(data) { - var _this = this; - return this.JVM.JVM_ResolveClass(data.name, e.target, function(cls) { - return e.target.postMessage({ - 'action': 'resource', - 'resource': cls - }); - }); - }, - 'resolveNativeClass': function(data) { - if (this.JVM.JVM_ResolveNativeClass(data.name, e.target)) { - return e.target.postMessage({ - 'action': 'notify' - }); - } - }, - 'resolveMethod': function(data) { - var _this = this; - return this.JVM.JVM_ResolveClass(data.classname, e.target, function(cls) { - var method; - method = _this.JVM.JVM_ResolveMethod(cls, data.name, data.descriptor); - return e.target.postMessage({ - 'action': 'resource', - 'resource': method - }); - }); - }, - 'executeNativeMethod': function(data) { - var returnval; - returnval = this.JVM.JVM_ExecuteNativeMethod(data.classname, data.methodname, data.args); - return e.target.postMessage({ - 'action': 'resource', - 'resource': returnval - }); + ClassLoader.prototype.find = function(class_name) { + var classReader, req, _class; + if ((this.loaded_classes[class_name] != null)) { + return this.loaded_classes[class_name]; + } + if (typeof class_name === 'undefined') return; + req = new XMLHttpRequest(); + req.open('GET', "" + Settings.classpath + "/rt/" + class_name + ".class", false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + if (req.status !== 200) { + req.open('GET', "" + Settings.path + "/" + class_name + ".class", false); + req.overrideMimeType('text/plain; charset=x-user-defined'); + req.send(null); + if (req.status !== 200) throw 'NoClassDefFoundError'; + } + classReader = new ClassReader(req.responseText); + _class = classReader.parse(); + _class.constant_pool[_class.super_class] = this.find(_class.get_super(), false); + this.loaded_classes[_class.get_name()] = _class; + return _class; + }; + + return ClassLoader; + + })(); + + /* + # ClassReader. Loads Binary Class Data into CONSTANT_Class format. + */ + + + ClassReader = (function() { + + ClassReader.name = 'ClassReader'; + + function ClassReader(stream) { + this.binaryReader = new jDataView(stream); + this.binaryReader._littleEndian = false; + this.console = { + debug: function() { + return true; }, - 'resolveField': function(data) {}, - 'resolveString': function(data) { - var worker; - worker = e.target; - return this.JVM.JVM_ResolveStringLiteral(data.string, function(stringref) { - return worker.postMessage({ - 'action': 'resource', - 'resource': stringref - }); - }); - }, - 'getObject': function(data) { - var object; - object = this.heap.get(data.reference); - return e.target.postMessage({ - 'action': 'resource', - 'resource': object - }); - }, - 'updateObject': function(data) { - this.heap.update(data.reference, data.object); - return e.target.postMessage({ - 'action': 'notify' - }); - }, - 'getStatic': function(data) { - var field; - field = this.method_area[data.classname].fields[data.fieldname]; - return e.target.postMessage({ - 'action': 'resource', - 'resource': field - }); - }, - 'setStatic': function(data) { - this.method_area[data.classname].fields[data.fieldname] = data.value; - return e.target.postMessage({ - 'action': 'notify' - }); - }, - 'setObjectField': function(data) { - var obj; - obj = this.heap.get(data.reference); - obj[data.fieldname] = data.value; - return e.target.postMessage({ - 'action': 'notify' - }); - }, - 'getObjectField': function(data) { - var obj, value; - obj = this.heap.get(data.reference); - value = obj[data.fieldname]; - return e.target.postMessage({ - 'action': 'resource', - 'resource': value - }); - }, - 'aquireLock': function(data) { - if (this.heap.get(data.reference).monitor.aquireLock(e.target)) { - return e.target.postMessage({ - 'action': 'notify' - }); - } - }, - 'releaseLock': function(data) { - return this.heap.get(data.reference).monitor.releaseLock(e.target); - }, - 'allocate': function(data) { - var ref; - ref = this.heap.allocate(data.object); - return e.target.postMessage({ - 'action': 'resource', - 'resource': ref - }); - }, - 'allocateNew': function(data) { - var classname, - _this = this; - classname = data.classname; - return this.JVM.JVM_ResolveClass(classname, e.target, function(cls) { - var obj, ref; - obj = new JVM_Object(cls); - ref = _this.heap.allocate(obj); - return e.target.postMessage({ - 'action': 'resource', - 'resource': ref - }); - }); - }, - 'GCreport': function(data) { - return this.GC.add(data.objectrefs); - }, - 'log': function(data) { - if (typeof data.message === 'object') { - return console.log(data.message); - } else { - return console.log('#' + data.id + ' ' + data.message); - } - }, - 'finished': function(data) { - var nextClinit, - _this = this; - console.log('Thread #' + data.id + ' finished'); - if (data.result !== 1) throw 'Thread died with error ' + data.error; - if (e.target === this.clinitThread) { - this.clinitThread.loaded++; - this.clinitThread.callback.pop().call(this); - nextClinit = this.clinitThread.waiting.pop(); - if (nextClinit) { - return this.clinitThread.postMessage(nextClinit); - } else { - this.clinitThread.finished = true; - if (this.clinitThread.init) { - this.clinitThread.init = false; - return this.JVM.InitializeSystem(function() { - return _this.JVM.load(_this.JVM.mainclassname); - }); - } - } - } else if (e.target.callback) { - return e.target.callback(); - } + writeConstant: function() { + return true; } }; - return actions[e.data.action].call(this, e.data); - }; - - return RDA; - - })(); - - /* - # Factory to create the appropriate Method Frame from - # the method access flags. - */ - + } - this.MethodFactory = (function() { + ClassReader.prototype.parse = function() { + var _class; + _class = new CONSTANT_Class(); + this.parseClassVars(_class); + this.parseConstantPool(_class); + this.parseFileVars(_class); + this.parseInterfaces(_class); + this.parseFields(_class); + this.parseMethods(_class); + return _class; + }; - MethodFactory.name = 'MethodFactory'; + /* + # Read number of bits specified by length + */ - function MethodFactory(thread) { - this.thread = thread; - } - MethodFactory.prototype.createFrame = function(method, cls) { - var frame; - if (method.access_flags & 0x0100) { - frame = new NativeFrame(method, cls, null, this.thread); - this.thread.current_frame = frame; - this.thread.native_stack.push(frame); - return frame; - } else { - frame = new Frame(method, cls); - this.thread.current_frame = frame; - this.thread.jvm_stack.push(frame); - return frame; + ClassReader.prototype.read = function(length) { + switch (length) { + case 1: + return this.binaryReader.getUint8(); + case 2: + return this.binaryReader.getUint16(); + case 4: + return this.binaryReader.getUint32(); + default: + return this.binaryReader.seek(this.binaryReader.tell() + length); } }; - /* - Additional JVM functions exported from the main VM. - Add support for native methods interacting with the VM. - */ + ClassReader.prototype.readDouble = function() { + return this.binaryReader.getFloat32(); + }; + ClassReader.prototype.readString = function(length) { + return this.binaryReader.getString(length); + }; - /* - JavaScript doesn't define an assert function so here's our own. - */ + ClassReader.prototype.readTag = function() { + return this.read(1); + }; + ClassReader.prototype.readConstant = function(tag) { + switch (tag) { + case 1: + return this.readString(this.read(2)); + case 3: + return new CONSTANT_integer(this.binaryReader.getUint32()); + case 4: + return new CONSTANT_float(this.binaryReader.getUint32()); + case 5: + return new CONSTANT_long(this.binaryReader.getFloat64()); + case 6: + return new CONSTANT_double(this.binaryReader.getFloat64()); + case 7: + return this.read(2); + case 8: + return new CONSTANT_Stringref(this.read(2)); + case 9: + return new CONSTANT_Fieldref_info(this.read(2), this.read(2)); + case 10: + return new CONSTANT_Methodref_info(this.read(2), this.read(2)); + case 12: + return new CONSTANT_NameAndType_info(this.read(2), this.read(2)); + case 11: + return new CONSTANT_InterfaceMethodref_info(this.read(2), this.read(2)); + default: + throw "UnknownConstantException, Offset : " + this.binaryReader.tell(); + } + }; - JVM.prototype.assert = function(condition, message) { - if (!condition) throw "AssertException: " + message; + ClassReader.prototype.parseClassVars = function(_class) { + var valid; + this.console.debug('magic number: ' + (_class.magic_number = this.read(4)), 2); + valid = _class.magic_number.toString(16) & 0xCAFEBABE; + if (valid !== 0) alert("Not JavaClass"); + this.console.debug('minor version: ' + (_class.minor_version = this.read(2)), 2); + this.console.debug('major version: ' + (_class.major_version = this.read(2)), 2); + return true; }; - JVM.prototype.RegisterNatives = function(env, jclass, methods) { - var JVM_MethodName, name; - for (name in methods) { - JVM_MethodName = methods[name].name; - jclass[name] = JVM.prototype[JVM_MethodName]; + ClassReader.prototype.parseConstantPool = function(_class) { + var constant, i, tag; + _class.constant_pool_count = this.read(2); + i = 0; + this.console.debug("Constant Pool Count : " + _class.constant_pool_count, 2); + while (++i < _class.constant_pool_count) { + tag = this.readTag(); + constant = this.readConstant(tag); + _class.constant_pool[i] = constant; + this.console.writeConstant(i, tag, constant, 2); + if (tag === 5 || tag === 6) { + i++; + } else if (tag === 7) { + if (constant !== _class.this_class) _class.dependancies.push(constant); + } } return true; }; - JVM.prototype.InitializeSystem = function(initDone) { - var cls, system, - _this = this; - system = this.RDA.method_area['native/java/lang/System']; - cls = this.RDA.method_area['java/lang/System']; - this.assert(system !== null, "System not loaded before InitializeSystemClass"); - return this.JVM_ResolveClass('javascript/io/JavaScriptPrintStream', function(outputStream) { - var method, method_desc, method_id; - method_id = ''; - method_desc = '(Ljava/lang/String;)V'; - method = _this.JVM_ResolveMethod(outputStream, method_id, method_desc); - return _this.JVM_ResolveStringLiteral('terminal', function(str) { - return _this.JVM_NewObject(outputStream, method, [str], function(outputStreamObj) { - /* - # JavaScript outputStream needs to be wrapped by a printstream - @JVM_ResolveClass('java/io/PrintStream', (printStream) => - method_desc = '(Ljava/io/OutputStream;)V' - method = @JVM_ResolveMethod(printStream, method_id, method_desc) - @JVM_NewObject(printStream, method, [outputStreamObj], (printStreamObj) => - - # set the printStream to out in System - @JVM_ExecuteNativeMethod('native/java/lang/System', 'setOut0', [cls, printStreamObj]) - initDone() - ) - ) - */ - _this.JVM_ExecuteNativeMethod('native/java/lang/System', 'setOut0', [cls, outputStreamObj]); - return initDone(); - }); - }); - }); - }; - - /* - JVM::InitializeSystemClass = () -> - @assert( (system = @RDA.method_area['java/lang/System']) isnt null, - "System not loaded before InitializeSystemClass") - #@RDA.createThread('java/lang/System', @JVM_ResolveMethod(system, 'initializeSystemClass', '()V')) - - # create file input stream - fileDescriptorCls = @JVM_ResolveClass('java/io/FileDescriptor') - - method_id = '' - method_desc = '(Ljava/io/FileDescriptor;)V' - fileOutputStreamCls = @JVM_ResolveClass('java/io/FileOutputStream') - bufferedOutputStreamCls = @JVM_ResolveClass('java/io/BufferedOutputStream') - printStreamCls = @JVM_ResolveClass('java/io/PrintStream') - - - method = @JVM_ResolveMethod(fileOutputStreamCls, method_id, method_desc) - - fdIn = fileDescriptorCls.fields.in - - fileOutputStreamObj = @RDA.heap.allocate(@JVM_NewObject(fileOutputStreamCls, method, [fdIn])) - - method_id = '' - method_desc = '(Ljava/io/OutputStream;I)V' - method = @JVM_ResolveMethod(bufferedOutputStreamCls, method_id, method_desc) - # create buffered output stream obj - bufferedOutputStreamObj = @RDA.heap.allocate(@JVM_NewObject(bufferedOutputStreamCls, method, [fileOutputStreamObj, new CONSTANT_integer(128)] )) - # create printstream - method_id = '' - method_desc = '(Ljava/io/OutputStream;Z)V' - method = @JVM_ResolveMethod(printStreamCls, method_id, method_desc) - printStreamObj = @RDA.heap.allocate(@JVM_NewObject(printStreamCls, method, [bufferedOutputStreamObj, new CONSTANT_boolean(1)])) - # call setOut0 - */ - - - JVM.prototype.JVM_IHashCode = function() { - return 1; - }; - - JVM.prototype.JVM_MonitorWait = function() { - var object; - object = this.locals[0]; - throw 'NotYetImplementedException'; - }; - - true; - - - JVM.prototype.JVM_MonitorNotify = function() { - throw 'NotYetImplementedException'; + ClassReader.prototype.parseFileVars = function(_class) { + this.console.debug('access flags: ' + (_class.access_flags = this.read(2)), 2); + this.console.debug('this class: ' + (_class.this_class = this.read(2)), 2); + _class.super_class = this.read(2); + this.console.debug('super class: ' + _class.super_class, 2); + _class.real_name = _class.constant_pool[_class.constant_pool[_class.this_class]]; + return true; }; - JVM.prototype.JVM_MonitorNotifyAll = function() { - throw 'NotYetImplementedException'; + ClassReader.prototype.parseInterfaces = function(_class) { + var i; + this.console.debug('interface count: ' + (_class.interfaces_count = this.read(2)), 2); + i = -1; + while (++i < _class.interfaces_count) { + this.console.debug(_class.interfaces[i] = this.read(2), 2); + } + return true; }; - JVM.prototype.JVM_Clone = function() { - throw 'NotYetImplementedException'; + ClassReader.prototype.parseFields = function(_class) { + var field, i; + this.console.debug('fields count: ' + (_class.fields_count = this.read(2)), 2); + i = -1; + while (++i < _class.fields_count) { + field = this.readFieldInfo(_class); + _class.fields[field[1].real_name] = field[0]; + } + return true; }; - JVM.prototype.JVM_InternString = function(env, jstring) { - throw 'NotYetImplementedException'; + ClassReader.prototype.parseMethods = function(_class) { + var i, method; + this.console.debug('method count: ' + (_class.method_count = this.read(2)), 2); + i = -1; + while (++i < _class.method_count) { + method = this.readMethodInfo(_class); + _class.methods[i] = method; + } + return true; }; - JVM.prototype.JVM_CurrentTimeMillis = function(env, ignoredJClass) { - return new CONSTANT_long(new Date().getTime()); + ClassReader.prototype.parseAttributes = function(_class) { + return _class.attributes_count(this.read(2)); }; - JVM.prototype.JVM_NanoTime = function(env, ignoredJClass) { - throw 'NotYetImplementedException'; + ClassReader.prototype.readMethodInfo = function(_class) { + var attr, i, method_info; + method_info = {}; + this.console.debug(' access flags: ' + (method_info.access_flags = this.read(2)), 2); + this.console.debug(' name index: ' + (method_info.name_index = this.read(2)), 2); + method_info.name = _class.constant_pool[method_info.name_index]; + this.console.debug(' descriptor index: ' + (method_info.descriptor_index = this.read(2)), 2); + this.console.debug(' atrribute count: ' + (method_info.attribute_count = this.read(2)), 2); + method_info.attributes = new Array(method_info.attribute_count); + i = 0; + while (i++ < method_info.attribute_count) { + attr = this.readAttribute(_class); + method_info.attributes[attr.real_name] = attr; + } + return method_info; }; - JVM.prototype.JVM_ArrayCopy = function(env, srcObj, srcPos, dstObj, destPos, length) { - var arr, ch, dest, index, src; - src = env.JVM_FromHeap(srcObj); - arr = src.slice(srcPos.val, srcPos.val + length.val); - dest = env.JVM_FromHeap(dstObj); - destPos = destPos.val; - for (index in arr) { - ch = arr[index]; - dest[new Number(index) + destPos] = ch; + ClassReader.prototype.readAttribute = function(_class) { + var attribute_length, attribute_name, real_name; + attribute_name = this.read(2); + attribute_length = this.read(4); + real_name = _class.constant_pool[attribute_name]; + this.console.debug(' attribute name: ' + real_name, 2); + this.console.debug(' attribute length: ' + attribute_length, 2); + if (real_name === 'Code') { + return this.readCodeAttribute(_class, attribute_name, attribute_length); + } else { + this.read(attribute_length); + return {}; } - return true; }; - JVM.prototype.JVM_InitProperties = function(env, jobject) { - throw 'NotYetImplementedException'; + ClassReader.prototype.readCodeAttribute = function(_class, name_index, length) { + var code_attribute, code_length, i; + code_attribute = {}; + code_attribute.attribute_name_index = name_index; + code_attribute.real_name = _class.constant_pool[name_index]; + code_attribute.attribute_length = length; + code_attribute.max_stack = this.read(2); + code_attribute.max_locals = this.read(2); + code_attribute.code_length = this.read(4); + code_attribute.code = {}; + code_length = code_attribute.code_length; + i = -1; + while (++i < code_length) { + this.console.debug(' ' + (code_attribute.code[i] = this.read(1)), 2); + } + code_attribute.exception_table_length = this.read(2); + this.read(code_attribute.exception_table_length * 8); + code_attribute.attributes_count = this.read(2); + code_attribute.attributes = new Array(code_attribute.attributes_count); + i = -1; + while (++i < code_attribute.attributes_count) { + code_attribute.attributes[i] = this.readAttribute(_class); + } + return code_attribute; }; - JVM.prototype.JVM_OnExit = function(func) { - throw 'NotYetImplementedException'; + ClassReader.prototype.readFieldInfo = function(_class) { + var c, descriptor, field_info, i; + field_info = {}; + this.console.debug(' access flags: ' + (field_info.access_flags = this.read(2)), 2); + this.console.debug(' name index: ' + (field_info.name_index = this.read(2)), 2); + this.console.debug(' descriptor index: ' + (field_info.descriptor_index = this.read(2)), 2); + this.console.debug(' atrribute count: ' + (field_info.attribute_count = this.read(2)), 2); + field_info.attributes = new Array(field_info.attribute_count); + field_info.real_name = _class.constant_pool[field_info.name_index]; + i = 0; + while (i++ < field_info.attribute_count) { + field_info.attributes[i] = this.readAttribute(_class); + } + descriptor = _class.constant_pool[field_info.descriptor_index]; + if (descriptor === 'I') c = new CONSTANT_integer(); + if (descriptor === 'J') c = new CONSTANT_long(); + if (descriptor === 'F') c = new CONSTANT_float(); + if (descriptor === 'D') c = new CONSTANT_double(); + if (descriptor === 'S') c = new CONSTANT_short(); + if (descriptor === 'Z') c = new CONSTANT_boolean(); + if (descriptor === 'C') c = new CONSTANT_char(); + if (descriptor === 'B') c = new CONSTANT_byte(); + if (descriptor.charAt(0) === 'L') c = new JVM_Reference(0); + if (descriptor.charAt(0) === '[') c = new JVM_Reference(0); + return [c, field_info]; }; - JVM.prototype.GetStaticFieldID = function(cls, fieldname, returnType) { - return fieldname; - }; + return ClassReader; - JVM.prototype.SetStaticObjectField = function(cls, fieldname, stream) { - return cls.fields[fieldname] = stream; - }; + })(); - JVM.prototype.GetObjectField = function(objectReference, fieldname) { - var field, obj; - obj = this.JVM_FromHeap(objectReference); - field = obj[fieldname]; - return field; - }; + /* + Represents a Java Class file. Also provides Class verification methods. + @returns {JavaClass} + */ - JVM.prototype.JVM_GetObjectClass = function(objectReference, callback) { - var obj, - _this = this; - if (!callback) throw 'NoFixError'; - obj = this.JVM_FromHeap(objectReference); - if (this.JVM_FromHeap(obj.clsObject) === null) { - return this.JVM_ResolveClass('java/lang/Class', function(cls) { - var constructor; - constructor = _this.JVM_ResolveMethod(cls, '', '()V'); - obj.clsObject = _this.JVM_NewObject(cls, constructor, []); - return callback(_this.RDA.heap.allocate(obj.clsObject)); - }); - } - }; - JVM.prototype.JVM_Exit = function(code) { - throw 'NotYetImplementedException'; - }; + this.CONSTANT_Class = (function(_super) { - JVM.prototype.JVM_Halt = function(code) { - throw 'NotYetImplementedException'; - }; + __extends(CONSTANT_Class, _super); - JVM.prototype.JVM_GC = function() { - throw 'NotYetImplementedException'; - }; + CONSTANT_Class.name = 'CONSTANT_Class'; - /* - Returns the number of realtime milliseconds that have elapsed since the - least-recently-inspected heap object was last inspected by the garbage - collector. - - For simple stop-the-world collectors this value is just the time - since the most recent collection. For generational collectors it is the - time since the oldest generation was most recently collected. Other - collectors are free to return a pessimistic estimate of the elapsed time, or - simply the time since the last full collection was performed. - - Note that in the presence of reference objects, a given object that is no - longer strongly reachable may have to be inspected multiple times before it - can be reclaimed. - */ - - - JVM.prototype.JVM_MaxObjectInspectionAge = function() { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_TraceInstructions = function(bool) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_TraceMethodCalls = function(bool) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_TotalMemory = function() { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_FreeMemory = function() { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_MaxMemory = function() { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_ActiveProcessorCount = function() { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_LoadLibrary = function(name) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_UnloadLibrary = function(handle) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_FindLibraryEntry = function(handle, name) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_IsSupportedJNIVersion = function(version) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_IsNaN = function(double) { - return isNaN(double); - }; - - JVM.prototype.JVM_FillInStackTrace = function(env, throwable) { - return console.log('filling in stacktrace!'); - }; - - JVM.prototype.JVM_PrintStackTrace = function(env, throwable, printable) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetStackTraceDepth = function(env, throwable) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetStackTraceElement = function(env, throwable, index) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_StartThread = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_StopThread = function(env, thread, exception) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_IsThreadAlive = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_SuspendThread = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_ResumeThread = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_SetThreadPriority = function(env, thread, prio) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_Yield = function(env, threadClass) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_Sleep = function(env, threadClass, millis) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_CurrentThread = function(env, threadClass) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_CountStackFrames = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_Interrupt = function(env, thread) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_IsInterrupted = function(env, thread, clearInterrupted) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_HoldsLock = function(env, threadClass, obj) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_DumpAllStacks = function(env, unused) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetAllThreads = function(env, dummy) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_DumpThreads = function(env, threadClass, threads) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_CurrentLoadedClass = function(env) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_CurrentClassLoader = function(env) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetClassContext = function(env) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_ClassDepth = function(env, name) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_ClassLoaderDepth = function(env) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetSystemPackage = function(env, name) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_GetSystemPackages = function(env) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_AllocateNewObject = function(env, obj, currClass, initClass) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_AllocateNewArray = function(env, obj, currClass, length) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_LatestUserDefinedLoader = function(env) {}; + function CONSTANT_Class() { + this.magic_number = 0; + this.minor_version = 0; + this.major_version = 0; + this.constant_pool_count = 0; + this.constant_pool = []; + this.access_flags = 0; + this.this_class = 0; + this.super_class = 0; + this.interfaces_count = 0; + this.interfaces = []; + this.fields_count = 0; + this.fields = {}; + this.methods_count = 0; + this.methods = {}; + this.attributes_count = 0; + this.attributes = []; + this.dependancies = []; + this.real_name = 'None'; + } - JVM.prototype.JVM_GetArrayLength = function(env, arr) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.get_super = function() { + var cls; + cls = this.constant_pool[this.super_class]; + while (typeof cls === 'number') { + cls = this.constant_pool[cls]; + } + return cls; }; - JVM.prototype.JVM_GetArrayElement = function(env, arr, index) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.get_name = function() { + var super_ref; + super_ref = this.constant_pool[this.this_class]; + return this.constant_pool[super_ref]; }; - JVM.prototype.JVM_GetPrimitiveArrayElement = function(env, arr, index, wCode) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.set_method_count = function(count) { + this.methods_count = parseInt(count, 16); + this.methods = new Array(parseInt(count, 16)); + return count; }; - JVM.prototype.JVM_SetArrayElement = function(env, arr, index, val) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.set_constant_pool_count = function(count) { + this.constant_pool_count = parseInt(count, 16); + this.constant_pool = new Array(parseInt(count, 16)); + return count; }; - JVM.prototype.JVM_SetPrimitiveArrayElement = function(env, arr, index, v, vCode) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.set_interfaces_count = function(count) { + this.interfaces_count = parseInt(count, 16); + this.interfaces = new Array(parseInt(count, 16)); + return count; }; - JVM.prototype.JVM_NewArray = function(env, eltClass, length) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.set_fields_count = function(count) { + this.fields_count = parseInt(count, 16); + this.fields = new Array(parseInt(count, 16)); + return count; }; - JVM.prototype.JVM_NewMultiArray = function(env, eltClass, dim) { - throw 'NotYetImplementedException'; + CONSTANT_Class.prototype.set_attributes_count = function(count) { + this.attributes_count = parseInt(count, 16); + this.attributes = new Array(parseInt(count, 16)); + return count; }; - /* - java.lang.Class and java.lang.ClassLoader - - Returns the class in which the code invoking the native method - belongs. - - Note that in JDK 1.1, native methods did not create a frame. - In 1.2, they do. Therefore native methods like Class.forName - can no longer look at the current frame for the caller class. - */ + return CONSTANT_Class; + })(JVM_Object); - JVM.prototype.JVM_GetCallerClass = function(env, n) { - throw 'NotYetImplementedException'; - }; - - /* - Find primitive classes - utf: class name - */ + /* + ` + compatibility = { + ArrayBuffer: typeof ArrayBuffer !== 'undefined', + DataView: typeof DataView !== 'undefined' && 'getFloat64' in DataView.prototype + } + + jDataView = function (buffer, byteOffset, byteLength, littleEndian) { + this._buffer = buffer; + + // Handle Type Errors + if (!(compatibility.ArrayBuffer && buffer instanceof ArrayBuffer) && + !(typeof buffer === 'string')) { + throw new TypeError("Type error"); + } + + // Check parameters and existing functionnalities + this._isArrayBuffer = compatibility.ArrayBuffer && buffer instanceof ArrayBuffer; + this._isDataView = compatibility.DataView && this._isArrayBuffer; + + // Default Values + this._littleEndian = littleEndian === undefined ? true : littleEndian; + + var bufferLength = this._isArrayBuffer ? buffer.byteLength : buffer.length; + if (byteOffset == undefined) { + byteOffset = 0; + } + + if (byteLength == undefined) { + byteLength = bufferLength - byteOffset; + } + + if (!this._isDataView) { + // Do additional checks to simulate DataView + if (typeof byteOffset !== 'number') { + throw new TypeError("Type error"); + } + if (typeof byteLength !== 'number') { + throw new TypeError("Type error"); + } + if (typeof byteOffset < 0) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + if (typeof byteLength < 0) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + } + + // Instanciate + if (this._isDataView) { + this._view = new DataView(buffer, byteOffset, byteLength); + this._start = 0; + } + this._start = byteOffset; + if (byteOffset >= bufferLength) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + + this._offset = 0; + this.length = byteLength; + }; + + jDataView.createBuffer = function () { + if (typeof ArrayBuffer !== 'undefined') { + var buffer = new ArrayBuffer(arguments.length); + var view = new Int8Array(buffer); + for (var i = 0; i < arguments.length; ++i) { + view[i] = arguments[i]; + } + return buffer; + } + + return String.fromCharCode.apply(null, arguments); + }; + + jDataView.prototype = { + + // Helpers + + getString: function (length, byteOffset) { + var value; + + // Handle the lack of byteOffset + if (byteOffset === undefined) { + byteOffset = this._offset; + } + + // Error Checking + if (typeof byteOffset !== 'number') { + throw new TypeError("Type error"); + } + if (length < 0 || byteOffset + length > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + + if (this._isArrayBuffer) { + // Use Int8Array and String.fromCharCode to extract a string + var int8array = new Int8Array(this._buffer, this._start + byteOffset, length); + var stringarray = []; + for (var i = 0; i < length; ++i) { + stringarray[i] = int8array[i]; + } + value = String.fromCharCode.apply(null, stringarray); + } else { + value = this._buffer.substr(this._start + byteOffset, length); + } + + this._offset = byteOffset + length; + return value; + }, + + getChar: function (byteOffset) { + var value, size = 1; + + // Handle the lack of byteOffset + if (byteOffset === undefined) { + byteOffset = this._offset; + } + + if (this._isArrayBuffer) { + // Use Int8Array and String.fromCharCode to extract a string + value = String.fromCharCode(this.getUint8(byteOffset)); + } else { + // Error Checking + if (typeof byteOffset !== 'number') { + throw new TypeError("Type error"); + } + if (byteOffset + size > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + + value = this._buffer.charAt(this._start + byteOffset); + this._offset = byteOffset + size; + } + + return value; + }, + + tell: function () { + return this._offset; + }, + + seek: function (byteOffset) { + if (typeof byteOffset !== 'number') { + throw new TypeError("Type error"); + } + if (byteOffset < 0 || byteOffset > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + + this._offset = byteOffset; + }, + + // Compatibility functions on a String Buffer + + _endianness: function (offset, pos, max, littleEndian) { + return offset + (littleEndian ? max - pos - 1 : pos); + }, + + _getFloat64: function (offset, littleEndian) { + var b0 = this._getUint8(this._endianness(offset, 0, 8, littleEndian)), + b1 = this._getUint8(this._endianness(offset, 1, 8, littleEndian)), + b2 = this._getUint8(this._endianness(offset, 2, 8, littleEndian)), + b3 = this._getUint8(this._endianness(offset, 3, 8, littleEndian)), + b4 = this._getUint8(this._endianness(offset, 4, 8, littleEndian)), + b5 = this._getUint8(this._endianness(offset, 5, 8, littleEndian)), + b6 = this._getUint8(this._endianness(offset, 6, 8, littleEndian)), + b7 = this._getUint8(this._endianness(offset, 7, 8, littleEndian)), + + sign = 1 - (2 * (b0 >> 7)), + exponent = ((((b0 << 1) & 0xff) << 3) | (b1 >> 4)) - (Math.pow(2, 10) - 1), + + // Binary operators such as | and << operate on 32 bit values, using + and Math.pow(2) instead + mantissa = ((b1 & 0x0f) * Math.pow(2, 48)) + (b2 * Math.pow(2, 40)) + (b3 * Math.pow(2, 32)) + + (b4 * Math.pow(2, 24)) + (b5 * Math.pow(2, 16)) + (b6 * Math.pow(2, 8)) + b7; + + if (mantissa == 0 && exponent == -(Math.pow(2, 10) - 1)) { + return 0.0; + } + + if (exponent == -1023) { // Denormalized + return sign * mantissa * Math.pow(2, -1022 - 52); + } + + return sign * (1 + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); + }, + + _getFloat32: function (offset, littleEndian) { + var b0 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)), + b1 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)), + b2 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)), + b3 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)), + + sign = 1 - (2 * (b0 >> 7)), + exponent = (((b0 << 1) & 0xff) | (b1 >> 7)) - 127, + mantissa = ((b1 & 0x7f) << 16) | (b2 << 8) | b3; + + if (mantissa == 0 && exponent == -127) { + return 0.0; + } + + if (exponent == -127) { // Denormalized + return sign * mantissa * Math.pow(2, -126 - 23); + } + + return sign * (1 + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); + }, + + _getInt32: function (offset, littleEndian) { + var b = this._getUint32(offset, littleEndian); + return b > Math.pow(2, 31) - 1 ? b - Math.pow(2, 32) : b; + }, + + _getUint32: function (offset, littleEndian) { + var b3 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)), + b2 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)), + b1 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)), + b0 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); + + return (b3 * Math.pow(2, 24)) + (b2 << 16) + (b1 << 8) + b0; + }, + + _getInt16: function (offset, littleEndian) { + var b = this._getUint16(offset, littleEndian); + return b > Math.pow(2, 15) - 1 ? b - Math.pow(2, 16) : b; + }, + + _getUint16: function (offset, littleEndian) { + var b1 = this._getUint8(this._endianness(offset, 0, 2, littleEndian)), + b0 = this._getUint8(this._endianness(offset, 1, 2, littleEndian)); + + return (b1 << 8) + b0; + }, + + _getInt8: function (offset) { + var b = this._getUint8(offset); + return b > Math.pow(2, 7) - 1 ? b - Math.pow(2, 8) : b; + }, + + _getUint8: function (offset) { + if (this._isArrayBuffer) { + return new Uint8Array(this._buffer, this._start + offset, 1)[0]; + } else { + return this._buffer.charCodeAt(this._start + offset) & 0xff; + } + } + }; + + // Create wrappers + + var dataTypes = { + 'Int8': 1, + 'Int16': 2, + 'Int32': 4, + 'Uint8': 1, + 'Uint16': 2, + 'Uint32': 4, + 'Float32': 4, + 'Float64': 8 + }; + + for (var type in dataTypes) { + // Bind the variable type + (function (type) { + var size = dataTypes[type]; + + // Create the function + jDataView.prototype['get' + type] = + function (byteOffset, littleEndian) { + var value; + + // Handle the lack of endianness + if (littleEndian == undefined) { + littleEndian = this._littleEndian; + } + + // Handle the lack of byteOffset + if (byteOffset === undefined) { + byteOffset = this._offset; + } + + // Dispatch on the good method + if (this._isDataView) { + // DataView: we use the direct method + value = this._view['get' + type](byteOffset, littleEndian); + } + // ArrayBuffer: we use a typed array of size 1 if the alignment is good + // ArrayBuffer does not support endianess flag (for size > 1) + else if (this._isArrayBuffer && byteOffset % size == 0 && (size == 1 || littleEndian)) { + value = new self[type + 'Array'](this._buffer, byteOffset, 1)[0]; + } + else { + // Error Checking + if (typeof byteOffset !== 'number') { + throw new TypeError("Type error"); + } + if (byteOffset + size > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + value = this['_get' + type](this._start + byteOffset, littleEndian); + } + + // Move the internal offset forward + this._offset = byteOffset + size; + + return value; + }; + })(type); + }` + */ - JVM.prototype.JVM_FindPrimitiveClass = function(env, utf) { - throw 'NotYetImplementedException'; - }; + compatibility = { + ArrayBuffer: typeof ArrayBuffer !== "undefined", + DataView: typeof DataView !== "undefined" && "getFloat64" in DataView.prototype + }; - JVM.prototype.JVM_ResolveClass = function(clsname, thread, resolved) { - var cls; - if (!resolved) resolved = thread; - if (thread) this.RDA.waiting[clsname] = thread; - if (clsname instanceof CONSTANT_Class || (clsname.magic_number != null)) { - this.RDA.notifyAll(clsname.real_name, clsname); + jDataView = function(buffer, byteOffset, byteLength, littleEndian) { + var bufferLength; + this._buffer = buffer; + if (!(compatibility.ArrayBuffer && buffer instanceof ArrayBuffer) && (typeof buffer !== "string")) { + throw new TypeError("Type error"); + } + this._isArrayBuffer = compatibility.ArrayBuffer && buffer instanceof ArrayBuffer; + this._isDataView = compatibility.DataView && this._isArrayBuffer; + this._littleEndian = (littleEndian === undefined ? true : littleEndian); + bufferLength = (this._isArrayBuffer ? buffer.byteLength : buffer.length); + if (byteOffset === undefined) byteOffset = 0; + if (byteLength === undefined) byteLength = bufferLength - byteOffset; + if (!this._isDataView) { + if (typeof byteOffset !== "number") throw new TypeError("Type error"); + if (typeof byteLength !== "number") throw new TypeError("Type error"); + if (typeof byteOffset < 0) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); } - if (this.RDA.method_area[clsname] === void 0) { - console.log('Resolve Class ' + clsname); - return this.load(clsname, true, resolved); - } else { - cls = this.RDA.method_area[clsname]; - return resolved(cls); + if (typeof byteLength < 0) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); } - }; - - JVM.prototype.JVM_ResolveNativeClass = function(nativeName, thread) { - if (thread) this.RDA.waiting[nativeName] = thread; - if (this.RDA.method_area[nativeName] === void 0) this.loadNative(nativeName); - return true; - }; + } + if (this._isDataView) { + this._view = new DataView(buffer, byteOffset, byteLength); + this._start = 0; + } + this._start = byteOffset; + if (byteOffset >= bufferLength) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + this._offset = 0; + return this.length = byteLength; + }; - JVM.prototype.JVM_ExecuteNativeMethod = function(classname, methodname, args) { - var nativeCls, nmethod, returnval; - nativeCls = this.RDA.method_area[classname]; - nmethod = nativeCls[methodname]; - if (args) { - args.unshift(this); - } else { - args = new Array(); - args.push(this); + jDataView.createBuffer = function() { + var buffer, i, view; + if (typeof ArrayBuffer !== "undefined") { + buffer = new ArrayBuffer(arguments.length); + view = new Int8Array(buffer); + i = 0; + while (i < arguments.length) { + view[i] = arguments[i]; + ++i; } - returnval = nmethod.apply(nativeCls, args); - return returnval; - }; + return buffer; + } + return String.fromCharCode.apply(null, arguments); + }; - JVM.prototype.JVM_ResolveStringLiteral = function(literal, callback) { - var enc, - _this = this; - enc = 'sun.jnu.encoding'; - return this.JVM_ResolveClass('java/lang/String', function(cls) { - var charArray, index, method, method_desc, method_id; - method_id = ''; - method_desc = '()V'; - method = _this.JVM_ResolveMethod(cls, method_id, method_desc); - if (!_this.JVM_InternedStrings[literal]) { - console.log('Interning a string ("' + literal + '")'); - charArray = new Array(); - for (index in literal) { - charArray[index] = literal[index]; - } - return _this.JVM_NewObject(cls, method, [], function(stringobj) { - _this.JVM_FromHeap(stringobj).count = new CONSTANT_integer(literal.length); - _this.RDA.heap.update(_this.JVM_FromHeap(stringobj).value, charArray); - _this.JVM_FromHeap(stringobj).colour = 3; - console.log('Done interning'); - _this.JVM_InternedStrings[literal] = stringobj; - return callback(stringobj); - }); - } else { - return callback(_this.JVM_InternedStrings[literal]); + jDataView.prototype = { + getString: function(length, byteOffset) { + var i, int8array, stringarray, value; + value = void 0; + if (byteOffset === undefined) byteOffset = this._offset; + if (typeof byteOffset !== "number") throw new TypeError("Type error"); + if (length < 0 || byteOffset + length > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + if (this._isArrayBuffer) { + int8array = new Int8Array(this._buffer, this._start + byteOffset, length); + stringarray = []; + i = 0; + while (i < length) { + stringarray[i] = int8array[i]; + ++i; } - }); - }; - - JVM.prototype.JVM_StringLiteralToBytes = function(literal) { - var ch, i, re, st; - i = 0; - re = []; - while (i++ < literal.length) { - ch = literal.charCodeAt(i); - st = []; - while (true) { - st.push(ch & 0xFF); - ch = ch >> 8; - if (!ch) break; + value = String.fromCharCode.apply(null, stringarray); + } else { + value = this._buffer.substr(this._start + byteOffset, length); + } + this._offset = byteOffset + length; + return value; + }, + getChar: function(byteOffset) { + var size, value; + value = void 0; + size = 1; + if (byteOffset === undefined) byteOffset = this._offset; + if (this._isArrayBuffer) { + value = String.fromCharCode(this.getUint8(byteOffset)); + } else { + if (typeof byteOffset !== "number") throw new TypeError("Type error"); + if (byteOffset + size > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); } - re = re.concat(st.reverse()); + value = this._buffer.charAt(this._start + byteOffset); + this._offset = byteOffset + size; + } + return value; + }, + tell: function() { + return this._offset; + }, + seek: function(byteOffset) { + if (typeof byteOffset !== "number") throw new TypeError("Type error"); + if (byteOffset < 0 || byteOffset > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + return this._offset = byteOffset; + }, + _endianness: function(offset, pos, max, littleEndian) { + return offset + (littleEndian ? max - pos - 1 : pos); + }, + _getFloat64: function(offset, littleEndian) { + var b0, b1, b2, b3, b4, b5, b6, b7, exponent, mantissa, sign; + b0 = this._getUint8(this._endianness(offset, 0, 8, littleEndian)); + b1 = this._getUint8(this._endianness(offset, 1, 8, littleEndian)); + b2 = this._getUint8(this._endianness(offset, 2, 8, littleEndian)); + b3 = this._getUint8(this._endianness(offset, 3, 8, littleEndian)); + b4 = this._getUint8(this._endianness(offset, 4, 8, littleEndian)); + b5 = this._getUint8(this._endianness(offset, 5, 8, littleEndian)); + b6 = this._getUint8(this._endianness(offset, 6, 8, littleEndian)); + b7 = this._getUint8(this._endianness(offset, 7, 8, littleEndian)); + sign = 1 - (2 * (b0 >> 7)); + exponent = (((b0 << 1) & 0xff) << 3) | (b1 >> 4) - (Math.pow(2, 10) - 1); + mantissa = (b1 & 0x0f) * Math.pow(2, 48) + (b2 * Math.pow(2, 40)) + (b3 * Math.pow(2, 32)) + (b4 * Math.pow(2, 24)) + (b5 * Math.pow(2, 16)) + (b6 * Math.pow(2, 8)) + b7; + if (mantissa === 0 && exponent === -(Math.pow(2, 10) - 1)) return 0.0; + if (exponent === -1023) return sign * mantissa * Math.pow(2, -1022 - 52); + return sign * (1 + mantissa * Math.pow(2, -52)) * Math.pow(2, exponent); + }, + _getFloat32: function(offset, littleEndian) { + var b0, b1, b2, b3, exponent, mantissa, sign; + b0 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)); + b1 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)); + b2 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)); + b3 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); + sign = 1 - (2 * (b0 >> 7)); + exponent = ((b0 << 1) & 0xff) | (b1 >> 7) - 127; + mantissa = ((b1 & 0x7f) << 16) | (b2 << 8) | b3; + if (mantissa === 0 && exponent === -127) return 0.0; + if (exponent === -127) return sign * mantissa * Math.pow(2, -126 - 23); + return sign * (1 + mantissa * Math.pow(2, -23)) * Math.pow(2, exponent); + }, + _getInt32: function(offset, littleEndian) { + var b; + b = this._getUint32(offset, littleEndian); + if (b > Math.pow(2, 31) - 1) { + return b - Math.pow(2, 32); + } else { + return b; + } + }, + _getUint32: function(offset, littleEndian) { + var b0, b1, b2, b3; + b3 = this._getUint8(this._endianness(offset, 0, 4, littleEndian)); + b2 = this._getUint8(this._endianness(offset, 1, 4, littleEndian)); + b1 = this._getUint8(this._endianness(offset, 2, 4, littleEndian)); + b0 = this._getUint8(this._endianness(offset, 3, 4, littleEndian)); + return (b3 * Math.pow(2, 24)) + (b2 << 16) + (b1 << 8) + b0; + }, + _getInt16: function(offset, littleEndian) { + var b; + b = this._getUint16(offset, littleEndian); + if (b > Math.pow(2, 15) - 1) { + return b - Math.pow(2, 16); + } else { + return b; + } + }, + _getUint16: function(offset, littleEndian) { + var b0, b1; + b1 = this._getUint8(this._endianness(offset, 0, 2, littleEndian)); + b0 = this._getUint8(this._endianness(offset, 1, 2, littleEndian)); + return (b1 << 8) + b0; + }, + _getInt8: function(offset) { + var b; + b = this._getUint8(offset); + if (b > Math.pow(2, 7) - 1) { + return b - Math.pow(2, 8); + } else { + return b; } - return re; - }; - - JVM.prototype.JVM_InvokeMethod = function(object, method, args) { - var arg_num, cls, t; - cls = this.JVM_FromHeap(object).cls; - t = new Thread(cls, this.RDA, method); - t.current_frame.locals[0] = object; - arg_num = args.length; - while (arg_num > 0) { - t.current_frame.locals[arg_num] = args[arg_num - 1]; - arg_num--; + }, + _getUint8: function(offset) { + if (this._isArrayBuffer) { + return new Uint8Array(this._buffer, this._start + offset, 1)[0]; + } else { + return this._buffer.charCodeAt(this._start + offset) & 0xff; } - return t.start(); - }; + } + }; - JVM.prototype.JVM_NewObjectByReference = function(clsname, constructorname, descriptor, args, thread, callback) { - var _this = this; - if (!callback) throw 'NoFixException'; - return this.JVM_ResolveClass(clsname, thread, function(cls) { - var method; - method = _this.JVM_ResolveMethod(cls, constructorname, descriptor); - return callback(_this.JVM_NewObject(cls, method, args)); - }); - }; + dataTypes = { + Int8: 1, + Int16: 2, + Int32: 4, + Uint8: 1, + Uint16: 2, + Uint32: 4, + Float32: 4, + Float64: 8 + }; - JVM.prototype.JVM_NewObject = function(cls, constructor, args, objectCreated) { - var arg_num, locals, obj, objref; - if (!objectCreated) throw 'bugfix'; - obj = new JVM_Object(cls); - objref = this.RDA.heap.allocate(obj); - locals = new Array(); - locals[0] = objref; - arg_num = args.length; - while (arg_num > 0) { - locals[arg_num] = args[arg_num - 1]; - arg_num--; + _fn = function(type) { + var size; + size = dataTypes[type]; + return jDataView.prototype["get" + type] = function(byteOffset, littleEndian) { + var value; + value = void 0; + if (littleEndian === undefined) littleEndian = this._littleEndian; + if (byteOffset === undefined) byteOffset = this._offset; + if (this._isDataView) { + value = this._view["get" + type](byteOffset, littleEndian); + } else if (this._isArrayBuffer && byteOffset % size === 0 && (size === 1 || littleEndian)) { + value = new self[type + "Array"](this._buffer, byteOffset, 1)[0]; + } else { + if (typeof byteOffset !== "number") throw new TypeError("Type error"); + if (byteOffset + size > this.length) { + throw new Error("INDEX_SIZE_ERR: DOM Exception 1"); + } + value = this["_get" + type](this._start + byteOffset, littleEndian); } - return this.RDA.createThread(cls.real_name, constructor, locals, function() { - return objectCreated(objref); - }); + this._offset = byteOffset + size; + return value; }; + }; + for (type in dataTypes) { + _fn(type); + } - JVM.prototype.JVM_ResolveNativeMethod = function(cls, name, type) { - throw 'NotYetImplementedException'; - }; + /* + Runtime Data Area of the JVM. Stores all loaded Classes, + instantiated Objects and running or paused Threads. + */ - /* - JVM::JVM_ResolveField = (obj, name) -> - loop - if obj.fields[name] - return cls.fields[name] - obj = cls.get_super() - assert(cls, 'FieldResolutionException') - */ + this.RDA = (function() { - JVM.prototype.JVM_ResolveMethod = function(cls, name, type) { - var arg, args, descriptor, endarg, i, index, method, nargs; - if (cls === null) throw 'NullClassException'; - if (cls.methods[name + type] != null) return cls.methods[name + type]; - while (true) { - for (index in cls.methods) { - method = cls.methods[index]; - descriptor = cls.constant_pool[method.descriptor_index]; - if (method.name === name && descriptor === type) { - method.descriptor = descriptor; - args = descriptor.substring(descriptor.indexOf('(') + 1, descriptor.indexOf(')')); - method.args = new Array(); - nargs = 0; - i = 0; - while (i < args.length) { - if (args[i] === 'L') { - arg = args.substring(i, args.indexOf(';', i)); - i = args.indexOf(';', i); - method.args.push(arg); - } else if (args[i] === '[') { - endarg = args.substring(i).search('[B-Z]'); - method.args.push(args.substring(i, endarg + i + 1)); - i += endarg; - } else { - method.args.push(args[i]); - } - ++nargs; - ++i; - } - method.returntype = descriptor.substring(descriptor.indexOf(')') + 1); - method.nargs = nargs; - cls.methods[method.name + descriptor] = method; - method['belongsTo'] = cls; - return method; + RDA.name = 'RDA'; + + function RDA() { + var self; + this.waiting = new Array(); + this.method_area = {}; + this.heap = { + permgen: {}, + oldgen: {}, + younggen: {}, + id: 0, + 0: null + }; + this.heap.allocate = function(object) { + var ref; + if (object instanceof JVM_Reference) throw "Reference on heap?"; + ref = ++this.id; + object.colour = 0; + this.younggen[ref] = object; + return new JVM_Reference(ref); + }; + this.heap.get = function(ref) { + var error, object, pointer, _ref; + try { + pointer = ref.pointer; + if ((object = this.younggen[pointer]) || (object = this.oldgen[pointer]) || (object = this.permgen[pointer])) { + return object; + } else { + throw "Object not found"; } + } catch (e) { + error = (_ref = "Failed to retrieve Object from Heap" + e) != null ? _ref : ": " + { + e: "" + }; + throw error; } - if (name === '') return false; - cls = cls.get_super(); - this.assert(cls, 'MethodResolutionException'); - } - return false; - }; - - JVM.prototype.JVM_InvokeStaticMethod = function(clsname, method_name, descriptor, args, thread) { - var _this = this; - return this.JVM_ResolveClass(clsname, thread, function(cls) { - var arg_num, method, t; - method = _this.JVM_ResolveMethod(cls, method_name, descriptor); - t = new Thread(cls, _this.RDA, method); - arg_num = args.length - 1; - while (arg_num > -1) { - t.current_frame.locals[arg_num] = args[arg_num]; - arg_num--; + }; + this.heap.update = function(ref, newobject) { + var pointer; + pointer = ref.pointer; + if (this.younggen[pointer]) { + return this.younggen[pointer] = newobject; + } else if (this.oldgen[pointer]) { + return this.oldgen[pointer] = newobject; + } else if (this.permgen[pointer]) { + return this.permgen[pointer] = newobject; + } else { + throw "Object not found"; } - return t.start(); - }); - }; - - JVM.prototype.JVM_FindClassFromBootLoader = function(env, name) { - if ((typeof classname !== "undefined" && classname !== null) && classname.length > 0) { - this.classLoader.postMessage({ - 'action': 'find', - 'param': classname - }); - return this.classLoader.postMessage({ - 'action': 'start' - }); - } else { - return this.stdout.write(this.helpText()); - } - }; - - JVM.prototype.JVM_FindClassFromClassLoader = function(env, name, init, loader, throwError) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_FindClassFromClass = function(env, name, init, from) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_FindLoadedClass = function(env, loader, name) { - return this.RDA.method_area[name]; - }; - - JVM.prototype.JVM_DefineClass = function(env, name, loader, buf, len, pd) { - throw 'NotYetImplementedException'; - }; - - JVM.prototype.JVM_DefineClassWithSource = function(env, name, loader, buf, len, pd, source) { - throw 'NotYetImplementedException'; - }; - - /* - Reflection Support Functions - */ - + }; + this.threads = new Array(); + this.clinitThread = new Worker(Settings.workerpath + '/Thread.js'); + this.clinitThread['finished'] = true; + this.clinitThread.waiting = new Array(); + self = this; + this.clinitThread.loaded = 0; + this.clinitThread.onmessage = function(e) { + return self.message.call(self, e); + }; + this.clinitThread.onerror = function(e) { + return console.log(e); + }; + this.clinitThread.init = true; + this.clinitThread.callback = new Array(); + } - JVM.prototype.JVM_GetClassName = function(env, cls) { - cls = env.JVM_FromHeap(cls.object).cls; - return env.JVM_ResolveStringLiteral(cls.real_name); + RDA.prototype.addNative = function(name, raw_class) { + return this.method_area[name] = raw_class; }; - JVM.prototype.JVM_GetClassInterfaces = function(env, cls) { - throw 'NotYetImplementedException'; - }; + /* + Adds a Class loaded by the ClassLoader to the Method Area. + If the Class has a method, that will be executed here. + + If the Class is the entry point to the application, the main method will be + resolved and executed. + */ - JVM.prototype.JVM_GetClassLoader = function(env, cls) { - return new JVM_Reference(0); - }; - JVM.prototype.JVM_DesiredAssertionStatus = function(cls) { - return false; + RDA.prototype.addClass = function(classname, raw_class, instantiatedCallback, threadFinishedCallback) { + var cls, + _this = this; + cls = raw_class; + while ((cls = cls.get_super()) !== void 0) { + if (!this.method_area[cls.real_name]) { + this.method_area[cls.real_name] = cls; + } + } + this.method_area[classname] = raw_class; + return this.clinit(classname, raw_class, function() { + var method; + if (classname === _this.JVM.mainclassname) { + method = _this.JVM.JVM_ResolveMethod(raw_class, 'main', '([Ljava/lang/String;)V'); + _this.createThread(classname, method, null, threadFinishedCallback); + } + if (instantiatedCallback) return instantiatedCallback(); + }); }; - JVM.prototype.JVM_IsInterface = function(env, cls) { - throw 'NotYetImplementedException'; - }; + /* + Creates a new Thread instance to execute Java methods. Each Java Thread + is represented by a JavaScript worker + */ - JVM.prototype.JVM_GetClassSigners = function(env, cls) { - throw 'NotYetImplementedException'; - }; - JVM.prototype.JVM_SetClassSigners = function(env, cls, signers) { - throw 'NotYetImplementedException'; + RDA.prototype.createThread = function(mainClassName, method, locals, callback) { + var args, id, self, t; + id = this.threads.length - 1; + t = new Worker(Settings.workerpath + '/Thread.js'); + self = this; + t.onmessage = function(e) { + return self.message.call(self, e); + }; + t.onerror = function(e) { + return console.log(e); + }; + this.threads.push(t); + if (callback) t.callback = callback; + args = { + 'action': 'new', + 'resource': { + 'class': this.method_area[mainClassName], + 'id': id, + 'entryMethod': method, + 'locals': locals + } + }; + t.postMessage(args); + return true; }; - JVM.prototype.JVM_GetProtectionDomain = function(env, cls) { - throw 'NotYetImplementedException'; - }; + /* + If a Class contains a method, it is executed as the class + is loaded + */ - JVM.prototype.JVM_SetProtectionDomain = function(env, cls, protection_domain) { - throw 'NotYetImplementedException'; - }; - JVM.prototype.JVM_IsArrayClass = function(env, cls) { - throw 'NotYetImplementedException'; - }; + RDA.prototype.clinit = function(classname, raw_class, callback) { + var clsini, message; + clsini = this.JVM.JVM_ResolveMethod(raw_class, '', '()V'); + if (clsini) { + message = { + 'action': 'new', + 'resource': { + 'class': raw_class, + 'id': 0, + 'entryMethod': clsini + } + }; + this.createThread(classname, clsini, null, callback); + /*@clinitThread.callback.push(callback) + + if @clinitThread.finished or !@clinitThread.init + @clinitThread.finished = false + @clinitThread.postMessage(message) + else + @clinitThread.waiting.push(message) + */ - JVM.prototype.JVM_IsPrimitiveClass = function(env, cls) { - throw 'NotYetImplementedException'; + } else { + callback(); + } + return true; }; - JVM.prototype.JVM_GetComponentType = function(env, cls) { - throw 'NotYetImplementedException'; - }; + /* + Notify all threads waiting on a particular notifier object. + Threads will continue executing from where they were paused. + @see Thread.notify() + */ - JVM.prototype.JVM_GetClassModifiers = function(env, cls) { - throw 'NotYetImplementedException'; - }; - JVM.prototype.JVM_GetDeclaredClasses = function(env, ofClass) { - throw 'NotYetImplementedException'; + RDA.prototype.notifyAll = function(notifierName, data) { + return true; }; - JVM.prototype.JVM_GetDeclaringClass = function(env, ofClass) { - throw 'NotYetImplementedException'; - }; + /* + Thread interface methods. The following are messages received from + running Threads. These are detailed individually, but are usually requests + for resources such as Objects. + */ - JVM.prototype.JVM_FromHeap = function(reference) { - return this.RDA.heap.get(reference); - }; - JVM.prototype.JVM_DoPrivileged = function(cls, action, something, bool) { - return true; + RDA.prototype.message = function(e) { + var actions; + actions = { + 'resolveClass': function(data) { + var _this = this; + return this.JVM.JVM_ResolveClass(data.name, e.target, function(cls) { + return e.target.postMessage({ + 'action': 'resource', + 'resource': cls + }); + }); + }, + 'resolveNativeClass': function(data) { + if (this.JVM.JVM_ResolveNativeClass(data.name, e.target)) { + return e.target.postMessage({ + 'action': 'notify' + }); + } + }, + 'resolveMethod': function(data) { + var _this = this; + return this.JVM.JVM_ResolveClass(data.classname, e.target, function(cls) { + var method; + method = _this.JVM.JVM_ResolveMethod(cls, data.name, data.descriptor); + return e.target.postMessage({ + 'action': 'resource', + 'resource': method + }); + }); + }, + 'executeNativeMethod': function(data) { + var returnval; + returnval = this.JVM.JVM_ExecuteNativeMethod(data.classname, data.methodname, data.args); + return e.target.postMessage({ + 'action': 'resource', + 'resource': returnval + }); + }, + 'resolveField': function(data) {}, + 'resolveString': function(data) { + var worker; + worker = e.target; + return this.JVM.JVM_ResolveStringLiteral(data.string, function(stringref) { + return worker.postMessage({ + 'action': 'resource', + 'resource': stringref + }); + }); + }, + 'getObject': function(data) { + var object; + object = this.heap.get(data.reference); + return e.target.postMessage({ + 'action': 'resource', + 'resource': object + }); + }, + 'updateObject': function(data) { + this.heap.update(data.reference, data.object); + return e.target.postMessage({ + 'action': 'notify' + }); + }, + 'getStatic': function(data) { + var field; + field = this.method_area[data.classname].fields[data.fieldname]; + return e.target.postMessage({ + 'action': 'resource', + 'resource': field + }); + }, + 'setStatic': function(data) { + this.method_area[data.classname].fields[data.fieldname] = data.value; + return e.target.postMessage({ + 'action': 'notify' + }); + }, + 'setObjectField': function(data) { + var obj; + obj = this.heap.get(data.reference); + obj[data.fieldname] = data.value; + return e.target.postMessage({ + 'action': 'notify' + }); + }, + 'getObjectField': function(data) { + var obj, value; + obj = this.heap.get(data.reference); + value = obj[data.fieldname]; + return e.target.postMessage({ + 'action': 'resource', + 'resource': value + }); + }, + 'aquireLock': function(data) { + if (this.heap.get(data.reference).monitor.aquireLock(e.target)) { + return e.target.postMessage({ + 'action': 'notify' + }); + } + }, + 'releaseLock': function(data) { + return this.heap.get(data.reference).monitor.releaseLock(e.target); + }, + 'allocate': function(data) { + var ref; + ref = this.heap.allocate(data.object); + return e.target.postMessage({ + 'action': 'resource', + 'resource': ref + }); + }, + 'allocateNew': function(data) { + var classname, + _this = this; + classname = data.classname; + return this.JVM.JVM_ResolveClass(classname, e.target, function(cls) { + var obj, ref; + obj = new JVM_Object(cls); + ref = _this.heap.allocate(obj); + return e.target.postMessage({ + 'action': 'resource', + 'resource': ref + }); + }); + }, + 'GCreport': function(data) { + return this.GC.add(data.objectrefs); + }, + 'log': function(data) { + if (typeof data.message === 'object') { + return console.log(data.message); + } else { + return console.log('#' + data.id + ' ' + data.message); + } + }, + 'finished': function(data) { + var nextClinit, + _this = this; + console.log('Thread #' + data.id + ' finished'); + if (data.result !== 1) throw 'Thread died with error ' + data.error; + if (e.target === this.clinitThread) { + this.clinitThread.loaded++; + this.clinitThread.callback.pop().call(this); + nextClinit = this.clinitThread.waiting.pop(); + if (nextClinit) { + return this.clinitThread.postMessage(nextClinit); + } else { + this.clinitThread.finished = true; + if (this.clinitThread.init) { + this.clinitThread.init = false; + return this.JVM.InitializeSystem(function() { + return _this.JVM.load(_this.JVM.mainclassname); + }); + } + } + } else if (e.target.callback) { + return e.target.callback(); + } + } + }; + return actions[e.data.action].call(this, e.data); }; - return MethodFactory; + return RDA; })(); /* - A stack frame contains the state of one method invocation. When a method is - invoked a new frame is pushed onto the thread's stack. + # Factory to create the appropriate Method Frame from + # the method access flags. */ - this.Frame = (function() { - - Frame.name = 'Frame'; + this.MethodFactory = (function() { - function Frame(method, cls) { - this.cls = cls; - this.method_stack = method.attributes.Code.code; - this.op_stack = new Array(); - this.op_stack.peek = function() { - return this[this.length - 1]; - }; - this.op_stack.push = function(word) { - if (word === void 0) { - throw "NullStackException"; - } else if (word instanceof JVM_Object) { - throw "ObjectOnStackException"; - } - this[this.length] = word; - return true; - }; - this.constant_pool = this.cls.constant_pool; - this.resolveSelf(this.cls); - this.name = method.name; - this.locals = {}; - this.pc = 0; - this; + MethodFactory.name = 'MethodFactory'; + function MethodFactory(thread) { + this.thread = thread; } - /* - Execute the next opcode in the method_stack - If the opcode returns false then execution will pause - */ - - - /*execute : (opcodes) -> - op = @method_stack[@pc] - - if(!opcodes[op].do(@)) then return false - return yes - */ - - - Frame.prototype.execute = function(opcodes, t) { - var op, result; - op = this.method_stack[this.pc]; - t.log(this.cls.real_name + '-' + this.name + '\t\t' + op + '\t\t' + opcodes[op].description); - result = opcodes[op]["do"](this); - ++this.pc; - return result; - }; - - Frame.prototype.resolveSelf = function(cls) { - return this.constant_pool[cls.this_class] = cls; + MethodFactory.prototype.createFrame = function(method, cls) { + var frame; + if (method.access_flags & 0x0100) { + frame = new NativeFrame(method, cls, null, this.thread); + this.thread.current_frame = frame; + this.thread.native_stack.push(frame); + return frame; + } else { + frame = new Frame(method, cls); + this.thread.current_frame = frame; + this.thread.jvm_stack.push(frame); + return frame; + } }; - /* - resolveMethod : (cls, name) -> - cls_ref = @constant_pool[cls] - method_ref = @constant_pool[name] + /* + Additional JVM functions exported from the main VM. + Add support for native methods interacting with the VM. */ - return Frame; - - })(); - - /* - # Garbage Collector for the JVM, used by the RDA. - */ - - - this.GC = (function() { - - GC.name = 'GC'; - - GC.prototype.grey = 1; - - GC.prototype.white = 0; - - GC.prototype.black = 3; - - GC.prototype.running = false; - - GC.prototype.missed = 0; - /* - # Constructor. Starts collections at one second intervals. + JavaScript doesn't define an assert function so here's our own. */ - function GC(method_area, heap, threads) { - var _this = this; - this.method_area = method_area; - this.heap = heap; - this.threads = threads; - setInterval(function() { - return _this.collect(); - }, 1000); - } + JVM.prototype.assert = function(condition, message) { + if (!condition) throw "AssertException: " + message; + }; - GC.prototype.run = function() { - this.mark(); - this.reclaim(); - this.promote(); + JVM.prototype.RegisterNatives = function(env, jclass, methods) { + var JVM_MethodName, name; + for (name in methods) { + JVM_MethodName = methods[name].name; + jclass[name] = JVM.prototype[JVM_MethodName]; + } return true; }; - /* - # Colours references for collection. Tri-Colour algorithm. + JVM.prototype.InitializeSystem = function(initDone) { + var cls, system, + _this = this; + system = this.RDA.method_area['native/java/lang/System']; + cls = this.RDA.method_area['java/lang/System']; + this.assert(system !== null, "System not loaded before InitializeSystemClass"); + return this.JVM_ResolveClass('javascript/io/JavaScriptPrintStream', function(outputStream) { + var method, method_desc, method_id; + method_id = ''; + method_desc = '(Ljava/lang/String;)V'; + method = _this.JVM_ResolveMethod(outputStream, method_id, method_desc); + return _this.JVM_ResolveStringLiteral('terminal', function(str) { + return _this.JVM_NewObject(outputStream, method, [str], function(outputStreamObj) { + /* + # JavaScript outputStream needs to be wrapped by a printstream + @JVM_ResolveClass('java/io/PrintStream', (printStream) => + method_desc = '(Ljava/io/OutputStream;)V' + method = @JVM_ResolveMethod(printStream, method_id, method_desc) + @JVM_NewObject(printStream, method, [outputStreamObj], (printStreamObj) => + + # set the printStream to out in System + @JVM_ExecuteNativeMethod('native/java/lang/System', 'setOut0', [cls, printStreamObj]) + initDone() + ) + ) + */ + _this.JVM_ExecuteNativeMethod('native/java/lang/System', 'setOut0', [cls, outputStreamObj]); + return initDone(); + }); + }); + }); + }; + + /* + JVM::InitializeSystemClass = () -> + @assert( (system = @RDA.method_area['java/lang/System']) isnt null, + "System not loaded before InitializeSystemClass") + #@RDA.createThread('java/lang/System', @JVM_ResolveMethod(system, 'initializeSystemClass', '()V')) + + # create file input stream + fileDescriptorCls = @JVM_ResolveClass('java/io/FileDescriptor') + + method_id = '' + method_desc = '(Ljava/io/FileDescriptor;)V' + fileOutputStreamCls = @JVM_ResolveClass('java/io/FileOutputStream') + bufferedOutputStreamCls = @JVM_ResolveClass('java/io/BufferedOutputStream') + printStreamCls = @JVM_ResolveClass('java/io/PrintStream') + + + method = @JVM_ResolveMethod(fileOutputStreamCls, method_id, method_desc) + + fdIn = fileDescriptorCls.fields.in + + fileOutputStreamObj = @RDA.heap.allocate(@JVM_NewObject(fileOutputStreamCls, method, [fdIn])) + + method_id = '' + method_desc = '(Ljava/io/OutputStream;I)V' + method = @JVM_ResolveMethod(bufferedOutputStreamCls, method_id, method_desc) + # create buffered output stream obj + bufferedOutputStreamObj = @RDA.heap.allocate(@JVM_NewObject(bufferedOutputStreamCls, method, [fileOutputStreamObj, new CONSTANT_integer(128)] )) + # create printstream + method_id = '' + method_desc = '(Ljava/io/OutputStream;Z)V' + method = @JVM_ResolveMethod(printStreamCls, method_id, method_desc) + printStreamObj = @RDA.heap.allocate(@JVM_NewObject(printStreamCls, method, [bufferedOutputStreamObj, new CONSTANT_boolean(1)])) + # call setOut0 */ - GC.prototype.mark = function() { - var next, prop; - while ((next = this.getnextgrey()) !== null) { - for (prop in next) { - if (next[prop] instanceof JVM_Reference) { - if (next[prop].pointer !== 0) { - this.heap.younggen[next[prop].pointer].colour = this.grey; - } - } - } - next.colour = this.black; - } - return true; + JVM.prototype.JVM_IHashCode = function() { + return 1; + }; + + JVM.prototype.JVM_MonitorWait = function() { + var object; + object = this.locals[0]; + throw 'NotYetImplementedException'; }; - /* - # Reclaims heap space. - */ + true; - GC.prototype.reclaim = function() { - var index, item; - for (index in this.heap.younggen) { - item = this.heap.younggen[index]; - if (item.colour === this.white) delete this.heap.younggen[index]; - } - return true; + JVM.prototype.JVM_MonitorNotify = function() { + throw 'NotYetImplementedException'; }; - /* - # Promotes References to older generations. - */ + JVM.prototype.JVM_MonitorNotifyAll = function() { + throw 'NotYetImplementedException'; + }; + JVM.prototype.JVM_Clone = function() { + throw 'NotYetImplementedException'; + }; - GC.prototype.promote = function() { - return true; + JVM.prototype.JVM_InternString = function(env, jstring) { + throw 'NotYetImplementedException'; }; - /* - # Collects references from Classes and Threads. - */ + JVM.prototype.JVM_CurrentTimeMillis = function(env, ignoredJClass) { + return new CONSTANT_long(new Date().getTime()); + }; + JVM.prototype.JVM_NanoTime = function(env, ignoredJClass) { + throw 'NotYetImplementedException'; + }; - GC.prototype.collect = function() { - var cls, field, fields, message, ref, thread, _i, _len, _ref; - if (this.running) { - this.missed++; - if (this.missed > 3) throw "outofmemoryerror"; - return; - } - this.missed = 0; - for (cls in this.method_area) { - fields = this.method_area[cls].fields; - for (field in fields) { - ref = fields[field]; - if (ref.pointer && ref.pointer !== 0) { - try { - this.heap.younggen[ref.pointer].colour = this.grey; - } catch (e) { - console.log("Missing object bug"); - } - } - } - } - this.threadcount = this.threads.length; - this.responses = 0; - message = { - 'action': 'GCreport' - }; - _ref = this.threads; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - thread = _ref[_i]; - thread.postMessage(message); + JVM.prototype.JVM_ArrayCopy = function(env, srcObj, srcPos, dstObj, destPos, length) { + var arr, ch, dest, index, src; + src = env.JVM_FromHeap(srcObj); + arr = src.slice(srcPos.val, srcPos.val + length.val); + dest = env.JVM_FromHeap(dstObj); + destPos = destPos.val; + for (index in arr) { + ch = arr[index]; + dest[new Number(index) + destPos] = ch; } return true; }; - GC.prototype.add = function(rootobjects) { - var ref, _i, _len; - for (_i = 0, _len = rootobjects.length; _i < _len; _i++) { - ref = rootobjects[_i]; - this.heap.younggen[ref.pointer].colour = this.grey; - } - if (++this.responses === this.threadcount) this.run(); - return true; + JVM.prototype.JVM_InitProperties = function(env, jobject) { + throw 'NotYetImplementedException'; }; - GC.prototype.getnextgrey = function() { - var grey, len, nextref; - nextref = 1; - grey = null; - len = Object.keys(this.heap.younggen).length; - while (nextref < len) { - grey = this.heap.younggen[nextref++]; - if (grey === void 0) continue; - if (grey.colour === this.grey) return grey; + JVM.prototype.JVM_OnExit = function(func) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.GetStaticFieldID = function(cls, fieldname, returnType) { + return fieldname; + }; + + JVM.prototype.SetStaticObjectField = function(cls, fieldname, stream) { + return cls.fields[fieldname] = stream; + }; + + JVM.prototype.GetObjectField = function(objectReference, fieldname) { + var field, obj; + obj = this.JVM_FromHeap(objectReference); + field = obj[fieldname]; + return field; + }; + + JVM.prototype.JVM_GetObjectClass = function(objectReference, callback) { + var obj, + _this = this; + if (!callback) throw 'NoFixError'; + obj = this.JVM_FromHeap(objectReference); + if (this.JVM_FromHeap(obj.clsObject) === null) { + return this.JVM_ResolveClass('java/lang/Class', function(cls) { + var constructor; + constructor = _this.JVM_ResolveMethod(cls, '', '()V'); + obj.clsObject = _this.JVM_NewObject(cls, constructor, []); + return callback(_this.RDA.heap.allocate(obj.clsObject)); + }); } - return null; }; - return GC; + JVM.prototype.JVM_Exit = function(code) { + throw 'NotYetImplementedException'; + }; - })(); + JVM.prototype.JVM_Halt = function(code) { + throw 'NotYetImplementedException'; + }; - /* - # Handles the invocation of native methods in Threads. - */ + JVM.prototype.JVM_GC = function() { + throw 'NotYetImplementedException'; + }; + /* + Returns the number of realtime milliseconds that have elapsed since the + least-recently-inspected heap object was last inspected by the garbage + collector. + + For simple stop-the-world collectors this value is just the time + since the most recent collection. For generational collectors it is the + time since the oldest generation was most recently collected. Other + collectors are free to return a pessimistic estimate of the elapsed time, or + simply the time since the last full collection was performed. + + Note that in the presence of reference objects, a given object that is no + longer strongly reachable may have to be inspected multiple times before it + can be reclaimed. + */ - this.NativeFrame = (function() { - NativeFrame.name = 'NativeFrame'; + JVM.prototype.JVM_MaxObjectInspectionAge = function() { + throw 'NotYetImplementedException'; + }; - function NativeFrame(method, cls, env, thread) { - this.method = method; - this.cls = cls; - this.env = env; - this.thread = thread; - this.op_stack = new Array(); - this.resolved = true; - this.clsname = 'native/' + this.cls.real_name; - this.pc = 0; - this.returntype = this.method.returntype; - this.name = this.method.name; - this.locals = {}; - } + JVM.prototype.JVM_TraceInstructions = function(bool) { + throw 'NotYetImplementedException'; + }; - NativeFrame.prototype.execute = function(opcodes) { - this.thread.log(this.clsname + '-' + this.name); - this.thread.resolveNativeClass(this.clsname, function() { - var arg_num, args, i; - if (this.locals[0]) this.method['object'] = this.locals[0]; - args = new Array(); - arg_num = this.method.args.length; - if (this.method.access_flags & JVM_RECOGNIZED_METHOD_MODIFIERS.JVM_ACC_STATIC) { - i = 0; - while (i < arg_num) { - args.push(this.locals[i++]); - } - } else { - i = 1; - while (i < arg_num + 1) { - args.push(this.locals[i++]); - } - } - this.thread.executeNativeMethod(this.clsname, this.name, args, function(returnval) { - if (returnval != null) this.op_stack.push(returnval); - switch (this.returntype.charAt(0)) { - case 'B': - case 'C': - case 'I': - case 'Z': - case 'S': - return opcodes[172]["do"](this); - case 'D': - this.op_stack.push(returnval); - return opcodes[175]["do"](this); - case 'F': - return opcodes[174]["do"](this); - case 'J': - this.op_stack.push(returnval); - return opcodes[173]["do"](this); - case 'L': - case '[': - return opcodes[176]["do"](this); - default: - return opcodes[177]["do"](this); - } - }, this); - return false; - }, this); - return false; - /* - @thread.resolveNativeClass(@clsname, (nativeCls) -> - nativeCls['thread'] = @thread - - if @locals[0] - nativeCls['object'] = @locals[0] - nMethod = nativeCls[@method.name] - - args = new Array() - args.push(@env) - args.push(nativeCls) - - arg_num = @method.args.length - # store args in locals; arg1 = locals[0] etc - # static invocation - if @method.access_flags & JVM_RECOGNIZED_METHOD_MODIFIERS.JVM_ACC_STATIC - while arg_num > 0 - args.push(@locals[--arg_num]) - - else - while arg_num > 0 - args.push(@locals[arg_num--]) - # put objectref (this) in new method local 0 - args.push(@locals[0]) - - # Exectute the Native Method TODO, appropriate arguments - returnval = nMethod.apply(nativeCls, args) - - - - , @) - */ + JVM.prototype.JVM_TraceMethodCalls = function(bool) { + throw 'NotYetImplementedException'; + }; + JVM.prototype.JVM_TotalMemory = function() { + throw 'NotYetImplementedException'; }; - return NativeFrame; + JVM.prototype.JVM_FreeMemory = function() { + throw 'NotYetImplementedException'; + }; - })(); + JVM.prototype.JVM_MaxMemory = function() { + throw 'NotYetImplementedException'; + }; - this.InternalJNI = (function() { + JVM.prototype.JVM_ActiveProcessorCount = function() { + throw 'NotYetImplementedException'; + }; - InternalJNI.name = 'InternalJNI'; + JVM.prototype.JVM_LoadLibrary = function(name) { + throw 'NotYetImplementedException'; + }; - function InternalJNI(JVM) { - this.JVM = JVM; - } + JVM.prototype.JVM_UnloadLibrary = function(handle) { + throw 'NotYetImplementedException'; + }; - InternalJNI.prototype.RegisterNatives = function(jclass, methods) { - var method, name, _results; - _results = []; - for (name in methods) { - method = methods[name]; - _results.push(jclass.methods[name] = this.JVM[method]); - } - return _results; + JVM.prototype.JVM_FindLibraryEntry = function(handle, name) { + throw 'NotYetImplementedException'; }; - InternalJNI.prototype.GetObjectClass = function() {}; + JVM.prototype.JVM_IsSupportedJNIVersion = function(version) { + throw 'NotYetImplementedException'; + }; - return InternalJNI; + JVM.prototype.JVM_IsNaN = function(double) { + return isNaN(double); + }; - })(); + JVM.prototype.JVM_FillInStackTrace = function(env, throwable) { + return console.log('filling in stacktrace!'); + }; - this.JVM_Object = (function() { + JVM.prototype.JVM_PrintStackTrace = function(env, throwable, printable) { + throw 'NotYetImplementedException'; + }; - JVM_Object.name = 'JVM_Object'; + JVM.prototype.JVM_GetStackTraceDepth = function(env, throwable) { + throw 'NotYetImplementedException'; + }; - function JVM_Object(cls) { - var field, fld, supercls; - this.cls = cls; - supercls = this.cls.constant_pool[this.cls.super_class]; - if (supercls !== void 0) this.__proto__ = new JVM_Object(supercls); - this.clsObject = new JVM_Reference(0); - for (field in this.cls.fields) { - fld = this.cls.fields[field]; - this[field] = fld; - } - } + JVM.prototype.JVM_GetStackTraceElement = function(env, throwable, index) { + throw 'NotYetImplementedException'; + }; - JVM_Object.prototype.monitor = { - aquireLock: function(thread) { - if (this.owner === thread) { - this.count++; - } else if (this.owner !== null) { - this.waiting.push(thread); - return false; - } else { - this.owner = thread; - this.count++; - } - return true; - }, - releaseLock: function(thread) { - var _i, _len, _ref; - if (this.owner !== thread) return false; - if (--this.count === 0) this.owner = null; - _ref = this.waiting; - for (_i = 0, _len = _ref.length; _i < _len; _i++) { - thread = _ref[_i]; - this.notify(thread); - } - this.waiting.length = 0; - return true; - }, - notify: function(thread) { - return this.RDA.lockAquired(thread); - }, - owner: null, - count: 0, - waiting: new Array() + JVM.prototype.JVM_StartThread = function(env, thread) { + throw 'NotYetImplementedException'; }; - return JVM_Object; + JVM.prototype.JVM_StopThread = function(env, thread, exception) { + throw 'NotYetImplementedException'; + }; - })(); + JVM.prototype.JVM_IsThreadAlive = function(env, thread) { + throw 'NotYetImplementedException'; + }; - ({ - compareTo: function(jvmObject) { - if (this.cls.real_name === jvmObject.cls.real_name) { - return true; - } else { - try { - return compareTo.__super__.constructor.apply(this, arguments).compareTo(jvmObject); - } catch (err) { - return false; - } - } - } - }); + JVM.prototype.JVM_SuspendThread = function(env, thread) { + throw 'NotYetImplementedException'; + }; - this.JVM_Reference = (function() { + JVM.prototype.JVM_ResumeThread = function(env, thread) { + throw 'NotYetImplementedException'; + }; - JVM_Reference.name = 'JVM_Reference'; + JVM.prototype.JVM_SetThreadPriority = function(env, thread, prio) { + throw 'NotYetImplementedException'; + }; - function JVM_Reference(pointer) { - this.pointer = pointer; - } + JVM.prototype.JVM_Yield = function(env, threadClass) { + throw 'NotYetImplementedException'; + }; - JVM_Reference.prototype.toString = function() { - return this.pointer; + JVM.prototype.JVM_Sleep = function(env, threadClass, millis) { + throw 'NotYetImplementedException'; }; - return JVM_Reference; + JVM.prototype.JVM_CurrentThread = function(env, threadClass) { + throw 'NotYetImplementedException'; + }; - })(); + JVM.prototype.JVM_CountStackFrames = function(env, thread) { + throw 'NotYetImplementedException'; + }; - JVM_Number = (function() { + JVM.prototype.JVM_Interrupt = function(env, thread) { + throw 'NotYetImplementedException'; + }; - JVM_Number.name = 'JVM_Number'; + JVM.prototype.JVM_IsInterrupted = function(env, thread, clearInterrupted) { + throw 'NotYetImplementedException'; + }; - function JVM_Number(val) { - this.val = val; - } + JVM.prototype.JVM_HoldsLock = function(env, threadClass, obj) { + throw 'NotYetImplementedException'; + }; - JVM_Number.prototype.valueOf = function() { - return this.val; + JVM.prototype.JVM_DumpAllStacks = function(env, unused) { + throw 'NotYetImplementedException'; }; - return JVM_Number; + JVM.prototype.JVM_GetAllThreads = function(env, dummy) { + throw 'NotYetImplementedException'; + }; - })(); + JVM.prototype.JVM_DumpThreads = function(env, threadClass, threads) { + throw 'NotYetImplementedException'; + }; - this.CONSTANT_Array = (function(_super) { + JVM.prototype.JVM_CurrentLoadedClass = function(env) { + throw 'NotYetImplementedException'; + }; - __extends(CONSTANT_Array, _super); + JVM.prototype.JVM_CurrentClassLoader = function(env) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_GetClassContext = function(env) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_ClassDepth = function(env, name) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_ClassLoaderDepth = function(env) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_GetSystemPackage = function(env, name) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_GetSystemPackages = function(env) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_AllocateNewObject = function(env, obj, currClass, initClass) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_AllocateNewArray = function(env, obj, currClass, length) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_LatestUserDefinedLoader = function(env) {}; + + JVM.prototype.JVM_GetArrayLength = function(env, arr) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_GetArrayElement = function(env, arr, index) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_GetPrimitiveArrayElement = function(env, arr, index, wCode) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_SetArrayElement = function(env, arr, index, val) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_SetPrimitiveArrayElement = function(env, arr, index, v, vCode) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_NewArray = function(env, eltClass, length) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_NewMultiArray = function(env, eltClass, dim) { + throw 'NotYetImplementedException'; + }; + + /* + java.lang.Class and java.lang.ClassLoader + + Returns the class in which the code invoking the native method + belongs. + + Note that in JDK 1.1, native methods did not create a frame. + In 1.2, they do. Therefore native methods like Class.forName + can no longer look at the current frame for the caller class. + */ - CONSTANT_Array.name = 'CONSTANT_Array'; - function CONSTANT_Array(length, type) { - this.length = length; - this.type = type; - CONSTANT_Array.__super__.constructor.call(this, this.length); - } + JVM.prototype.JVM_GetCallerClass = function(env, n) { + throw 'NotYetImplementedException'; + }; - return CONSTANT_Array; + /* + Find primitive classes + utf: class name + */ - })(Array); - this.CONSTANT_Object = (function() { + JVM.prototype.JVM_FindPrimitiveClass = function(env, utf) { + throw 'NotYetImplementedException'; + }; - CONSTANT_Object.name = 'CONSTANT_Object'; + JVM.prototype.JVM_ResolveClass = function(clsname, thread, resolved) { + var cls; + if (!resolved) resolved = thread; + if (thread) this.RDA.waiting[clsname] = thread; + if (clsname instanceof CONSTANT_Class || (clsname.magic_number != null)) { + this.RDA.notifyAll(clsname.real_name, clsname); + } + if (this.RDA.method_area[clsname] === void 0) { + console.log('Resolve Class ' + clsname); + return this.load(clsname, true, resolved); + } else { + cls = this.RDA.method_area[clsname]; + return resolved(cls); + } + }; - function CONSTANT_Object(classname) { - this.classname = classname; - this.value = null; - } + JVM.prototype.JVM_ResolveNativeClass = function(nativeName, thread) { + if (thread) this.RDA.waiting[nativeName] = thread; + if (this.RDA.method_area[nativeName] === void 0) this.loadNative(nativeName); + return true; + }; - return CONSTANT_Object; + JVM.prototype.JVM_ExecuteNativeMethod = function(classname, methodname, args) { + var nativeCls, nmethod, returnval; + nativeCls = this.RDA.method_area[classname]; + nmethod = nativeCls[methodname]; + if (args) { + args.unshift(this); + } else { + args = new Array(); + args.push(this); + } + returnval = nmethod.apply(nativeCls, args); + return returnval; + }; - })(); + JVM.prototype.JVM_ResolveStringLiteral = function(literal, callback) { + var enc, + _this = this; + enc = 'sun.jnu.encoding'; + return this.JVM_ResolveClass('java/lang/String', function(cls) { + var charArray, index, method, method_desc, method_id; + method_id = ''; + method_desc = '()V'; + method = _this.JVM_ResolveMethod(cls, method_id, method_desc); + if (!_this.JVM_InternedStrings[literal]) { + console.log('Interning a string ("' + literal + '")'); + charArray = new Array(); + for (index in literal) { + charArray[index] = literal[index]; + } + return _this.JVM_NewObject(cls, method, [], function(stringobj) { + _this.JVM_FromHeap(stringobj).count = new CONSTANT_integer(literal.length); + _this.RDA.heap.update(_this.JVM_FromHeap(stringobj).value, charArray); + _this.JVM_FromHeap(stringobj).colour = 3; + console.log('Done interning'); + _this.JVM_InternedStrings[literal] = stringobj; + return callback(stringobj); + }); + } else { + return callback(_this.JVM_InternedStrings[literal]); + } + }); + }; - this.CONSTANT_integer = (function(_super) { + JVM.prototype.JVM_StringLiteralToBytes = function(literal) { + var ch, i, re, st; + i = 0; + re = []; + while (i++ < literal.length) { + ch = literal.charCodeAt(i); + st = []; + while (true) { + st.push(ch & 0xFF); + ch = ch >> 8; + if (!ch) break; + } + re = re.concat(st.reverse()); + } + return re; + }; - __extends(CONSTANT_integer, _super); + JVM.prototype.JVM_InvokeMethod = function(object, method, args) { + var arg_num, cls, t; + cls = this.JVM_FromHeap(object).cls; + t = new Thread(cls, this.RDA, method); + t.current_frame.locals[0] = object; + arg_num = args.length; + while (arg_num > 0) { + t.current_frame.locals[arg_num] = args[arg_num - 1]; + arg_num--; + } + return t.start(); + }; - CONSTANT_integer.name = 'CONSTANT_integer'; + JVM.prototype.JVM_NewObjectByReference = function(clsname, constructorname, descriptor, args, thread, callback) { + var _this = this; + if (!callback) throw 'NoFixException'; + return this.JVM_ResolveClass(clsname, thread, function(cls) { + var method; + method = _this.JVM_ResolveMethod(cls, constructorname, descriptor); + return callback(_this.JVM_NewObject(cls, method, args)); + }); + }; - function CONSTANT_integer(val, sign) { - var next; - if (val == null) val = 0; - if (sign == null) sign = false; - if (sign) { - if ((val & 0x8000) !== 0) { - next = (~val) + 1 & 0xffff; - val = next * -1; - } + JVM.prototype.JVM_NewObject = function(cls, constructor, args, objectCreated) { + var arg_num, locals, obj, objref; + if (!objectCreated) throw 'bugfix'; + obj = new JVM_Object(cls); + objref = this.RDA.heap.allocate(obj); + locals = new Array(); + locals[0] = objref; + arg_num = args.length; + while (arg_num > 0) { + locals[arg_num] = args[arg_num - 1]; + arg_num--; } - if (isNaN(val)) throw 'UnexpectedNaN'; - CONSTANT_integer.__super__.constructor.call(this, val); - } + return this.RDA.createThread(cls.real_name, constructor, locals, function() { + return objectCreated(objref); + }); + }; - return CONSTANT_integer; + JVM.prototype.JVM_ResolveNativeMethod = function(cls, name, type) { + throw 'NotYetImplementedException'; + }; - })(JVM_Number); + /* + JVM::JVM_ResolveField = (obj, name) -> + loop + if obj.fields[name] + return cls.fields[name] + obj = cls.get_super() + assert(cls, 'FieldResolutionException') + */ - this.CONSTANT_int = (function(_super) { - __extends(CONSTANT_int, _super); + JVM.prototype.JVM_ResolveMethod = function(cls, name, type) { + var arg, args, descriptor, endarg, i, index, method, nargs; + if (cls === null) throw 'NullClassException'; + if (cls.methods[name + type] != null) return cls.methods[name + type]; + while (true) { + for (index in cls.methods) { + method = cls.methods[index]; + descriptor = cls.constant_pool[method.descriptor_index]; + if (method.name === name && descriptor === type) { + method.descriptor = descriptor; + args = descriptor.substring(descriptor.indexOf('(') + 1, descriptor.indexOf(')')); + method.args = new Array(); + nargs = 0; + i = 0; + while (i < args.length) { + if (args[i] === 'L') { + arg = args.substring(i, args.indexOf(';', i)); + i = args.indexOf(';', i); + method.args.push(arg); + } else if (args[i] === '[') { + endarg = args.substring(i).search('[B-Z]'); + method.args.push(args.substring(i, endarg + i + 1)); + i += endarg; + } else { + method.args.push(args[i]); + } + ++nargs; + ++i; + } + method.returntype = descriptor.substring(descriptor.indexOf(')') + 1); + method.nargs = nargs; + cls.methods[method.name + descriptor] = method; + method['belongsTo'] = cls; + return method; + } + } + if (name === '') return false; + cls = cls.get_super(); + this.assert(cls, 'MethodResolutionException'); + } + return false; + }; - CONSTANT_int.name = 'CONSTANT_int'; + JVM.prototype.JVM_InvokeStaticMethod = function(clsname, method_name, descriptor, args, thread) { + var _this = this; + return this.JVM_ResolveClass(clsname, thread, function(cls) { + var arg_num, method, t; + method = _this.JVM_ResolveMethod(cls, method_name, descriptor); + t = new Thread(cls, _this.RDA, method); + arg_num = args.length - 1; + while (arg_num > -1) { + t.current_frame.locals[arg_num] = args[arg_num]; + arg_num--; + } + return t.start(); + }); + }; - function CONSTANT_int(val, sign) { - if (val == null) val = 0; - if (sign == null) sign = false; - CONSTANT_int.__super__.constructor.call(this, val, sign); - } + JVM.prototype.JVM_FindClassFromBootLoader = function(env, name) { + if ((typeof classname !== "undefined" && classname !== null) && classname.length > 0) { + this.classLoader.postMessage({ + 'action': 'find', + 'param': classname + }); + return this.classLoader.postMessage({ + 'action': 'start' + }); + } else { + return this.stdout.write(this.helpText()); + } + }; - return CONSTANT_int; + JVM.prototype.JVM_FindClassFromClassLoader = function(env, name, init, loader, throwError) { + throw 'NotYetImplementedException'; + }; - })(CONSTANT_integer); + JVM.prototype.JVM_FindClassFromClass = function(env, name, init, from) { + throw 'NotYetImplementedException'; + }; + + JVM.prototype.JVM_FindLoadedClass = function(env, loader, name) { + return this.RDA.method_area[name]; + }; - this.CONSTANT_float = (function(_super) { + JVM.prototype.JVM_DefineClass = function(env, name, loader, buf, len, pd) { + throw 'NotYetImplementedException'; + }; - __extends(CONSTANT_float, _super); + JVM.prototype.JVM_DefineClassWithSource = function(env, name, loader, buf, len, pd, source) { + throw 'NotYetImplementedException'; + }; - CONSTANT_float.name = 'CONSTANT_float'; + /* + Reflection Support Functions + */ - function CONSTANT_float(val) { - if (val == null) val = 0.0; - CONSTANT_float.__super__.constructor.call(this, val); - } - return CONSTANT_float; + JVM.prototype.JVM_GetClassName = function(env, cls) { + cls = env.JVM_FromHeap(cls.object).cls; + return env.JVM_ResolveStringLiteral(cls.real_name); + }; - })(JVM_Number); + JVM.prototype.JVM_GetClassInterfaces = function(env, cls) { + throw 'NotYetImplementedException'; + }; - this.CONSTANT_long = (function(_super) { + JVM.prototype.JVM_GetClassLoader = function(env, cls) { + return new JVM_Reference(0); + }; - __extends(CONSTANT_long, _super); + JVM.prototype.JVM_DesiredAssertionStatus = function(cls) { + return false; + }; - CONSTANT_long.name = 'CONSTANT_long'; + JVM.prototype.JVM_IsInterface = function(env, cls) { + throw 'NotYetImplementedException'; + }; - function CONSTANT_long(val) { - if (val == null) val = 0; - CONSTANT_long.__super__.constructor.call(this, val); - } + JVM.prototype.JVM_GetClassSigners = function(env, cls) { + throw 'NotYetImplementedException'; + }; - return CONSTANT_long; + JVM.prototype.JVM_SetClassSigners = function(env, cls, signers) { + throw 'NotYetImplementedException'; + }; - })(JVM_Number); + JVM.prototype.JVM_GetProtectionDomain = function(env, cls) { + throw 'NotYetImplementedException'; + }; - this.CONSTANT_double = (function(_super) { + JVM.prototype.JVM_SetProtectionDomain = function(env, cls, protection_domain) { + throw 'NotYetImplementedException'; + }; - __extends(CONSTANT_double, _super); + JVM.prototype.JVM_IsArrayClass = function(env, cls) { + throw 'NotYetImplementedException'; + }; - CONSTANT_double.name = 'CONSTANT_double'; + JVM.prototype.JVM_IsPrimitiveClass = function(env, cls) { + throw 'NotYetImplementedException'; + }; - function CONSTANT_double(val) { - if (val == null) val = 0.0; - CONSTANT_double.__super__.constructor.call(this, val); - } + JVM.prototype.JVM_GetComponentType = function(env, cls) { + throw 'NotYetImplementedException'; + }; - return CONSTANT_double; + JVM.prototype.JVM_GetClassModifiers = function(env, cls) { + throw 'NotYetImplementedException'; + }; - })(JVM_Number); + JVM.prototype.JVM_GetDeclaredClasses = function(env, ofClass) { + throw 'NotYetImplementedException'; + }; - this.CONSTANT_char = (function() { + JVM.prototype.JVM_GetDeclaringClass = function(env, ofClass) { + throw 'NotYetImplementedException'; + }; - CONSTANT_char.name = 'CONSTANT_char'; + JVM.prototype.JVM_FromHeap = function(reference) { + return this.RDA.heap.get(reference); + }; - function CONSTANT_char(value) { - this.value = value != null ? value : '\u0000'; - this.value = this.value.charCodeAt(); - } + JVM.prototype.JVM_DoPrivileged = function(cls, action, something, bool) { + return true; + }; - return CONSTANT_char; + return MethodFactory; })(); - this.CONSTANT_short = (function(_super) { + /* + A stack frame contains the state of one method invocation. When a method is + invoked a new frame is pushed onto the thread's stack. + */ - __extends(CONSTANT_short, _super); - CONSTANT_short.name = 'CONSTANT_short'; + this.Frame = (function() { - function CONSTANT_short(val) { - if (val == null) val = 0; - CONSTANT_short.__super__.constructor.call(this, val); - } + Frame.name = 'Frame'; - return CONSTANT_short; + function Frame(method, cls) { + this.cls = cls; + this.method_stack = method.attributes.Code.code; + this.op_stack = new Array(); + this.op_stack.peek = function() { + return this[this.length - 1]; + }; + this.op_stack.push = function(word) { + if (word === void 0) { + throw "NullStackException"; + } else if (word instanceof JVM_Object) { + throw "ObjectOnStackException"; + } + this[this.length] = word; + return true; + }; + this.constant_pool = this.cls.constant_pool; + this.resolveSelf(this.cls); + this.name = method.name; + this.locals = {}; + this.pc = 0; + this; - })(JVM_Number); + } - this.CONSTANT_byte = (function() { + /* + Execute the next opcode in the method_stack + If the opcode returns false then execution will pause + */ - CONSTANT_byte.name = 'CONSTANT_byte'; - function CONSTANT_byte(value, sign) { - var next; - this.value = value != null ? value : 0; - if (sign == null) sign = false; - if (sign) { - if ((this.value & 0x80) !== 0) { - next = (~this.value) + 1 & 0xff; - this.value = next * -1; - } - } - } + /*execute : (opcodes) -> + op = @method_stack[@pc] + + if(!opcodes[op].do(@)) then return false + return yes + */ - return CONSTANT_byte; - })(); + Frame.prototype.execute = function(opcodes, t) { + var op, result; + op = this.method_stack[this.pc]; + t.log(this.cls.real_name + '-' + this.name + '\t\t' + op + '\t\t' + opcodes[op].description); + result = opcodes[op]["do"](this); + ++this.pc; + return result; + }; - this.CONSTANT_boolean = (function() { + Frame.prototype.resolveSelf = function(cls) { + return this.constant_pool[cls.this_class] = cls; + }; - CONSTANT_boolean.name = 'CONSTANT_boolean'; + /* + resolveMethod : (cls, name) -> + cls_ref = @constant_pool[cls] + method_ref = @constant_pool[name] + */ - function CONSTANT_boolean(value) { - this.value = value != null ? value : 0; - } - return CONSTANT_boolean; + return Frame; })(); - this.CONSTANT_String = (function(_super) { + /* + # Garbage Collector for the JVM, used by the RDA. + */ - __extends(CONSTANT_String, _super); - CONSTANT_String.name = 'CONSTANT_String'; + this.GC = (function() { - function CONSTANT_String(value) { - this.value = value != null ? value : ''; - } + GC.name = 'GC'; - return CONSTANT_String; + GC.prototype.grey = 1; - })(String); + GC.prototype.white = 0; - this.JVM_RECOGNIZED_METHOD_MODIFIERS = { - JVM_ACC_PUBLIC: 0x0001, - JVM_ACC_PRIVATE: 0x0002, - JVM_ACC_PROTECTED: 0x0004, - JVM_ACC_STATIC: 0x0008, - JVM_ACC_FINAL: 0x0010, - JVM_ACC_SYNCHRONIZED: 0x0020, - JVM_ACC_BRIDGE: 0, - JVM_ACC_VARARGS: 0, - JVM_ACC_NATIVE: 0x0100, - JVM_ACC_ABSTRACT: 0x0400, - JVM_ACC_STRICT: 0, - JVM_ACC_SYNTHETIC: 0 - }; + GC.prototype.black = 3; - this.JVM_RECOGNIZED_CLASS_MODIFIERS = { - JVM_ACC_PUBLIC: 0x0001, - JVM_ACC_FINAL: 0x0010, - JVM_ACC_SUPER: 0x0020, - JVM_ACC_INTERFACE: 0x0200, - JVM_ACC_ABSTRACT: 0x0400 - }; + GC.prototype.running = false; - /* JVM_ACC_ANNOTATION | \ - JVM_ACC_ENUM | \ - JVM_ACC_SYNTHETIC) - */ + GC.prototype.missed = 0; + /* + # Constructor. Starts collections at one second intervals. + */ - this.JVM_RECOGNIZED_FIELD_MODIFIERS = { - JVM_ACC_PUBLIC: 0x0000, - JVM_ACC_PRIVATE: 0x0000, - JVM_ACC_PROTECTED: 0x0000, - JVM_ACC_STATIC: 0x0000, - JVM_ACC_FINAL: 0x0000, - JVM_ACC_VOLATILE: 0x0000, - JVM_ACC_TRANSIENT: 0x0000, - JVM_ACC_ENUM: 0x0000, - JVM_ACC_SYNTHETIC: 0x0000 - }; - this.FIELD_DESCRIPTORS = { - 'B': 'CONSTANT_byte', - 'C': 'CONSTANT_char', - 'D': 'CONSTANT_double', - 'F': 'CONSTANT_float', - 'I': 'CONSTANT_integer', - 'J': 'CONSTANT_long', - 'L': 'CONSTANT_Class', - 'S': 'CONSTANT_short', - 'Z': 'CONSTANT_boolean', - '[': 'CONSTANT_Array' - }; + function GC(method_area, heap, threads) { + var _this = this; + this.method_area = method_area; + this.heap = heap; + this.threads = threads; + setInterval(function() { + return _this.collect(); + }, 1000); + } - /* - Used by the ClassLoader - */ + GC.prototype.run = function() { + this.mark(); + this.reclaim(); + this.promote(); + return true; + }; + /* + # Colours references for collection. Tri-Colour algorithm. + */ - this.CONSTANT_Methodref_info = (function() { - CONSTANT_Methodref_info.name = 'CONSTANT_Methodref_info'; + GC.prototype.mark = function() { + var next, prop; + while ((next = this.getnextgrey()) !== null) { + for (prop in next) { + if (next[prop] instanceof JVM_Reference) { + if (next[prop].pointer !== 0) { + this.heap.younggen[next[prop].pointer].colour = this.grey; + } + } + } + next.colour = this.black; + } + return true; + }; - function CONSTANT_Methodref_info(class_index, name_and_type_index) { - this.class_index = class_index; - this.name_and_type_index = name_and_type_index; - } + /* + # Reclaims heap space. + */ - return CONSTANT_Methodref_info; - })(); + GC.prototype.reclaim = function() { + var index, item; + for (index in this.heap.younggen) { + item = this.heap.younggen[index]; + if (item.colour === this.white) delete this.heap.younggen[index]; + } + return true; + }; - this.CONSTANT_InterfaceMethodref_info = (function() { + /* + # Promotes References to older generations. + */ - CONSTANT_InterfaceMethodref_info.name = 'CONSTANT_InterfaceMethodref_info'; - function CONSTANT_InterfaceMethodref_info(class_index, name_and_type_index) { - this.class_index = class_index; - this.name_and_type_index = name_and_type_index; - } + GC.prototype.promote = function() { + return true; + }; - return CONSTANT_InterfaceMethodref_info; + /* + # Collects references from Classes and Threads. + */ - })(); - this.CONSTANT_Fieldref_info = (function() { + GC.prototype.collect = function() { + var cls, field, fields, message, ref, thread, _i, _len, _ref; + if (this.running) { + this.missed++; + if (this.missed > 3) throw "outofmemoryerror"; + return; + } + this.missed = 0; + for (cls in this.method_area) { + fields = this.method_area[cls].fields; + for (field in fields) { + ref = fields[field]; + if (ref.pointer && ref.pointer !== 0) { + try { + this.heap.younggen[ref.pointer].colour = this.grey; + } catch (e) { + console.log("Missing object bug"); + } + } + } + } + this.threadcount = this.threads.length; + this.responses = 0; + message = { + 'action': 'GCreport' + }; + _ref = this.threads; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + thread = _ref[_i]; + thread.postMessage(message); + } + return true; + }; - CONSTANT_Fieldref_info.name = 'CONSTANT_Fieldref_info'; + GC.prototype.add = function(rootobjects) { + var ref, _i, _len; + for (_i = 0, _len = rootobjects.length; _i < _len; _i++) { + ref = rootobjects[_i]; + this.heap.younggen[ref.pointer].colour = this.grey; + } + if (++this.responses === this.threadcount) this.run(); + return true; + }; - function CONSTANT_Fieldref_info(class_index, name_and_type_index) { - this.class_index = class_index; - this.name_and_type_index = name_and_type_index; - } + GC.prototype.getnextgrey = function() { + var grey, len, nextref; + nextref = 1; + grey = null; + len = Object.keys(this.heap.younggen).length; + while (nextref < len) { + grey = this.heap.younggen[nextref++]; + if (grey === void 0) continue; + if (grey.colour === this.grey) return grey; + } + return null; + }; - return CONSTANT_Fieldref_info; + return GC; })(); - this.CONSTANT_NameAndType_info = (function() { + /* + # Handles the invocation of native methods in Threads. + */ - CONSTANT_NameAndType_info.name = 'CONSTANT_NameAndType_info'; - function CONSTANT_NameAndType_info(name_index, descriptor_index) { - this.name_index = name_index; - this.descriptor_index = descriptor_index; + this.NativeFrame = (function() { + + NativeFrame.name = 'NativeFrame'; + + function NativeFrame(method, cls, env, thread) { + this.method = method; + this.cls = cls; + this.env = env; + this.thread = thread; + this.op_stack = new Array(); + this.resolved = true; + this.clsname = 'native/' + this.cls.real_name; + this.pc = 0; + this.returntype = this.method.returntype; + this.name = this.method.name; + this.locals = {}; } - return CONSTANT_NameAndType_info; + NativeFrame.prototype.execute = function(opcodes) { + this.thread.log(this.clsname + '-' + this.name); + this.thread.resolveNativeClass(this.clsname, function() { + var arg_num, args, i; + if (this.locals[0]) this.method['object'] = this.locals[0]; + args = new Array(); + arg_num = this.method.args.length; + if (this.method.access_flags & JVM_RECOGNIZED_METHOD_MODIFIERS.JVM_ACC_STATIC) { + i = 0; + while (i < arg_num) { + args.push(this.locals[i++]); + } + } else { + i = 1; + while (i < arg_num + 1) { + args.push(this.locals[i++]); + } + } + this.thread.executeNativeMethod(this.clsname, this.name, args, function(returnval) { + if (returnval != null) this.op_stack.push(returnval); + switch (this.returntype.charAt(0)) { + case 'B': + case 'C': + case 'I': + case 'Z': + case 'S': + return opcodes[172]["do"](this); + case 'D': + this.op_stack.push(returnval); + return opcodes[175]["do"](this); + case 'F': + return opcodes[174]["do"](this); + case 'J': + this.op_stack.push(returnval); + return opcodes[173]["do"](this); + case 'L': + case '[': + return opcodes[176]["do"](this); + default: + return opcodes[177]["do"](this); + } + }, this); + return false; + }, this); + return false; + /* + @thread.resolveNativeClass(@clsname, (nativeCls) -> + nativeCls['thread'] = @thread + + if @locals[0] + nativeCls['object'] = @locals[0] + nMethod = nativeCls[@method.name] + + args = new Array() + args.push(@env) + args.push(nativeCls) + + arg_num = @method.args.length + # store args in locals; arg1 = locals[0] etc + # static invocation + if @method.access_flags & JVM_RECOGNIZED_METHOD_MODIFIERS.JVM_ACC_STATIC + while arg_num > 0 + args.push(@locals[--arg_num]) + + else + while arg_num > 0 + args.push(@locals[arg_num--]) + # put objectref (this) in new method local 0 + args.push(@locals[0]) + + # Exectute the Native Method TODO, appropriate arguments + returnval = nMethod.apply(nativeCls, args) + + + + , @) + */ + + }; + + return NativeFrame; })(); - this.CONSTANT_Stringref = (function() { + this.InternalJNI = (function() { - CONSTANT_Stringref.name = 'CONSTANT_Stringref'; + InternalJNI.name = 'InternalJNI'; - function CONSTANT_Stringref(string_index) { - this.string_index = string_index; + function InternalJNI(JVM) { + this.JVM = JVM; } - return CONSTANT_Stringref; + InternalJNI.prototype.RegisterNatives = function(jclass, methods) { + var method, name, _results; + _results = []; + for (name in methods) { + method = methods[name]; + _results.push(jclass.methods[name] = this.JVM[method]); + } + return _results; + }; + + InternalJNI.prototype.GetObjectClass = function() {}; + + return InternalJNI; })();