Files
sdk/pkg/dev_compiler/runtime/dart_runtime.js
T
Vijay Menon 8522221df4 Initial codegen skeleton
Invoke with:
> dart bin/checker.dart -o out tests/fieldtest.dart

Run with (node.js installed):
> node runtime/run.js runtime/dart_runtime.js runtime/dart_core.js out/fieldtest/fieldtest.dart.js fieldtest

Here's the output of fieldtest.dart.js:

var fieldtest;
(function (fieldtest) {
  // Class A
  var A = (function () {
    var _initializer = (function (_this) {
      _this.x = 42;
    });
    function A() {
      _initializer(this);
    }
    return A;
  })();
  fieldtest.A = A;

  // Function foo: (A) → void
  function foo(a) {
    dart_core.print(a.x);
  }
  fieldtest.foo = foo;

  // Function bar: (dynamic) → void
  function bar(a) {
    dart_core.print(dart_runtime.dload(a, "x"));
  }
  fieldtest.bar = bar;

  // Function main: () → void
  function main() {
    var a = new A();
    fieldtest.foo(a);
    fieldtest.bar(a);
  }
  fieldtest.main = main;

})(fieldtest || (fieldtest = {}));

R=sigmund@google.com

Review URL: https://chromereviews.googleplex.com/119897013
2014-11-20 12:15:55 -08:00

48 lines
1.4 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;
})(dart_runtime || (dart_runtime = {}));