зеркало из https://github.com/mozilla/pluotsorbet.git
fix signature and add inherits, use Function() instead of eval
This commit is contained in:
Родитель
fbd385b26e
Коммит
01f95592c7
16
classes.js
16
classes.js
|
@ -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;
|
||||
}
|
||||
|
|
92
signature.js
92
signature.js
|
@ -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
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),
|
||||
|
|
Загрузка…
Ссылка в новой задаче