fix signature and add inherits, use Function() instead of eval

This commit is contained in:
Andreas Gal 2014-07-06 12:14:31 -07:00
Родитель fbd385b26e
Коммит 01f95592c7
3 изменённых файлов: 67 добавлений и 54 удалений

Просмотреть файл

@ -81,13 +81,15 @@ Classes.prototype.loadJSFile = function(fileName) {
var bytes = this.loadFile(fileName);
if (!bytes)
return null;
var src =
"(function () {\n" +
" var module = {};\n" +
util.decodeUtf8(bytes) +
" return module.exports;\n" +
"})();";
var classArea = eval(src);
var self = this;
var fun = new Function("module", "require", "util", util.decodeUtf8(bytes));
var module = {};
function require(className) {
console.log("className=" + className);
return self.getClass(className);
}
fun(module, require, util);
var classArea = module.exports;
this.classes[classArea.getClassName()] = classArea;
return classArea;
}

Просмотреть файл

@ -3,7 +3,9 @@
'use strict';
var TYPE = {
var Signature = {};
Signature.TYPE = {
boolean: 'Z',
byte: 'B',
char: 'C',
@ -25,55 +27,51 @@ var TYPE = {
}
};
var _parse = function(part) {
var res = [];
if (part != '') {
var isArray = false;
var pos = 0;
while (pos < part.length) {
switch(part[pos]) {
case TYPE.boolean:
case TYPE.byte:
case TYPE.char:
case TYPE.double:
case TYPE.float:
case TYPE.int:
case TYPE.long:
case TYPE.short:
res.push( { type: TYPE.toString(part[pos]), isArray: isArray } );
isArray = false;
break;
case TYPE.object:
var className = '';
while (part[++pos] !== ';') {
className += part[pos];
}
res.push( { type: "object", isArray: isArray, className: className } );
isArray = false;
break;
case TYPE.array:
isArray = true;
break;
Signature.parse = (function () {
function _parse(part) {
var res = [];
if (part != '') {
var isArray = false;
var pos = 0;
while (pos < part.length) {
switch(part[pos]) {
case TYPE.boolean:
case TYPE.byte:
case TYPE.char:
case TYPE.double:
case TYPE.float:
case TYPE.int:
case TYPE.long:
case TYPE.short:
res.push( { type: TYPE.toString(part[pos]), isArray: isArray } );
isArray = false;
break;
case TYPE.object:
var className = '';
while (part[++pos] !== ';') {
className += part[pos];
}
res.push( { type: "object", isArray: isArray, className: className } );
isArray = false;
break;
case TYPE.array:
isArray = true;
break;
}
pos++;
}
pos++;
}
return res;
}
return res;
}
var parse = module.exports.parse = function(s) {
var IN = s.split(')')[0].substr(1);
var OUT = s.split(')')[1];
return function(s) {
var IN = s.split(')')[0].substr(1);
var OUT = s.split(')')[1];
return {
IN: _parse(IN),
OUT: _parse(OUT),
toString: new Function(util.format("return \"%s\"", s))
return {
IN: _parse(IN),
OUT: _parse(OUT),
toString: new Function(util.format("return \"%s\"", s))
};
};
};
})();

13
util.js
Просмотреть файл

@ -47,6 +47,18 @@ var util = (function () {
return "" + v;
}
function inherits(ctor, superCtor) {
ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
};
var Utf8TextDecoder;
function decodeUtf8(arrayBuffer) {
@ -58,6 +70,7 @@ var util = (function () {
return {
format: format,
inherits: inherits,
debug: console.info.bind(console),
error: console.error.bind(console),
info: console.info.bind(console),