📄 kernel.js
字号:
_JSVM_Namespace.runtimeEnvironment.loadModule("kernel",function(){var jsre=_JSVM_Namespace.runtimeEnvironment,ex;var logger=jsre.logger;if(jsre.JSVM!=null){throw "kernel.js/JSVM already exist!";};var Class=_JSVM_Namespace.kernel.Class=Function;Class.forName=function(name){return jsre.JSVM.loadClass(name);};Class.create=function(name,constructor,superClass){var clazz=constructor||new Class();clazz.$extends(superClass||_JSVM_Namespace.kernel.Object);clazz.$name=name;return clazz;};Class.prototype.$super=null;Class.prototype.$class=Class;Class.prototype.$window=window;Class.prototype.$name="Class";Class.prototype.newInstance=function(){for(var a=[],i=0,l=arguments.length;i<l;i++){a.push("arguments["+i+"]");};return eval("new this("+a.join(",")+")");};Class.prototype.getName=function(){return this.$name;};Class.prototype.getSuperclass=function(){return this.$super;};Class.prototype.$extends=function(clazz){try{if(typeof((typeof(clazz)!="string")?clazz:(clazz=Class.forName(clazz)))!="function"){throw new Exception("Class.$extends() Error: the super "+"class '"+clazz+"' is invalid.");};var p=this.prototype=new clazz();p.$class=p.constructor=this;this.$super=clazz;return p;}catch(ex){throw new Exception("class.$extends() Error.",ex);}};var JObject=_JSVM_Namespace.kernel.Object=function(){};JObject.$name="Object";JObject.prototype.$class=JObject;JObject.prototype.$___hc=0x0;JObject.prototype.window=window;JObject.prototype.getClass=function(){return this.$class;};JObject.prototype.isAlive=function(){return(this.window.closed==false);};JObject.prototype.hashCode=function(){return(this.$___hc!=0)?this.$___hc:(this.$___hc=(0x10000000+Math.round(Math.random()*0x10000000)));};JObject.prototype.toString=function(){return("[Object "+this.getClass().getName()+"@"+this.hashCode().toString(16)+"]");};JObject.prototype.instanceOf=function(c){return(this instanceof(typeof(c)=="string"?Class.forName(c):c));};var Package=_JSVM_Namespace.kernel.Package=Class.create("Package",function(name){this.getName=function(){return name;};this.getChildClass=function(clzname){return Class.forName(name+"."+clzname);}});var Exception=_JSVM_Namespace.kernel.Exception=Class.create("Exception",function(message,cause){this.number=_JSVM_Namespace.deviceNumber*0x10000+0x1;this.message=message||"no message";this.cause=cause;});Exception.prototype.getName=function(){return this.getClass().getName();};Exception.prototype.getMessage=function(){return this.message;};Exception.prototype.getCause=function(){return this.cause;};Exception.prototype.toString=function(){return this.getName()+":"+this.getMessage();};Exception.prototype.printStackTrace=function(printer){var s=this.toString();var e=this.cause;while(e!=null){s+="\r\n\tat ";if(e instanceof Error){s+="Error:"+e.number+","+e.message;}else{s+=e.toString();};e=e.cause;};if(!printer){jsre.JSVM.console.write(s+"\r\n");}else{printer.println(s);}};_JSVM_Namespace.kernel.JSVM_V2_04_060820=function(){if(this==window){return new _JSVM_Namespace.kernel.JSVM_V2_04_060820();};this.version="2.06";var classloader=new function(){var classHome=jsre.jsvmHome+"/classes";var extName=jsre.config.getParameter("extension-name")||"class.js";var libHome=jsre.jsvmHome+"/lib";this.findClass=function(name){return jsre.resource.get("$class-code{"+name+"}");};this.putClass=function(name,code){jsre.resource.put("$class-code{"+name+"}",code);};var resourceLoader={loadResource:function(src){try{var xmlHttp=jsre.getXMLHttpRequest();xmlHttp.open("GET",src,false);xmlHttp.send(null);var st=xmlHttp.status;if(st==200||st==0||st==304){return xmlHttp.responseText;}}catch(ex){throw new Exception("kernel.js/Classloader.loadResource()"+" Load failed, location: ["+src+"]",ex);}finally{xmlHttp=null;};throw new Exception("kernel.js/Classloader.loadResource()"+" Load failed, location: ["+src+"],"+" HTTP-STATUS: ["+st+"]",null);}};var loadObjectLibrary=function(obj){try{logger.log("JSVM/Classloader load libaray: '"+obj.manifest.name+"[v"+obj.manifest.version+"]'");var entity=obj.entity;for(var c in entity){classloader.putClass(c,entity[c]);}}catch(ex){throw new Exception("kernel.js/Classloader:loadObjectLibrary()"+" Load failed: ["+obj+"]",ex);}};var setLoadedLibrary=function(lib){jsre.resource.put("$loaded-flag{"+lib+"}","true");};var isLoadedLibrary=function(lib){return jsre.resource.get("$loaded-flag{"+lib+"}")=="true";};var loadScriptLibrary=function(src){if(!isLoadedLibrary(src)){setLoadedLibrary(src);logger.log("JSVM/Classloader start loading srcipt-libaray: '"+src+"'");document.write("<script language=\"javascript\" src=\""+((/^(\.|\\|\/|(\w){2,8}:)/.test(src))?src:(libHome+"/"+src))+"\"></script>");}};this.loadClassSource=function(name){return resourceLoader.loadResource(classHome+"/"+name.replace(/\./gi,"/")+"."+extName);};this.loadClass=function(name){if(name==null){throw new Exception("kernel.js/Classloader.loadClass()"+" name is null.");};try{var code=this.findClass(name);if(null!=code){return code;};code=this.loadClassSource(name);if(code!=null){this.putClass(name,code);};return code;}catch(ex){throw new Exception("kernel.js/Classloader.loadClass()"+" Not found class: "+name,ex);}};this.loadPackage=function(name){throw new Exception("kernel.js/Classloader.loadPackage()"+" Not implemented.");};this.loadLib=function(arg){try{if(typeof(arg)=="string"){loadScriptLibrary(arg);}else{loadObjectLibrary(arg);}}catch(ex){var err=new Exception("kernel.js/Classloader.loadLib()"+" Error argument: ["+arg+"]",ex);logger.log(err);throw err;}};this.setClasspath=function(cp){if(cp!=null&&cp!=""){var cps=cp.replace(/;$/,"").split(";");for(var i=0;i<cps.length;i++){this.loadLib(cps[i]);}}};this.setClassHome=function(arg){classHome=arg;};this.getClassHome=function(){return classHome;};this.setLibHome=function(arg){libHome=arg;};this.getLibHome=function(){return libHome;}};this.setClassloader=function(arg){classloader=arg;};this.getClassloader=function(){return classloader;};this.console={"write":function(msg){window.alert(msg);},"read":function(pmt){window.prompt(pmt);}};this.setConsole=function(arg){this.console=arg;};var container=new function(){var classes={};this.putClass=function(name,entity){classes[name]=entity;};this.getClass=function(name){return classes[name];};var classCodes={};this.putClassCode=function(name,code){classCodes[name]=code;};this.getClassCode=function(name){return classCodes[name];};this.clear=function(){classes={};classCodes={};};this.getClasses=function(){var o={},p;for(p in classes){o[p]=classes[p];};return o;};this.getClassCodes=function(){var o={},p;for(p in classCodes){o[p]=classCodes[p];};return o;}};this.setContainer=function(arg){container=arg;};this.getContainer=function(){return container;};var compiler=new function(){var parsers={"native":{parse:function(s){return s;}}};this.setParser=function(name,parser){parsers[name.toLowerCase()]=parser;};this.getParser=function(name){return parsers[name.toLowerCase()];};var regexp_lang=/^(\s*)#( *)(language)( *):( *)(\S+)(\s*)/;this.compile=function(sourceCode){var code=sourceCode;if(regexp_lang.test(code)){code=code.replace(regexp_lang,"");var lang=RegExp.$6;var parser=this.getParser(lang);if(parser!=null){try{code=parser.parse(code);}catch(ex){throw new Exception("kernel.js/JSVM.compiler.compile()"+" Parse failed: ["+sourceCode+"]");}}else{throw new Exception("kernel.js/JSVM.compiler.compile()"+" Not found parser: '"+lang+"'.");}};return code;}};this.setCompiler=function(arg){compiler=arg;};this.getCompiler=function(){return compiler;};var engine=new function(){var engine=this;var _$import=function(name){return JSVM.loadClass(name);},$import=_$import;var _$package=function(name){engine.definePackage(name);},$package=_$package;this.executor=new function(){var jsre,JSVM,engine,typeOf,isPackage,isClass;var ExecuteException=Class.create("ExecuteException",function(){return this.getSuperclass().apply(this,arguments);},Exception);this.execute=function(code){try{(function(){eval(code)})();}catch(ex){var flag=false;var cause=ex.cause;while(cause!=null){if(cause instanceof ExecuteException){flag=true;break;};cause=cause.cause;};throw new ExecuteException("kernel.js/executor.execute() fail. "+(flag?"":"[code: "+code+"]"),ex);}}};var typeOf=function(name){try{return eval("typeof "+name);}catch(ex){return "undefined";}};var isPackage=function(name){return(typeOf(name)=="object");};var isClass=function(name){return(typeOf(name)!="undefined");};var lockeds={};var isLocked=function(name){return(lockeds[name]==1);};var lock=function(name){lockeds[name]=1;};var unlock=function(name){lockeds[name]=0;};this.defineClass=function(name,code){try{if(isLocked(name)){throw new Exception("kernel.js/JSVM.engine.defineClass()"+" Class: '"+name+"' is locked.");};lock(name);this.executor.execute(code);var c=eval(name);if(typeof(c)=="function"){c.prototype.$class=c;c.$name=name;}else{logger.log("JSVM Warn: the class '"+name+"' is not a function instance !");};return c;}catch(ex){throw new Exception("kernel.js/JSVM.engine.defineClass() Error.",ex);}finally{unlock(name);}};this.definePackage=function(name){if(isPackage(name)||typeOf(name)=="object"){return;}else if(typeOf(name)=="undefined"){var idx=name.lastIndexOf(".");if(idx>-1){this.definePackage(name.substring(0,idx));};eval("window."+name+"=new Package(name);");}else{throw new Exception("kernel.js/JSVM.engine.definePackage()"+" Var '"+name+"' always exists.");}}};this.setEngine=function(o){engine=o;};this.getEngine=function(){return engine;};this.loadClass=function(name){try{var clazz=container.getClass(name);if(clazz==null){try{var obj=eval(name),type=typeof(obj);if(type=="object"||type=="function"){logger.log("warn: the class '"+name+"' already exists outside of JSVM container.");return obj;}}catch(ex){};var code=container.getClassCode(name);if(!code){code=classloader.loadClass(name);code=compiler.compile(code);container.putClassCode(name,code);};clazz=engine.defineClass(name,code);container.putClass(name,clazz);};return clazz;}catch(ex){var err=new Exception("kernel.js/JSVM.loadClass()"+" Not found class: "+name,ex);logger.log(err);throw err;}};this.loadPackage=function(name){var err=new Exception("kernel.js/JSVM.loadPackage() Not implemented.");logger.log(err);throw err;};this.initialize=function(){classloader.setClasspath(jsre.classpath);};this.destroy=function(){container.clear();}};window.JSVM=jsre.JSVM=new _JSVM_Namespace.kernel.JSVM_V2_04_060820();if(jsre.state==4){JSVM.initialize();};window.Class=Class;window._import=window.$import=function(name){try{var clazz=JSVM.loadClass(name);var shortName=name.replace(/(.*)\./,"");if("undefined"==typeof(window[shortName])){window[shortName]=clazz;}}catch(ex){ex.printStackTrace();throw ex;}}});
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -