BicaVM/cpu.js

55 lines
1.6 KiB
JavaScript
Raw Normal View History

2011-07-04 18:20:27 +01:00
function canonicalName(ref){
return ref.str.replace(/\//g,".")
}
var JVM = function(params,args){
this.heap = {};
this.params = params;
this.args = args;
this.method_area = {};
this.level = 0;
this.classpath = params.classes_to_load;
this.verifyAndLoadClass = function(classFile){
if (!this.method_area[classFile]){
// log(">>>>>> " + classFile);
var loaded_class = LoadClassFile(classFile);
var className = loaded_class.this_class.name_ref.str.replace(/\//g,".");
this.method_area[className] = loaded_class;
var superClass;
if(loaded_class.super_class){
superClass = canonicalName(loaded_class.super_class.name_ref);
}else{
superClass = "java.lang.Object";
}
this.verifyAndLoadClass(superClass);
var that = this;
loaded_class.constantPool.each(function(constant){
if (constant.name_ref.str.charAt(0) == "[") {
return;
}
that.verifyAndLoadClass(canonicalName(constant.name_ref));
}, CONSTANT_Class);
log("[Loaded " + className + " from runtime/" + classFile + "]");
}
};
this.run = function (){
var mainClass = this.args[0];
this.verifyAndLoadClass(mainClass);
};
};
var JVMThread = function(){
this.pc = null;
this.stack = [];
}
var JVMFrame = function(){
this.local_variables = [];
this.operand_stack = [];
}