3546759833
* constructor parameters * named constructors * initializer lists * superclasses and super constructor calls
55 lines
1.5 KiB
JavaScript
55 lines
1.5 KiB
JavaScript
var dart_runtime;
|
|
(function (dart_runtime) {
|
|
// Adapted from Angular.js
|
|
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
|
|
var FN_ARG_SPLIT = /,/;
|
|
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
|
|
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
|
|
|
|
function formalParameterList(fn) {
|
|
var fnText,argDecl;
|
|
var args=[];
|
|
fnText = fn.toString().replace(STRIP_COMMENTS, '');
|
|
argDecl = fnText.match(FN_ARGS);
|
|
|
|
var r = argDecl[1].split(FN_ARG_SPLIT);
|
|
for(var a in r){
|
|
var arg = r[a];
|
|
arg.replace(FN_ARG, function(all, underscore, name){
|
|
args.push(name);
|
|
});
|
|
}
|
|
return args;
|
|
}
|
|
|
|
function dload(obj, field) {
|
|
if (!(field in obj)) {
|
|
throw new dart.core.NoSuchMethodError(obj, field);
|
|
}
|
|
return obj[field];
|
|
}
|
|
dart_runtime.dload = dload;
|
|
|
|
function dinvokef(f, args) {
|
|
var formals = formalParameterList(f);
|
|
// TODO(vsm): Type check args! We need to encode sufficient type info on f.
|
|
if (formals.length < args.length) {
|
|
throw new dart.core.NoSuchMethodError(f, args);
|
|
} else if (formals.length > args.length) {
|
|
for (var i = args.length; i < formals.length; ++i) {
|
|
if (formals[i].indexOf("opt$") != 0)
|
|
throw new dart.core.NoSuchMethodError(f, args);
|
|
}
|
|
}
|
|
return f.apply(void 0, args);
|
|
}
|
|
dart_runtime.dinvokef = dinvokef;
|
|
|
|
function dextend(sub, _super) {
|
|
sub.prototype = Object.create(_super.prototype);
|
|
sub.prototype.constructor = sub;
|
|
}
|
|
dart_runtime.dextend = dextend;
|
|
|
|
})(dart_runtime || (dart_runtime = {}));
|