⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kernel.js

📁 《JavaScript王者归来》examples.rar
💻 JS
📖 第 1 页 / 共 2 页
字号:
			{
				classesCodeCache[name] = code;
			}
			this.getClassCode = function(name)
			{
				return classesCodeCache[name];
			}
			this.clear = function ()
			{
				classesCache = {};
				classesCodeCache = {};
			}
			this.getClassesCache = function ()
			{
				return classesCache;
			}
			this.getClassesCodeCache = function ()
			{
				return classesCodeCache;
			}
		});

	/* Set Default Console */
	JSVM.setConsole(new function()
		{
			this.output = function(msg)
			{
				window.alert(msg);
			}
			this.input = function(pmt)
			{
				window.prompt(pmt);
			}
		});

	/* Set Default Compiler */
	JSVM.setCompiler(new function()
		{

			var parsers = {"native" : {parse : function(s){return s;}}};

			this.setParser = function(name, parser)
			{
				parsers[name.toLowerCase()] = parser;
				JSVM.logger.log("JSVM compiler set the '"
					+ name + "' parser succ.");
			}
			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 language = RegExp.$6;
					var parser = this.getParser(language);
					if (parser != null)
					{
						try
						{
							code = parser.parse(code);
						}
						catch(ex)
						{
							throw new Exception(0x001A,
								"kernel.js/JSVM.compiler.compile() error. [code: "
								+ sourceCode +	"]");
						}
					}
					else
					{
						throw new Exception(0x001C,
							"kernel.js/JSVM.compiler.compile() error. the parser for '"
							+ language + "' can't been found.");
					}

				}
				return "(function(){" + code + "})();";
			}
		});

	/* Set Default Engine */
	JSVM.setEngine(new function()
		{
			var engine = this;

			/* default API */

			var _$import = function(name)
			{
				return JSVM.loadClass(name);
			}
			var _$package = function(name)
			{
				engine.definePackage(name);
			}

			this.executor = new function()
			{
				/* Mask these variables */
				var jsre, JSVM, engine, typeOf, isPackage, isClass;
				this.execute = function(code)
				{
					try
					{
						eval(code);
					}
					catch (ex)
					{
						var flag = false;
						var cause = ex.cause;
						while (cause != null)
						{
							if (cause.number ==
								_JSVM_Namespace.deviceNumber * 0x10000 + 0x0012)
							{
								flag = true;
								break;
							}
							cause = cause.cause;
						}
						throw new Exception(0x0012,
							"kernel.js/JSVM.engine.executor.execute() fail. "
							+ (flag ? "" : "[code: " + code + "]") , ex);
					}
				}
			}

			var typeOf = function(name)
			{
				try
				{
					return eval("typeof " + name);
				}
				catch (ex)
				{
					return "undefined";
				}
			}

			/* Check Package */
			var isPackage = function(name)
			{
				return (typeOf(name) == "object" &&
					(eval(name) instanceof Package));
			}
			/* Check Class */
			var isClass = function(name)
			{
				return (typeOf(name) == "object" &&
					(eval(name) instanceof Class));
			}

			var classLock = new function()
			{
				var lockeds = {};
				this.lock = function(name)
				{
					lockeds[name] = 1;
				}
				this.unlock = function(name)
				{
					lockeds[name] = 0;
				}
				this.isLocked = function(name)
				{
					return (lockeds[name] == 1);
				}
			}

			/* Define Class */
			this.defineClass = function(name, code)
			{
				try
				{
					if (classLock.isLocked(name))
					{
						throw new Exception(0x0013,
							"kernel.js/JSVM.engine.defineClass() fail. class: '"
							+ name +"' is locked.", ex);
					}
					classLock.lock(name);
					this.executor.execute(code);
					eval("var c=eval(name);c.prototype"
						+ ".$class=c;c.$name=name;");
					return c;
				}
				catch (ex)
				{
					throw new Exception(0x001E,
						"kernel.js/JSVM.engine.defineClass() fail.", ex);
				}
				finally
				{
					classLock.unlock(name);
				}
			}

			/* Define Package */
			this.definePackage = function(name)
			{
				if (isPackage(name))
				{
					return;
				}
				if (typeOf(name) == "undefined")
				{
					var idx = name.lastIndexOf(".");
					if (idx > -1)
					{
						this.definePackage(name.substring(0, idx));
					}
					return eval("window." + name
						+	"=new Package(name);");
				}
				throw new Exception(0x0014,
					"kernel.js/JSVM.engine.definePackage() fail. {'"
						+ name + "' has been defined.}");
			}
		});

	/* Set default classloader */
	JSVM.setClassloader(new function()
		{

		/*** private properties begin ***/
			var tmp, ex;

			var classResourceBases = [];
			var libResources = [];

			var classHome = ((tmp = jsre.config.getParameter("class_home"))	== null) ?
				(jsre.jsvmHome + "/classes") : tmp.replace("${jsvmHome}", jsre.jsvmHome);
			var libHome = ((tmp = jsre.config.getParameter("lib_home")) == null) ?
				(jsre.jsvmHome + "/lib") : tmp.replace("${jsvmHome}", jsre.jsvmHome);

			var logger = JSVM.logger;

			var cache = {
					"dict" : {},
					"getClass" : function(name)	{return this.dict[name];},
					"putClass" : function(name, code) {this.dict[name] = code;}
				};

		/*** private properties end ***/

		/*** ResourceLoader-Component Begin ***/

			var resourceLoader = new function()
			{
				this.loadTxtResource = function(src)
				{
					try
					{
						var xmlHttp = (jsre.navigator == "ie") ?
							new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
						xmlHttp.open("GET", src, false);
						xmlHttp.send(null);
						var stus = xmlHttp.status;
						if (stus == 200 || stus == 0 || stus == 304)
						{
							return xmlHttp.responseText;
						}
					}
					catch (ex)
					{
						throw new Exception(0x0021,
							"ie.js/ResourceLoader/loadTxtResource(String): Can't load Resource [src:"
							+ src	+ "] {XmlHttp.send() Error:"
							+ ex.getMessage().replace(/\r\n$/, "")
							+ "}", ex);
					}
					finally
					{
						xmlHttp = null;
					}
					throw new Exception(0x0021,
						"ie.js/ResourceLoader/loadTxtResource(String): Can't load Resource [src:"
						+ src	+ "] {HTTP-STATUS:"
						+ stus + "}", null);
				}
			}

		/*** ResourceLoader-Component End ***/


		/*** Private Methods Begin ***/

			var loadLibFromObject = function(obj)
			{
				try
				{
					var entity = obj.entity;
					for(var c in entity)
					{
						cache.putClass(c, entity[c]);
					}
				}
				catch (ex)
				{
					throw new Exception(0x002E,
						"moz.js/Classloader:loadLibFromObject(Object): fail. [obj:"
						+ obj	+ "]", ex);
				}
			}

			var loadScriptLib = function(src)
			{
				document.write("<script language=\"javascript\" src=\""
					+ ((/^(\.|\\|\/|(\w){2,8}:)/.test(src)) ?	src : (libHome + "/" + src))
					+ "\"></script>");
			}

		/*** Private Methods End ***/


		/*** Public Methods Begin ***/

			/**
			 * load class from server or other
			 * @param name class name
			 */
			this.loadClassSource = function(name)
			{
				var err;
				var classDirs = [classHome].concat(
					classResourceBases);
				for(var i = 0; i < classDirs.length; i++)
				{
					var path = classDirs[i] + "/"
						+ name.replace(/\./gi,"/") + ".jsc";
					try
					{
						return resourceLoader.loadTxtResource(path);
					}
					catch (ex)
					{
						err = ex;
						if ((ex instanceof Exception)
							&& (ex.number & 0x0000FFFF) == 0x0021)
						{
							continue;
						}
					}
				}
				throw new Exception(0x0024,
					"ie.js/Classloader/loadClassSource(String): Can't load ["
						+ name + "] Class Resource.", err);
			}


			/* Classloader initialize load some .jsr resource  */

			this.initialize = function()
			{
				for (var i = 0; i < libResources.length; i++)
				{
					this.loadLib(libResources[i]);
				}
			}

			/**
			 * load class
			 * @param name class name
			 */
			this.loadClass = function(name)
			{
				try
				{
					var code = cache.getClass(name);
					if (null != code)
					{
						return code;
					}
					code = this.loadClassSource(name);
					if (code != null)
					{
						cache.putClass(name, code);
					}
					return code;
				}
				catch (ex)
				{
					throw new Exception(0x002B,
						"ie.js/Classloader.loadClass(String): Class: '"
						+ name + "' NotFound.", ex);
				}
			}

			/**
			 * load package
			 * @param _packagename package name
			 */
			this.loadPackage = function(name)
			{
				throw new Exception(0x001B,
					"ie.js/Classloader.loadPackage(String) not implemented.");
			}

			this.loadLib = function (arg)
			{
				try
				{
					switch (typeof(arg))
					{
						case "string" :	loadScriptLib(arg);	break;
						case "object" : loadLibFromObject(arg);	break;
					}
				}
				catch (ex)
				{
					logger.log(new Exception(0x002C,
						"ie.js/Classloader.loadLib(arg): fail [arg:"
						+ arg	+ "]", ex));
				}
			}

			this.setClasspath = function(cp)
			{
				if (cp != null && cp != "")
				{
					var cps = cp.replace(/;$/, "").split(";");
					for (var i = 0; i < cps.length; i++)
					{
						if (/\.(\w)+$/.test(cps[i].toLowerCase()))
						{
							var l = libResources.length;
							libResources[l++] = cps[i];
						}
						else
						{
							var l = classResourceBases.length;
							classResourceBases[l++] = cps[i].replace(/\/$/, "");
						}
					}
				}
			}

			this.setClassHome = function(ch)
			{
				classHome = ch;
			}
			this.getClassHome = function()
			{
				return classHome;
			}
			this.setLibHome = function(lh)
			{
				libHome = lh;
			}
			this.getLibHome = function()
			{
				return libHome;
			}
			this.setLogger = function(lg)
			{
				logger = lg;
			}

			/* set classpath */
			this.setClasspath(jsre.classpath.replace("${jsvmHome}",	jsre.jsvmHome));
			this.initialize();

		});

});

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -