CPP preprocessor and file headers
This commit is contained in:
parent
2d6305c1bc
commit
4beb1403ab
1
app.py
1
app.py
@ -27,6 +27,7 @@ class index:
|
|||||||
return ""
|
return ""
|
||||||
if filename.endswith(".js"):
|
if filename.endswith(".js"):
|
||||||
web.header('Content-Type', 'text/javascript')
|
web.header('Content-Type', 'text/javascript')
|
||||||
|
return commands.getstatusoutput("/usr/bin/cpp -P -undef -Wundef -std=c99 -nostdinc -Wtrigraphs -fdollars-in-identifiers " + filename)[1]
|
||||||
if "testRuntime" in filename:
|
if "testRuntime" in filename:
|
||||||
alphex = filename[filename.rfind("/") + 1:];
|
alphex = filename[filename.rfind("/") + 1:];
|
||||||
return file("runtime/" + alphex.replace(".","/") + ".class");
|
return file("runtime/" + alphex.replace(".","/") + ".class");
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: attributes.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
var ExceptionTableEntry = function(dStream, constantPool){
|
var ExceptionTableEntry = function(dStream, constantPool){
|
||||||
this.start_pc = dStream.getU2();
|
this.start_pc = dStream.getU2();
|
||||||
this.end_pc = dStream.getU2();
|
this.end_pc = dStream.getU2();
|
||||||
|
40
class.js
40
class.js
@ -1,15 +1,25 @@
|
|||||||
// access flags DEFINE
|
/* -*- Mode: Javascript -*-
|
||||||
var ACC_PUBLIC = 0x0001; // Declared public; may be accessed from outside its package.
|
* -*- coding: UTF-8 -*-
|
||||||
var ACC_PRIVATE = 0x0002; // Declared private; usable only within the defining class.
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
var ACC_PROTECTED = 0x0004; // Declared protected; may be accessed within subclasses.
|
*
|
||||||
var ACC_STATIC = 0x0008; // Declared static.
|
* File: class.js
|
||||||
var ACC_FINAL = 0x0010; // Declared final; no subclasses allowed.
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
var ACC_SUPER = 0x0020; // Treat superclass methods specially when invoked by the invokespecial instruction.
|
*
|
||||||
var ACC_VOLATILE = 0x0040; // Declared volatile; cannot be cached.
|
* Author: Artur Ventura
|
||||||
var ACC_NATIVE = 0x0100; // Declared native; implemented in a language other than Java.
|
*
|
||||||
var ACC_INTERFACE = 0x0200; // Is an interface, not a class.
|
*/
|
||||||
var ACC_ABSTRACT = 0x0400; // Declared abstract; may not be instantiated.
|
|
||||||
var ACC_TRANSIENT = 0x0080; // Declared transient; not written or read by a persistent object manager.
|
#define ACC_PUBLIC 0x0001 // Declared public; may be accessed from outside its package.
|
||||||
|
#define ACC_PRIVATE 0x0002 // Declared private; usable only within the defining class.
|
||||||
|
#define ACC_PROTECTED 0x0004 // Declared protected; may be accessed within subclasses.
|
||||||
|
#define ACC_STATIC 0x0008 // Declared static.
|
||||||
|
#define ACC_FINAL 0x0010 // Declared final; no subclasses allowed.
|
||||||
|
#define ACC_SUPER 0x0020 // Treat superclass methods specially when invoked by the invokespecial instruction.
|
||||||
|
#define ACC_VOLATILE 0x0040 // Declared volatile; cannot be cached.
|
||||||
|
#define ACC_NATIVE 0x0100 // Declared native; implemented in a language other than Java.
|
||||||
|
#define ACC_INTERFACE 0x0200 // Is an interface, not a class.
|
||||||
|
#define ACC_ABSTRACT 0x0400 // Declared abstract; may not be instantiated.
|
||||||
|
#define ACC_TRANSIENT 0x0080 // Declared transient; not written or read by a persistent object manager.
|
||||||
|
|
||||||
function slurpFile (filename, fa) {
|
function slurpFile (filename, fa) {
|
||||||
var xmlHttpRequest, response, result ;
|
var xmlHttpRequest, response, result ;
|
||||||
@ -45,12 +55,6 @@ function slurpFile (filename, fa) {
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
var log = function (msg){
|
|
||||||
write(msg);
|
|
||||||
if (console){
|
|
||||||
console.log(msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var ClassDefinition = function(jvm) {
|
var ClassDefinition = function(jvm) {
|
||||||
this.jvm = jvm;
|
this.jvm = jvm;
|
||||||
|
@ -1,14 +1,26 @@
|
|||||||
var CONSTANT_Class = 7;
|
/* -*- Mode: Javascript -*-
|
||||||
var CONSTANT_Fieldref = 9;
|
* -*- coding: UTF-8 -*-
|
||||||
var CONSTANT_Methodref = 10;
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
var CONSTANT_InterfaceMethodref = 11;
|
*
|
||||||
var CONSTANT_String = 8;
|
* File: constantPool.js
|
||||||
var CONSTANT_Integer = 3;
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
var CONSTANT_Float = 4;
|
*
|
||||||
var CONSTANT_Long = 5;
|
* Author: Artur Ventura
|
||||||
var CONSTANT_Double = 6;
|
*
|
||||||
var CONSTANT_NameAndType = 12;
|
*/
|
||||||
var CONSTANT_Utf8 = 1;
|
|
||||||
|
#define CONSTANT_Utf8 1
|
||||||
|
//what is CONSTANT_????? 2
|
||||||
|
#define CONSTANT_Integer 3
|
||||||
|
#define CONSTANT_Float 4
|
||||||
|
#define CONSTANT_Long 5
|
||||||
|
#define CONSTANT_Double 6
|
||||||
|
#define CONSTANT_Class 7
|
||||||
|
#define CONSTANT_String 8
|
||||||
|
#define CONSTANT_Fieldref 9
|
||||||
|
#define CONSTANT_Methodref 10
|
||||||
|
#define CONSTANT_InterfaceMethodref 11
|
||||||
|
#define CONSTANT_NameAndType 12
|
||||||
|
|
||||||
// constant pool members
|
// constant pool members
|
||||||
|
|
||||||
|
160
cpu.js
160
cpu.js
@ -1,3 +1,26 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: cpu.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#import "opcodes.js"
|
||||||
|
|
||||||
|
#define JVM_THROWS_NEW(exception) throw "VER: throws new exception"
|
||||||
|
#ifdef DEBUG_INTRP
|
||||||
|
#define LOG_INTRP(x) LOG(x)
|
||||||
|
#else
|
||||||
|
#define LOG_INTRP(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define DEFOP(opcode) case opcode: LOG_INTRP("opcode pc: " + pc);
|
||||||
|
#define ENDDEF break;
|
||||||
|
|
||||||
function canonicalName(ref){
|
function canonicalName(ref){
|
||||||
return ref.str.replace(/\//g,".")
|
return ref.str.replace(/\//g,".")
|
||||||
}
|
}
|
||||||
@ -18,7 +41,7 @@ var JVM = function(params,args){
|
|||||||
this.method_area[name] = loaded_class;
|
this.method_area[name] = loaded_class;
|
||||||
this.verifyAndLoadClass(loaded_class);
|
this.verifyAndLoadClass(loaded_class);
|
||||||
|
|
||||||
log("[Loaded " + name + "]");
|
LOG("[Loaded " + name + "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
return loaded_class;
|
return loaded_class;
|
||||||
@ -67,9 +90,13 @@ var JVMFrame = function(){
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function JVM_THROWS_NEW(exception){
|
function JVMPanic(message){
|
||||||
throw "VER: throws new " + exception;
|
this.toString = function(){
|
||||||
}
|
return "JVMPanic: " + message
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#define PANIC(msg) throw new JVMPanic(msg)
|
||||||
|
|
||||||
function interpret(frame){
|
function interpret(frame){
|
||||||
var operand_stack = frame.operand_stack;
|
var operand_stack = frame.operand_stack;
|
||||||
@ -77,129 +104,6 @@ function interpret(frame){
|
|||||||
var code = 0; //resolve code from method;
|
var code = 0; //resolve code from method;
|
||||||
|
|
||||||
switch(opcode){
|
switch(opcode){
|
||||||
case 0x32: // aaload
|
#include "intrp.js"
|
||||||
var index = operand_stack.pop();
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
|
|
||||||
if (arrayref == NULL){
|
|
||||||
JVM_THROWS_NEW("java.lang.NullPointerException");
|
|
||||||
}
|
|
||||||
if (index >= arrayref.length){
|
|
||||||
JVM_THROWS_NEW("java.lang.ArrayIndexOutOfBoundsException");
|
|
||||||
}
|
|
||||||
operand_stack.push(arrayref.value[index.value]);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x53: // aastore
|
|
||||||
var value = operand_stack.pop();
|
|
||||||
var index = operand_stack.pop();
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
|
|
||||||
if (arrayref == NULL){
|
|
||||||
JVM_THROWS_NEW("java.lang.NullPointerException");
|
|
||||||
}
|
|
||||||
if (index >= arrayref.length){
|
|
||||||
JVM_THROWS_NEW("java.lang.ArrayIndexOutOfBoundsException");
|
|
||||||
}
|
|
||||||
if (!arrayref.classRef.isAssignable(value.cl)){
|
|
||||||
JVM_THROWS_NEW("java.lang.ArrayStoreException");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x1: //aconst_null
|
|
||||||
operand_stack.push(null);
|
|
||||||
break;
|
|
||||||
case 0x19: //aload
|
|
||||||
var i = operand_stack.pop();
|
|
||||||
operand_stack.push(local_variables[i])
|
|
||||||
break;
|
|
||||||
case 0x2a:
|
|
||||||
case 0x2b:
|
|
||||||
case 0x2c:
|
|
||||||
case 0x2d: // aload_<n>
|
|
||||||
operand_stack.push(local_variables[opcode - 0x2a]);
|
|
||||||
break;
|
|
||||||
case 0xbd: // anewarray
|
|
||||||
var indexbyte1 = code.pop();
|
|
||||||
var indexbyte2 = code.pop();
|
|
||||||
var count = operand_stack.pop();
|
|
||||||
if (count < 0){
|
|
||||||
JVM_THROWS_NEW("java.lang.NegativeArraySizeException");
|
|
||||||
}
|
|
||||||
var clRef = frame.classRef.constantPool.get((indexbyte1 << 8) | indexbyte2);
|
|
||||||
var instance = {length:count, value:[], classRef:this.jvm.classForName(clRef)};
|
|
||||||
operand_stack.push(instance);
|
|
||||||
break;
|
|
||||||
case 0xb0: // areturn
|
|
||||||
var objectref = operand_stack.pop();
|
|
||||||
return {return_object: objectref}
|
|
||||||
case 0xbe: // arraylength
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
operand_stack.push(arrayref.length);
|
|
||||||
break;
|
|
||||||
case 0x3a: // astore
|
|
||||||
var objectref = operand_stack.pop();
|
|
||||||
local_variables[code.pop()] = objectref;
|
|
||||||
break;
|
|
||||||
case 0x4b:
|
|
||||||
case 0x4c:
|
|
||||||
case 0x4d:
|
|
||||||
case 0x4e: // astore_<n>
|
|
||||||
var objectref = operand_stack.pop();
|
|
||||||
local_variables[opcode-0x4b] = objectref;
|
|
||||||
break;
|
|
||||||
case 0xbf: // athrow
|
|
||||||
var objectref = operand_stack.pop();
|
|
||||||
if (objectref == null){
|
|
||||||
JVM_THROWS_NEW("java.lang.NullPointerException");
|
|
||||||
}
|
|
||||||
throw [objectref.classRef.name_ref.str,objectref];
|
|
||||||
case 0x33: // baload
|
|
||||||
var value = operand_stack.pop();
|
|
||||||
var index = operand_stack.pop();
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
|
|
||||||
|
|
||||||
if (arrayref == NULL){
|
|
||||||
JVM_THROWS_NEW("java.lang.NullPointerException");
|
|
||||||
}
|
|
||||||
if (index >= arrayref.length){
|
|
||||||
JVM_THROWS_NEW("java.lang.ArrayIndexOutOfBoundsException");
|
|
||||||
}
|
|
||||||
arrayref.value[index] = value;
|
|
||||||
break;
|
|
||||||
case 0x10: // bipush
|
|
||||||
operand_stack.push(code.pop());
|
|
||||||
break;
|
|
||||||
case 0x34: // caload
|
|
||||||
var index = operand_stack.pop();
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
|
|
||||||
operand_stack.push(arrayref.value[index]);
|
|
||||||
break;
|
|
||||||
case 0x55: // castore
|
|
||||||
var value = operand_stack.pop();
|
|
||||||
var index = operand_stack.pop();
|
|
||||||
var arrayref = operand_stack.pop();
|
|
||||||
|
|
||||||
|
|
||||||
if (arrayref == NULL){
|
|
||||||
JVM_THROWS_NEW("java.lang.NullPointerException");
|
|
||||||
}
|
|
||||||
if (index >= arrayref.length){
|
|
||||||
JVM_THROWS_NEW("java.lang.ArrayIndexOutOfBoundsException");
|
|
||||||
}
|
|
||||||
arrayref.value[index] = value;
|
|
||||||
break;
|
|
||||||
case 0xc0: // checkcast
|
|
||||||
var objectref = operand_stack.pop();
|
|
||||||
var indexbyte1 = code.pop();
|
|
||||||
var indexbyte2 = code.pop();
|
|
||||||
var clRef = frame.classRef.constantPool.get((indexbyte1 << 8) | indexbyte2);
|
|
||||||
if (objectref.classRef.isAssignable(clRef)){
|
|
||||||
operand_stack.push(objectref);
|
|
||||||
}else{
|
|
||||||
JVM_THROWS_NEW("java.lang.ClassCastException");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
11
infos.js
11
infos.js
@ -1,3 +1,14 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: infos.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
var FieldInfo = function(dStream,constantPool){
|
var FieldInfo = function(dStream,constantPool){
|
||||||
this.access_flags = dStream.getU2();
|
this.access_flags = dStream.getU2();
|
||||||
this.name_index = ConstantPoolRef(dStream.getU2(), constantPool, CONSTANT_Utf8);
|
this.name_index = ConstantPoolRef(dStream.getU2(), constantPool, CONSTANT_Utf8);
|
||||||
|
169
intrp.js
Normal file
169
intrp.js
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: intrp.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
DEFOP(AALOAD)
|
||||||
|
var index = operand_stack.pop();
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
|
||||||
|
if (arrayref == NULL){
|
||||||
|
JVM_THROWS_NEW(java.lang.NullPointerException);
|
||||||
|
}
|
||||||
|
if (index >= arrayref.length){
|
||||||
|
JVM_THROWS_NEW(java.lang.ArrayIndexOutOfBoundsException);
|
||||||
|
}
|
||||||
|
operand_stack.push(arrayref.value[index.value]);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(AASTORE)
|
||||||
|
var value = operand_stack.pop();
|
||||||
|
var index = operand_stack.pop();
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
|
||||||
|
if (arrayref == NULL){
|
||||||
|
JVM_THROWS_NEW(java.lang.NullPointerException);
|
||||||
|
}
|
||||||
|
if (index >= arrayref.length){
|
||||||
|
JVM_THROWS_NEW(java.lang.ArrayIndexOutOfBoundsException);
|
||||||
|
}
|
||||||
|
if (!arrayref.classRef.isAssignable(value.cl)){
|
||||||
|
JVM_THROWS_NEW(java.lang.ArrayStoreException);
|
||||||
|
}
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ACONST_NULL)
|
||||||
|
operand_stack.push(null);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ALOAD)
|
||||||
|
var i = operand_stack.pop();
|
||||||
|
operand_stack.push(local_variables[i])
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ALOAD_0)
|
||||||
|
DEFOP(ALOAD_1)
|
||||||
|
DEFOP(ALOAD_2)
|
||||||
|
DEFOP(ALOAD_3)
|
||||||
|
operand_stack.push(local_variables[opcode - 0x2a]);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ANEWARRAY)
|
||||||
|
var indexbyte1 = code.pop();
|
||||||
|
var indexbyte2 = code.pop();
|
||||||
|
var count = operand_stack.pop();
|
||||||
|
if (count < 0){
|
||||||
|
JVM_THROWS_NEW(java.lang.NegativeArraySizeException);
|
||||||
|
}
|
||||||
|
var clRef = frame.classRef.constantPool.get((indexbyte1 << 8) | indexbyte2);
|
||||||
|
var instance = {length)count, value)[], classRef)this.jvm.classForName(clRef)};
|
||||||
|
operand_stack.push(instance);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ARETURN)
|
||||||
|
var objectref = operand_stack.pop();
|
||||||
|
return {return_object) objectref}
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ARRAYLENGTH)
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
operand_stack.push(arrayref.length);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ASTORE)
|
||||||
|
var objectref = operand_stack.pop();
|
||||||
|
local_variables[code.pop()] = objectref;
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(ASTORE_0)
|
||||||
|
DEFOP(ASTORE_1)
|
||||||
|
DEFOP(ASTORE_2)
|
||||||
|
DEFOP(ASTORE_3)
|
||||||
|
var objectref = operand_stack.pop();
|
||||||
|
local_variables[opcode-0x4b] = objectref;
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
|
||||||
|
DEFOP(ATHROW)
|
||||||
|
var objectref = operand_stack.pop();
|
||||||
|
if (objectref == null){
|
||||||
|
JVM_THROWS_NEW(java.lang.NullPointerException);
|
||||||
|
}
|
||||||
|
throw [objectref.classRef.name_ref.str,objectref];
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(BALOAD)
|
||||||
|
var value = operand_stack.pop();
|
||||||
|
var index = operand_stack.pop();
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
|
||||||
|
if (arrayref == NULL){
|
||||||
|
JVM_THROWS_NEW(java.lang.NullPointerException);
|
||||||
|
}
|
||||||
|
if (index >= arrayref.length){
|
||||||
|
JVM_THROWS_NEW(java.lang.ArrayIndexOutOfBoundsException);
|
||||||
|
}
|
||||||
|
arrayref.value[index] = value;
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(BIPUSH)
|
||||||
|
operand_stack.push(code.pop());
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(CALOAD)
|
||||||
|
var index = operand_stack.pop();
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
|
||||||
|
operand_stack.push(arrayref.value[index]);
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(CASTORE)
|
||||||
|
var value = operand_stack.pop();
|
||||||
|
var index = operand_stack.pop();
|
||||||
|
var arrayref = operand_stack.pop();
|
||||||
|
|
||||||
|
|
||||||
|
if (arrayref == NULL){
|
||||||
|
JVM_THROWS_NEW(java.lang.NullPointerException);
|
||||||
|
}
|
||||||
|
if (index >= arrayref.length){
|
||||||
|
JVM_THROWS_NEW(java.lang.ArrayIndexOutOfBoundsException);
|
||||||
|
}
|
||||||
|
arrayref.value[index] = value;
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(CHECKCAST)
|
||||||
|
var objectref = operand_stack.pop();
|
||||||
|
var indexbyte1 = code.pop();
|
||||||
|
var indexbyte2 = code.pop();
|
||||||
|
var clRef = frame.classRef.constantPool.get((indexbyte1 << 8) | indexbyte2);
|
||||||
|
if (objectref.classRef.isAssignable(clRef)){
|
||||||
|
operand_stack.push(objectref);
|
||||||
|
}else{
|
||||||
|
JVM_THROWS_NEW(java.lang.ClassCastException);
|
||||||
|
}
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(D2F)
|
||||||
|
PANIC("Not Implemented Yet");
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(D2F)
|
||||||
|
PANIC("Not Implemented Yet");
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(D2L)
|
||||||
|
PANIC("Not Implemented Yet");
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(DADD)
|
||||||
|
PANIC("Not Implemented Yet");
|
||||||
|
ENDDEF
|
||||||
|
|
||||||
|
DEFOP(DALOAD)
|
@ -1,3 +1,14 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: linearDatastream.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
var DataStream = function(data){
|
var DataStream = function(data){
|
||||||
this.i = 0;
|
this.i = 0;
|
||||||
|
|
||||||
|
36
main.js
36
main.js
@ -1,10 +1,34 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: main.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DEBUG
|
||||||
|
#define DEBUG_INTRP
|
||||||
|
|
||||||
|
#ifndef DEBUG
|
||||||
|
#define log(msg)
|
||||||
|
#else
|
||||||
|
#define LOG(msg) write(msg);\
|
||||||
|
if (console){\
|
||||||
|
console.log(msg);\
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "linearDataStream.js"
|
||||||
|
#include "constantPool.js"
|
||||||
|
#include "attributes.js"
|
||||||
|
#include "infos.js"
|
||||||
|
#include "class.js"
|
||||||
|
#include "cpu.js"
|
||||||
|
|
||||||
|
|
||||||
include("linearDataStream.js");
|
|
||||||
include("constantPool.js");
|
|
||||||
include("attributes.js");
|
|
||||||
include("infos.js");
|
|
||||||
include("class.js");
|
|
||||||
include("cpu.js");
|
|
||||||
var test_jvm;
|
var test_jvm;
|
||||||
function main (args){
|
function main (args){
|
||||||
test_jvm = new JVM({},["[I"])
|
test_jvm = new JVM({},["[I"])
|
||||||
|
212
opcodes.js
Normal file
212
opcodes.js
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: opcodes.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NOP 0
|
||||||
|
#define ACONST_NULL 1
|
||||||
|
#define ICONST_M1 2
|
||||||
|
#define ICONST_0 3
|
||||||
|
#define ICONST_1 4
|
||||||
|
#define ICONST_2 5
|
||||||
|
#define ICONST_3 6
|
||||||
|
#define ICONST_4 7
|
||||||
|
#define ICONST_5 8
|
||||||
|
#define LCONST_0 9
|
||||||
|
#define LCONST_1 10
|
||||||
|
#define FCONST_0 11
|
||||||
|
#define FCONST_1 12
|
||||||
|
#define FCONST_2 13
|
||||||
|
#define DCONST_0 14
|
||||||
|
#define DCONST_1 15
|
||||||
|
#define BIPUSH 16
|
||||||
|
#define SIPUSH 17
|
||||||
|
#define LDC 18
|
||||||
|
#define LDC_W 19
|
||||||
|
#define LDC2_W 20
|
||||||
|
#define ILOAD 21
|
||||||
|
#define LLOAD 22
|
||||||
|
#define FLOAD 23
|
||||||
|
#define DLOAD 24
|
||||||
|
#define ALOAD 25
|
||||||
|
#define ILOAD_0 26
|
||||||
|
#define ILOAD_1 27
|
||||||
|
#define ILOAD_2 28
|
||||||
|
#define ILOAD_3 29
|
||||||
|
#define LLOAD_0 30
|
||||||
|
#define LLOAD_1 31
|
||||||
|
#define LLOAD_2 32
|
||||||
|
#define LLOAD_3 33
|
||||||
|
#define FLOAD_0 34
|
||||||
|
#define FLOAD_1 35
|
||||||
|
#define FLOAD_2 36
|
||||||
|
#define FLOAD_3 37
|
||||||
|
#define DLOAD_0 38
|
||||||
|
#define DLOAD_1 39
|
||||||
|
#define DLOAD_2 40
|
||||||
|
#define DLOAD_3 41
|
||||||
|
#define ALOAD_0 42
|
||||||
|
#define ALOAD_1 43
|
||||||
|
#define ALOAD_2 44
|
||||||
|
#define ALOAD_3 45
|
||||||
|
#define IALOAD 46
|
||||||
|
#define LALOAD 47
|
||||||
|
#define FALOAD 48
|
||||||
|
#define DALOAD 49
|
||||||
|
#define AALOAD 50
|
||||||
|
#define BALOAD 51
|
||||||
|
#define CALOAD 52
|
||||||
|
#define SALOAD 53
|
||||||
|
#define ISTORE 54
|
||||||
|
#define LSTORE 55
|
||||||
|
#define FSTORE 56
|
||||||
|
#define DSTORE 57
|
||||||
|
#define ASTORE 58
|
||||||
|
#define ISTORE_0 59
|
||||||
|
#define ISTORE_1 60
|
||||||
|
#define ISTORE_2 61
|
||||||
|
#define ISTORE_3 62
|
||||||
|
#define LSTORE_0 63
|
||||||
|
#define LSTORE_1 64
|
||||||
|
#define LSTORE_2 65
|
||||||
|
#define LSTORE_3 66
|
||||||
|
#define FSTORE_0 67
|
||||||
|
#define FSTORE_1 68
|
||||||
|
#define FSTORE_2 69
|
||||||
|
#define FSTORE_3 70
|
||||||
|
#define DSTORE_0 71
|
||||||
|
#define DSTORE_1 72
|
||||||
|
#define DSTORE_2 73
|
||||||
|
#define DSTORE_3 74
|
||||||
|
#define ASTORE_0 75
|
||||||
|
#define ASTORE_1 76
|
||||||
|
#define ASTORE_2 77
|
||||||
|
#define ASTORE_3 78
|
||||||
|
#define IASTORE 79
|
||||||
|
#define LASTORE 80
|
||||||
|
#define FASTORE 81
|
||||||
|
#define DASTORE 82
|
||||||
|
#define AASTORE 83
|
||||||
|
#define BASTORE 84
|
||||||
|
#define CASTORE 85
|
||||||
|
#define SASTORE 86
|
||||||
|
#define POP 87
|
||||||
|
#define POP2 88
|
||||||
|
#define DUP 89
|
||||||
|
#define DUP_X1 90
|
||||||
|
#define DUP_X2 91
|
||||||
|
#define DUP2 92
|
||||||
|
#define DUP2_X1 93
|
||||||
|
#define DUP2_X2 94
|
||||||
|
#define SWAP 95
|
||||||
|
#define IADD 96
|
||||||
|
#define LADD 97
|
||||||
|
#define FADD 98
|
||||||
|
#define DADD 99
|
||||||
|
#define ISUB 100
|
||||||
|
#define LSUB 101
|
||||||
|
#define FSUB 102
|
||||||
|
#define DSUB 103
|
||||||
|
#define IMUL 104
|
||||||
|
#define LMUL 105
|
||||||
|
#define FMUL 106
|
||||||
|
#define DMUL 107
|
||||||
|
#define IDIV 108
|
||||||
|
#define LDIV 109
|
||||||
|
#define FDIV 110
|
||||||
|
#define DDIV 111
|
||||||
|
#define IREM 112
|
||||||
|
#define LREM 113
|
||||||
|
#define FREM 114
|
||||||
|
#define DREM 115
|
||||||
|
#define INEG 116
|
||||||
|
#define LNEG 117
|
||||||
|
#define FNEG 118
|
||||||
|
#define DNEG 119
|
||||||
|
#define ISHL 120
|
||||||
|
#define LSHL 121
|
||||||
|
#define ISHR 122
|
||||||
|
#define LSHR 123
|
||||||
|
#define IUSHR 124
|
||||||
|
#define LUSHR 125
|
||||||
|
#define IAND 126
|
||||||
|
#define LAND 127
|
||||||
|
#define IOR 128
|
||||||
|
#define LOR 129
|
||||||
|
#define IXOR 130
|
||||||
|
#define LXOR 131
|
||||||
|
#define IINC 132
|
||||||
|
#define I2L 133
|
||||||
|
#define I2F 134
|
||||||
|
#define I2D 135
|
||||||
|
#define L2I 136
|
||||||
|
#define L2F 137
|
||||||
|
#define L2D 138
|
||||||
|
#define F2I 139
|
||||||
|
#define F2L 140
|
||||||
|
#define F2D 141
|
||||||
|
#define D2I 142
|
||||||
|
#define D2L 143
|
||||||
|
#define D2F 144
|
||||||
|
#define I2B 145
|
||||||
|
#define I2C 146
|
||||||
|
#define I2S 147
|
||||||
|
#define LCMP 148
|
||||||
|
#define FCMPL 149
|
||||||
|
#define FCMPG 150
|
||||||
|
#define DCMPL 151
|
||||||
|
#define DCMPG 152
|
||||||
|
#define IFEQ 153
|
||||||
|
#define IFNE 154
|
||||||
|
#define IFLT 155
|
||||||
|
#define IFGE 156
|
||||||
|
#define IFGT 157
|
||||||
|
#define IFLE 158
|
||||||
|
#define IF_ICMPEQ 159
|
||||||
|
#define IF_ICMPNE 160
|
||||||
|
#define IF_ICMPLT 161
|
||||||
|
#define IF_ICMPGE 162
|
||||||
|
#define IF_ICMPGT 163
|
||||||
|
#define IF_ICMPLE 164
|
||||||
|
#define IF_ACMPEQ 165
|
||||||
|
#define IF_ACMPNE 166
|
||||||
|
#define GOTO 167
|
||||||
|
#define JSR 168
|
||||||
|
#define RET 169
|
||||||
|
#define TABLESWITCH 170
|
||||||
|
#define LOOKUPSWITCH 171
|
||||||
|
#define IRETURN 172
|
||||||
|
#define LRETURN 173
|
||||||
|
#define FRETURN 174
|
||||||
|
#define DRETURN 175
|
||||||
|
#define ARETURN 176
|
||||||
|
#define RETURN 177
|
||||||
|
#define GETSTATIC 178
|
||||||
|
#define PUTSTATIC 179
|
||||||
|
#define GETFIELD 180
|
||||||
|
#define PUTFIELD 181
|
||||||
|
#define INVOKEVIRTUAL 182
|
||||||
|
#define INVOKESPECIAL 183
|
||||||
|
#define INVOKESTATIC 184
|
||||||
|
#define INVOKEINTERFACE 185
|
||||||
|
#define NEW 187
|
||||||
|
#define NEWARRAY 188
|
||||||
|
#define ANEWARRAY 189
|
||||||
|
#define ARRAYLENGTH 190
|
||||||
|
#define ATHROW 191
|
||||||
|
#define CHECKCAST 192
|
||||||
|
#define INSTANCEOF 193
|
||||||
|
#define MONITORENTER 194
|
||||||
|
#define MONITOREXIT 195
|
||||||
|
#define WIDE 196
|
||||||
|
#define MULTIANEWARRAY 197
|
||||||
|
#define IFNULL 198
|
||||||
|
#define IFNONNULL 199
|
||||||
|
#define GOTO_W 200
|
||||||
|
#define JSR_W 201
|
11
preload.js
11
preload.js
@ -1,3 +1,14 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: preload.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
function include(filename)
|
function include(filename)
|
||||||
{
|
{
|
||||||
document.write('<script type="text/javascript" src="' + filename +
|
document.write('<script type="text/javascript" src="' + filename +
|
||||||
|
19
types.js
19
types.js
@ -1,4 +1,14 @@
|
|||||||
|
/* -*- Mode: Javascript -*-
|
||||||
|
* -*- coding: UTF-8 -*-
|
||||||
|
* Copyright (C) 2011 by Artur Ventura
|
||||||
|
*
|
||||||
|
* File: types.js
|
||||||
|
* Time-stamp: Fri Jul 15 02:46:27 2011
|
||||||
|
*
|
||||||
|
* Author: Artur Ventura
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
// Local Variables Types
|
// Local Variables Types
|
||||||
var LOC_VAR_boolean = 0x001;
|
var LOC_VAR_boolean = 0x001;
|
||||||
var LOC_VAR_byte = 0x002;
|
var LOC_VAR_byte = 0x002;
|
||||||
@ -30,10 +40,3 @@ function getRefClass(ref){
|
|||||||
|
|
||||||
var NULL = makeLocalVar(LOC_VAR_reference);
|
var NULL = makeLocalVar(LOC_VAR_reference);
|
||||||
|
|
||||||
function isSubClass(refS,refT){
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function implements(refS,refT){
|
|
||||||
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user