-
Thomas Wood authoredThomas Wood authored
interpreter.js 1.50 KiB
"use strict";
var esprima = require('esprima');
var esprimaToAST = require('../esprima-to-ast.js').esprimaToAST;
var JsInterpreter = require('../generator/tests/jsref/assembly.js');
require('./parser.js');
var test262tests = require('./helpers/test262.js');
// Stub logging functions
['ctx_empty', 'ctx_push', 'log_event'].forEach(f => global[f] = function(){})
var parse = function(source) {
return esprimaToAST(esprima.parse(source, {loc: true, range: true}), source);
}
var run = function(program) {
return JsInterpreter.run_javascript(program);
};
// Functions to run multiple programs in the same heap
// Useful for correctly loading the test262 prelude before the testcase
var run_multiple = function(programs) {
if(programs.length < 1) { throw "No programs" }
var firstResult = run(programs.shift());
return programs.reduce(JsInterpreter.run_javascript_from_result, firstResult);
};
var parse_and_run_multiple = function(sources) {
var programs = sources.map(parse);
return run_multiple(programs);
}
Error.stackTraceLimit = 30;
test262tests.push(args => {
it("interprets", function() {
try {
var ast = parse(args.source);
} catch(e) { return; }
var result = JsInterpreter.run_javascript(ast);
});
});
test262tests.push(args => {
it.skip("executes correctly");
// TODO
// This test should be combined with the interprets test
// It also needs to:
// * Load the test262 prelude functions
// * Execute the test in this heap
// * Check the result of the testcase
});