Bug 580882. Update to allow Narcissus to work within a browser. r=gal.

This commit is contained in:
Tom Austin 2010-08-12 17:00:12 -07:00
parent e85bb5d024
commit 15c65933e8
4 changed files with 182 additions and 289 deletions

View File

@ -45,7 +45,8 @@
*/
Narcissus = {
options: { version: 185 }
options: { version: 185 },
hostGlobal: this
};
Narcissus.definitions = (function() {
@ -189,6 +190,76 @@ Narcissus.definitions = (function() {
Object.defineProperty(obj, prop, { value: val, writable: !readOnly, configurable: !dontDelete, enumerable: !dontEnum });
}
// Returns true if fn is a native function. (Note: SpiderMonkey specific.)
function isNativeCode(fn) {
// Relies on the toString method to identify native code.
return ((typeof fn) === "function") && fn.toString().match(/\[native code\]/);
}
function getPropertyDescriptor(obj, name) {
while (obj) {
if (({}).hasOwnProperty.call(obj, name))
return Object.getOwnPropertyDescriptor(obj, name);
obj = Object.getPrototypeOf(obj);
}
}
function getOwnProperties(obj) {
var map = {};
for (var name in Object.getOwnPropertyNames(obj))
map[name] = Object.getOwnPropertyDescriptor(obj, name);
return map;
}
function makePassthruHandler(obj) {
// Handler copied from
// http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy%20object#examplea_no-op_forwarding_proxy
return {
getOwnPropertyDescriptor: function(name) {
var desc = Object.getOwnPropertyDescriptor(obj, name);
// a trapping proxy's properties must always be configurable
desc.configurable = true;
return desc;
},
getPropertyDescriptor: function(name) {
var desc = getPropertyDescriptor(obj, name);
// a trapping proxy's properties must always be configurable
desc.configurable = true;
return desc;
},
getOwnPropertyNames: function() {
return Object.getOwnPropertyNames(obj);
},
defineProperty: function(name, desc) {
Object.defineProperty(obj, name, desc);
},
delete: function(name) { return delete obj[name]; },
fix: function() {
if (Object.isFrozen(obj)) {
return getOwnProperties(obj);
}
// As long as obj is not frozen, the proxy won't allow itself to be fixed.
return undefined; // will cause a TypeError to be thrown
},
has: function(name) { return name in obj; },
hasOwn: function(name) { return ({}).hasOwnProperty.call(obj, name); },
get: function(receiver, name) { return obj[name]; },
// bad behavior when set fails in non-strict mode
set: function(receiver, name, val) { obj[name] = val; return true; },
enumerate: function() {
var result = [];
for (name in obj) { result.push(name); };
return result;
},
keys: function() { return Object.keys(obj); }
};
}
return {
tokens: tokens,
opTypeNames: opTypeNames,
@ -197,7 +268,9 @@ Narcissus.definitions = (function() {
consts: consts,
assignOps: assignOps,
defineGetter: defineGetter,
defineProperty: defineProperty
defineProperty: defineProperty,
isNativeCode: isNativeCode,
makePassthruHandler: makePassthruHandler
};
}());

View File

@ -52,6 +52,7 @@ Narcissus.interpreter = (function() {
var parser = Narcissus.parser;
var definitions = Narcissus.definitions;
var hostGlobal = Narcissus.hostGlobal;
// Set constants in the local scope.
eval(definitions.consts);
@ -67,7 +68,8 @@ Narcissus.interpreter = (function() {
return re.test(e.toString());
}
var global = {
// The underlying global object for narcissus.
var narcissusGlobal = {
// Value properties.
NaN: NaN, Infinity: Infinity, undefined: undefined,
@ -96,15 +98,9 @@ Narcissus.interpreter = (function() {
throw THROW;
}
},
parseInt: parseInt, parseFloat: parseFloat,
isNaN: isNaN, isFinite: isFinite,
decodeURI: decodeURI, encodeURI: encodeURI,
decodeURIComponent: decodeURIComponent,
encodeURIComponent: encodeURIComponent,
// Class constructors. Where ECMA-262 requires C.length === 1, we declare
// a dummy formal parameter.
Object: Object,
Function: function Function(dummy) {
var p = "", b = "", n = arguments.length;
if (n) {
@ -143,27 +139,64 @@ Narcissus.interpreter = (function() {
}
return s;
},
Boolean: Boolean, Number: Number, Date: Date, RegExp: RegExp,
Error: Error, EvalError: EvalError, RangeError: RangeError,
ReferenceError: ReferenceError, SyntaxError: SyntaxError,
TypeError: TypeError, URIError: URIError,
// Other properties.
Math: Math,
//Don't want to proxy RegExp or some features won't work
RegExp: RegExp,
// Extensions to ECMA.
snarf: snarf, evaluate: evaluate,
load: function load(s) {
if (typeof s !== "string")
return s;
evaluate(snarf(s), s, 1)
},
print: print,
version: function() { return Narcissus.options.version; },
quit: function() { throw END; }
};
// Create global handler with needed modifications.
var globalHandler = definitions.makePassthruHandler(narcissusGlobal);
globalHandler.has = function(name) {
if (name in narcissusGlobal) { return true; }
// Hide Narcissus implementation code.
else if (name === "Narcissus") { return false; }
else { return (name in hostGlobal); }
};
globalHandler.get = function(receiver, name) {
if (narcissusGlobal.hasOwnProperty(name)) {
return narcissusGlobal[name];
}
var globalFun = hostGlobal[name];
if (definitions.isNativeCode(globalFun)) {
// Enables native browser functions like 'alert' to work correctly.
return Proxy.createFunction(
definitions.makePassthruHandler(globalFun),
function() { return globalFun.apply(hostGlobal, arguments); },
function() {
var a = arguments;
switch (a.length) {
case 0:
return new globalFun();
case 1:
return new globalFun(a[0]);
case 2:
return new globalFun(a[0], a[1]);
case 3:
return new globalFun(a[0], a[1], a[2]);
default:
var argStr = "";
for (var i=0; i<a.length; i++) {
argStr += 'a[' + i + '],';
}
return eval('new ' + name + '(' + argStr.slice(0,-1) + ');');
}
});
}
else { return globalFun; };
};
var global = Proxy.create(globalHandler);
// Helper to avoid Object.prototype.hasOwnProperty polluting scope objects.
function hasDirectProperty(o, p) {
return Object.prototype.hasOwnProperty.call(o, p);
@ -829,71 +862,10 @@ Narcissus.interpreter = (function() {
definitions.defineProperty(proto, "constructor", this, false, false, true);
}
function getPropertyDescriptor(obj, name) {
while (obj) {
if (({}).hasOwnProperty.call(obj, name))
return Object.getOwnPropertyDescriptor(obj, name);
obj = Object.getPrototypeOf(obj);
}
}
function getOwnProperties(obj) {
var map = {};
for (var name in Object.getOwnPropertyNames(obj))
map[name] = Object.getOwnPropertyDescriptor(obj, name);
return map;
}
// Returns a new function wrapped with a Proxy.
function newFunction(n, x) {
var fobj = new FunctionObject(n, x.scope);
// Handler copied from
// http://wiki.ecmascript.org/doku.php?id=harmony:proxies&s=proxy%20object#examplea_no-op_forwarding_proxy
var handler = {
getOwnPropertyDescriptor: function(name) {
var desc = Object.getOwnPropertyDescriptor(fobj, name);
// a trapping proxy's properties must always be configurable
desc.configurable = true;
return desc;
},
getPropertyDescriptor: function(name) {
var desc = getPropertyDescriptor(fobj, name);
// a trapping proxy's properties must always be configurable
desc.configurable = true;
return desc;
},
getOwnPropertyNames: function() {
return Object.getOwnPropertyNames(fobj);
},
defineProperty: function(name, desc) {
Object.defineProperty(fobj, name, desc);
},
delete: function(name) { return delete fobj[name]; },
fix: function() {
if (Object.isFrozen(fobj)) {
return getOwnProperties(fobj);
}
// As long as fobj is not frozen, the proxy won't allow itself to be fixed.
return undefined; // will cause a TypeError to be thrown
},
has: function(name) { return name in fobj; },
hasOwn: function(name) { return ({}).hasOwnProperty.call(fobj, name); },
get: function(receiver, name) { return fobj[name]; },
// bad behavior when set fails in non-strict mode
set: function(receiver, name, val) { fobj[name] = val; return true; },
enumerate: function() {
var result = [];
for (name in fobj) { result.push(name); };
return result;
},
keys: function() { return Object.keys(fobj); }
};
var handler = definitions.makePassthruHandler(fobj);
var p = Proxy.createFunction(handler,
function() { return fobj.__call__(this, arguments, x); },
function() { return fobj.__construct__(arguments, x); });
@ -1118,6 +1090,7 @@ Narcissus.interpreter = (function() {
}
return {
global: global,
evaluate: evaluate,
repl: repl
};

View File

@ -54,8 +54,7 @@ Narcissus.parser = (function() {
/*
* The vanilla AST builder.
*/
VanillaBuilder = function VanillaBuilder() {
function VanillaBuilder() {
}
VanillaBuilder.prototype = {

View File

@ -15,7 +15,6 @@ e4x/Expressions/11.2.2.js
e4x/Expressions/11.2.3.js
e4x/Expressions/11.2.4.js
e4x/Expressions/11.3.1.js
e4x/Expressions/11.3.2.js
e4x/Expressions/11.4.1.js
e4x/Expressions/11.5.1.js
e4x/Expressions/11.6.1.js
@ -29,22 +28,15 @@ e4x/Expressions/regress-496113.js
e4x/GC/regress-280844-1.js
e4x/GC/regress-280844-2.js
e4x/GC/regress-292455.js
e4x/GC/regress-313952-01.js
e4x/GC/regress-313952-02.js
e4x/GC/regress-324117.js
e4x/GC/regress-339785.js
e4x/GC/regress-357063-01.js
e4x/GC/regress-357063-02.js
e4x/Namespace/13.2.1.js
e4x/Namespace/13.2.2.js
e4x/Namespace/13.2.5.js
e4x/Namespace/regress-283972.js
e4x/Namespace/regress-350442.js
e4x/Namespace/regress-444608-02.js
e4x/Namespace/regress-444608.js
e4x/QName/13.3.1.js
e4x/QName/13.3.2.js
e4x/QName/13.3.5.js
e4x/QName/regress-373595-01.js
e4x/QName/regress-373595-02.js
e4x/QName/regress-373595-03.js
@ -126,7 +118,6 @@ e4x/Regress/regress-375406.js
e4x/Regress/regress-380833.js
e4x/Regress/regress-383255.js
e4x/Regress/regress-394941.js
e4x/Regress/regress-407323.js
e4x/Regress/regress-426520.js
e4x/Regress/regress-453915.js
e4x/Regress/regress-458679-01.js
@ -268,8 +259,10 @@ e4x/extensions/regress-450871-01.js
e4x/extensions/regress-450871-02.js
e4x/extensions/regress-462734-01.js
ecma/Array/15.4.4.3-1.js
ecma/Boolean/15.6.4.1.js
ecma/Boolean/15.6.4.2-4-n.js
ecma/Boolean/15.6.4.3-4-n.js
ecma/Date/15.9.5.1.js
ecma/Date/15.9.5.10-2.js
ecma/Date/15.9.5.11-2.js
ecma/Date/15.9.5.12-2.js
@ -278,16 +271,7 @@ ecma/Date/15.9.5.23-3-n.js
ecma/Date/15.9.5.3-1-n.js
ecma/Date/15.9.5.4-2-n.js
ecma/Date/15.9.5.8.js
ecma/Date/dst-offset-caching-1-of-8.js
ecma/Date/dst-offset-caching-2-of-8.js
ecma/Date/dst-offset-caching-3-of-8.js
ecma/Date/dst-offset-caching-4-of-8.js
ecma/Date/dst-offset-caching-5-of-8.js
ecma/Date/dst-offset-caching-6-of-8.js
ecma/Date/dst-offset-caching-7-of-8.js
ecma/Date/dst-offset-caching-8-of-8.js
ecma/ExecutionContexts/10.2.2-1.js
ecma/ExecutionContexts/10.2.2-2.js
ecma/Date/15.9.5.9.js
ecma/Expressions/11.12-2-n.js
ecma/Expressions/11.2.1-1.js
ecma/Expressions/11.2.1-3-n.js
@ -328,10 +312,6 @@ ecma/GlobalObject/15.1-1-n.js
ecma/GlobalObject/15.1-2-n.js
ecma/GlobalObject/15.1.2.3-1.js
ecma/GlobalObject/15.1.2.3-2.js
ecma/GlobalObject/15.1.2.4.js
ecma/GlobalObject/15.1.2.5-1.js
ecma/GlobalObject/15.1.2.5-2.js
ecma/GlobalObject/15.1.2.5-3.js
ecma/LexicalConventions/7.1-1.js
ecma/LexicalConventions/7.1-2.js
ecma/LexicalConventions/7.1-3.js
@ -405,9 +385,12 @@ ecma/Math/15.8.2.6.js
ecma/Math/15.8.2.7.js
ecma/Math/15.8.2.9.js
ecma/Number/0x-without-following-hexdigits.js
ecma/Number/15.7.4-1.js
ecma/Number/15.7.4.1.js
ecma/Number/15.7.4.2-2-n.js
ecma/Number/15.7.4.2-3-n.js
ecma/Number/15.7.4.3-3-n.js
ecma/ObjectObjects/15.2.4.1.js
ecma/ObjectObjects/15.2.4.2.js
ecma/Statements/12.6.2-9-n.js
ecma/Statements/12.6.3-5-n.js
@ -449,6 +432,9 @@ ecma/extensions/15.6.3.1-5.js
ecma/extensions/15.6.3.js
ecma/extensions/15.7.3.js
ecma/extensions/9.9-1.js
ecma/extensions/trapflatclosure.js
ecma/ExecutionContexts/10.2.2-1.js
ecma/ExecutionContexts/10.2.2-2.js
ecma_2/Exceptions/boolean-001.js
ecma_2/Exceptions/boolean-002.js
ecma_2/Exceptions/date-001.js
@ -543,6 +529,7 @@ ecma_3/Function/regress-58274.js
ecma_3/Function/regress-85880.js
ecma_3/Function/regress-94506.js
ecma_3/Function/scope-001.js
ecma_3/Function/scope-002.js
ecma_3/LexicalConventions/7.4-01.js
ecma_3/LexicalConventions/7.8.3-01.js
ecma_3/LexicalConventions/7.9.1.js
@ -562,9 +549,9 @@ ecma_3/RegExp/regress-223273.js
ecma_3/RegExp/regress-375715-01-n.js
ecma_3/RegExp/regress-375715-04.js
ecma_3/RegExp/regress-436700.js
ecma_3/RegExp/regress-465862.js
ecma_3/RegExp/regress-57631.js
ecma_3/Regress/regress-385393-04.js
ecma_3/Regress/regress-580544.js
ecma_3/Statements/regress-157509.js
ecma_3/Statements/regress-302439.js
ecma_3/String/regress-304376.js
@ -582,6 +569,7 @@ ecma_3/extensions/regress-188206-01.js
ecma_3/extensions/regress-274152.js
ecma_3/extensions/regress-368516.js
ecma_3/extensions/regress-385393-03.js
ecma_3/extensions/regress-429248.js
ecma_3_1/Object/regress-444787.js
ecma_5/Array/toString-01.js
ecma_5/Expressions/11.1.5-01.js
@ -589,7 +577,6 @@ ecma_5/Expressions/named-accessor-function.js
ecma_5/Function/15.3.4.3-01.js
ecma_5/JSON/cyclic-stringify.js
ecma_5/Object/15.2.3.3-01.js
ecma_5/Object/15.2.3.4-01.js
ecma_5/Object/15.2.3.4-03.js
ecma_5/Object/15.2.3.6-dictionary-redefinition-1-of-8.js
ecma_5/Object/15.2.3.6-dictionary-redefinition-2-of-8.js
@ -617,7 +604,6 @@ ecma_5/Object/15.2.3.7-01.js
ecma_5/RegExp/15.10.7.5-01.js
ecma_5/Types/8.12.5-01.js
ecma_5/extensions/8.12.5-01.js
ecma_5/extensions/regress-bug567606.js
ecma_5/extensions/string-literal-getter-setter-decompilation.js
ecma_5/misc/enumerate-undefined.js
ecma_5/misc/global-numeric-properties.js
@ -640,6 +626,8 @@ ecma_5/strict/B.1.2.js
ecma_5/strict/regress-532254.js
js1_2/regexp/alphanumeric.js
js1_2/regexp/digit.js
js1_2/regexp/RegExp_multiline.js
js1_2/regexp/RegExp_multiline_as_array.js
js1_2/regexp/whitespace.js
js1_2/regexp/word_boundary.js
js1_2/regress/regress-144834.js
@ -658,10 +646,7 @@ js1_5/Array/regress-313153.js
js1_5/Array/regress-330812.js
js1_5/Array/regress-350256-02.js
js1_5/Array/regress-350256-03.js
js1_5/Array/regress-360681-01.js
js1_5/Array/regress-360681-02.js
js1_5/Array/regress-451483.js
js1_5/Array/regress-456845.js
js1_5/Array/regress-465980-01.js
js1_5/Array/regress-474529.js
js1_5/Error/regress-354246.js
@ -689,26 +674,18 @@ js1_5/Function/regress-338001.js
js1_5/Function/regress-338121-01.js
js1_5/Function/regress-338121-02.js
js1_5/Function/regress-338121-03.js
js1_5/GC/regress-104584.js
js1_5/GC/regress-203278-2.js
js1_5/GC/regress-313479.js
js1_5/GC/regress-316885-01.js
js1_5/GC/regress-348532.js
js1_5/GC/regress-352606.js
js1_5/GC/regress-390078.js
js1_5/GC/regress-418128.js
js1_5/GetSet/regress-375976.js
js1_5/LexicalConventions/lexical-001.js
js1_5/LexicalConventions/regress-343675.js
js1_5/Regress/regress-103602.js
js1_5/Regress/regress-104077.js
js1_5/Regress/regress-114493.js
js1_5/Regress/regress-115436.js
js1_5/Regress/regress-116228.js
js1_5/Regress/regress-118849.js
js1_5/Regress/regress-127557.js
js1_5/Regress/regress-131510-001.js
js1_5/Regress/regress-139316.js
js1_5/Regress/regress-156354.js
js1_5/Regress/regress-167328.js
js1_5/Regress/regress-172699.js
js1_5/Regress/regress-179524.js
@ -738,7 +715,6 @@ js1_5/Regress/regress-315990.js
js1_5/Regress/regress-317533.js
js1_5/Regress/regress-319391.js
js1_5/Regress/regress-321757.js
js1_5/Regress/regress-322430.js
js1_5/Regress/regress-323314-1.js
js1_5/Regress/regress-328664.js
js1_5/Regress/regress-329383.js
@ -764,96 +740,26 @@ js1_5/Regress/regress-355556.js
js1_5/Regress/regress-356693.js
js1_5/Regress/regress-360969-05.js
js1_5/Regress/regress-360969-06.js
js1_5/Regress/regress-361617.js
js1_5/Regress/regress-372364.js
js1_5/Regress/regress-383674.js
js1_5/Regress/regress-383682.js
js1_5/Regress/regress-407323.js
js1_5/Regress/regress-407957.js
js1_5/Regress/regress-410852.js
js1_5/Regress/regress-419018.js
js1_5/Regress/regress-420919.js
js1_5/Regress/regress-422348.js
js1_5/Regress/regress-426827.js
js1_5/Regress/regress-428366.js
js1_5/Regress/regress-438415-02.js
js1_5/Regress/regress-440926.js
js1_5/Regress/regress-449627.js
js1_5/Regress/regress-449666.js
js1_5/Regress/regress-450369.js
js1_5/Regress/regress-450833.js
js1_5/Regress/regress-451884.js
js1_5/Regress/regress-451946.js
js1_5/Regress/regress-452008.js
js1_5/Regress/regress-452170.js
js1_5/Regress/regress-452333.js
js1_5/Regress/regress-452336.js
js1_5/Regress/regress-452495.js
js1_5/Regress/regress-452573-01.js
js1_5/Regress/regress-452573-02.js
js1_5/Regress/regress-452713.js
js1_5/Regress/regress-452724-01.js
js1_5/Regress/regress-452724-02.js
js1_5/Regress/regress-452853.js
js1_5/Regress/regress-452884-01.js
js1_5/Regress/regress-452884-02.js
js1_5/Regress/regress-453173.js
js1_5/Regress/regress-453397.js
js1_5/Regress/regress-453701.js
js1_5/Regress/regress-453747.js
js1_5/Regress/regress-454682.js
js1_5/Regress/regress-454981.js
js1_5/Regress/regress-455605.js
js1_5/Regress/regress-455748.js
js1_5/Regress/regress-455758-01.js
js1_5/Regress/regress-455758-02.js
js1_5/Regress/regress-455775.js
js1_5/Regress/regress-456470.js
js1_5/Regress/regress-456477-01.js
js1_5/Regress/regress-456477-02.js
js1_5/Regress/regress-456494.js
js1_5/Regress/regress-456540-01.js
js1_5/Regress/regress-456540-02.js
js1_5/Regress/regress-457065-03.js
js1_5/Regress/regress-457456.js
js1_5/Regress/regress-457778.js
js1_5/Regress/regress-458851.js
js1_5/Regress/regress-459085.js
js1_5/Regress/regress-459628.js
js1_5/Regress/regress-459990.js
js1_5/Regress/regress-460024.js
js1_5/Regress/regress-461307.js
js1_5/Regress/regress-461723.js
js1_5/Regress/regress-462292.js
js1_5/Regress/regress-462879.js
js1_5/Regress/regress-462989.js
js1_5/Regress/regress-463259.js
js1_5/Regress/regress-463782.js
js1_5/Regress/regress-464334.js
js1_5/Regress/regress-465013.js
js1_5/Regress/regress-465132.js
js1_5/Regress/regress-465133.js
js1_5/Regress/regress-465135.js
js1_5/Regress/regress-465136.js
js1_5/Regress/regress-465137.js
js1_5/Regress/regress-465262.js
js1_5/Regress/regress-465272.js
js1_5/Regress/regress-465366.js
js1_5/Regress/regress-466262.js
js1_5/Regress/regress-470061.js
js1_5/Regress/regress-475645-01.js
js1_5/Regress/regress-475645-02.js
js1_5/Regress/regress-476192.js
js1_5/Regress/regress-477733.js
js1_5/Regress/regress-477758.js
js1_5/Regress/regress-478314.js
js1_5/Regress/regress-480147.js
js1_5/Regress/regress-480244.js
js1_5/Regress/regress-481436.js
js1_5/Regress/regress-482421.js
js1_5/Regress/regress-482783.js
js1_5/Regress/regress-483103.js
js1_5/Regress/regress-501124.js
js1_5/Regress/regress-503860.js
js1_5/Regress/regress-511859.js
js1_5/Regress/regress-68498-003.js
@ -895,7 +801,6 @@ js1_5/decompilation/regress-353120.js
js1_5/decompilation/regress-353146.js
js1_5/decompilation/regress-354910.js
js1_5/decompilation/regress-356083.js
js1_5/decompilation/regress-375639.js
js1_5/decompilation/regress-375882.js
js1_5/decompilation/regress-376564.js
js1_5/decompilation/regress-383721.js
@ -914,24 +819,17 @@ js1_5/extensions/regress-164697.js
js1_5/extensions/regress-178722.js
js1_5/extensions/regress-192465.js
js1_5/extensions/regress-226078.js
js1_5/extensions/regress-231518.js
js1_5/extensions/regress-245795.js
js1_5/extensions/regress-254375.js
js1_5/extensions/regress-255245.js
js1_5/extensions/regress-304897.js
js1_5/extensions/regress-300079.js
js1_5/extensions/regress-306738.js
js1_5/extensions/regress-311161.js
js1_5/extensions/regress-311583.js
js1_5/extensions/regress-311792-01.js
js1_5/extensions/regress-311792-02.js
js1_5/extensions/regress-313500.js
js1_5/extensions/regress-313803.js
js1_5/extensions/regress-314874.js
js1_5/extensions/regress-319683.js
js1_5/extensions/regress-322957.js
js1_5/extensions/regress-325269.js
js1_5/extensions/regress-328443.js
js1_5/extensions/regress-328556.js
js1_5/extensions/regress-330569.js
js1_5/extensions/regress-333541.js
js1_5/extensions/regress-336409-1.js
@ -943,26 +841,14 @@ js1_5/extensions/regress-346494.js
js1_5/extensions/regress-348986.js
js1_5/extensions/regress-350312-01.js
js1_5/extensions/regress-350312-02.js
js1_5/extensions/regress-351102-01.js
js1_5/extensions/regress-351102-02.js
js1_5/extensions/regress-351102-06.js
js1_5/extensions/regress-351448.js
js1_5/extensions/regress-352261.js
js1_5/extensions/regress-352372.js
js1_5/extensions/regress-353214.js
js1_5/extensions/regress-354297.js
js1_5/extensions/regress-355497.js
js1_5/extensions/regress-355736.js
js1_5/extensions/regress-358594-01.js
js1_5/extensions/regress-358594-02.js
js1_5/extensions/regress-358594-03.js
js1_5/extensions/regress-358594-04.js
js1_5/extensions/regress-358594-05.js
js1_5/extensions/regress-358594-06.js
js1_5/extensions/regress-361346.js
js1_5/extensions/regress-361856.js
js1_5/extensions/regress-361964.js
js1_5/extensions/regress-363988.js
js1_5/extensions/regress-365527.js
js1_5/extensions/regress-365692.js
js1_5/extensions/regress-365869.js
@ -970,9 +856,8 @@ js1_5/extensions/regress-367501-03.js
js1_5/extensions/regress-367630.js
js1_5/extensions/regress-367923.js
js1_5/extensions/regress-368859.js
js1_5/extensions/regress-369696-03.js
js1_5/extensions/regress-369696-02.js
js1_5/extensions/regress-375183.js
js1_5/extensions/regress-375801.js
js1_5/extensions/regress-376052.js
js1_5/extensions/regress-379523.js
js1_5/extensions/regress-380581.js
@ -980,41 +865,32 @@ js1_5/extensions/regress-381211.js
js1_5/extensions/regress-381304.js
js1_5/extensions/regress-382509.js
js1_5/extensions/regress-384680.js
js1_5/extensions/regress-385393-09.js
js1_5/extensions/regress-390597.js
js1_5/extensions/regress-390598.js
js1_5/extensions/regress-407501.js
js1_5/extensions/regress-412926.js
js1_5/extensions/regress-416834.js
js1_5/extensions/regress-394967.js
js1_5/extensions/regress-420869-01.js
js1_5/extensions/regress-422137.js
js1_5/extensions/regress-424683-01.js
js1_5/extensions/regress-427196-01.js
js1_5/extensions/regress-429264.js
js1_5/extensions/regress-429739.js
js1_5/extensions/regress-431428.js
js1_5/extensions/regress-434837-01.js
js1_5/extensions/regress-452178.js
js1_5/extensions/regress-452338.js
js1_5/extensions/regress-452565.js
js1_5/extensions/regress-453249.js
js1_5/extensions/regress-446386.js
js1_5/extensions/regress-454040.js
js1_5/extensions/regress-455380.js
js1_5/extensions/regress-455408.js
js1_5/extensions/regress-455413.js
js1_5/extensions/regress-459606.js
js1_5/extensions/regress-465145.js
js1_5/extensions/regress-465276.js
js1_5/extensions/regress-462734-02.js
js1_5/extensions/regress-462734-04.js
js1_5/extensions/regress-469625.js
js1_5/extensions/regress-469761.js
js1_5/extensions/regress-472599.js
js1_5/extensions/regress-476447.js
js1_5/extensions/regress-479487.js
js1_5/extensions/regress-50447-1.js
js1_5/extensions/regress-543839.js
js1_5/extensions/regress-90596-002.js
js1_5/extensions/regress-96284-001.js
js1_5/extensions/regress-96284-002.js
js1_5/extensions/scope-001.js
js1_6/Array/regress-352742-01.js
js1_6/Array/regress-415540.js
js1_6/Regress/regress-301574.js
js1_6/Regress/regress-314887.js
js1_6/Regress/regress-350417.js
js1_6/Regress/regress-351795.js
@ -1022,7 +898,6 @@ js1_6/Regress/regress-352271.js
js1_6/Regress/regress-355002.js
js1_6/Regress/regress-378492.js
js1_6/Regress/regress-382509.js
js1_6/Regress/regress-475469.js
js1_6/Regress/regress-476655.js
js1_6/String/regress-306591.js
js1_6/decompilation/regress-352084.js
@ -1031,19 +906,12 @@ js1_6/decompilation/regress-352613-02.js
js1_6/extensions/regress-312385-01.js
js1_6/extensions/regress-352392.js
js1_6/extensions/regress-385393-08.js
js1_6/extensions/regress-455464-01.js
js1_6/extensions/regress-455464-02.js
js1_6/extensions/regress-455464-03.js
js1_6/extensions/regress-456826.js
js1_6/extensions/regress-457521.js
js1_6/extensions/regress-465443.js
js1_6/extensions/regress-470310.js
js1_6/extensions/regress-472508.js
js1_6/extensions/regress-475144.js
js1_6/extensions/regress-479567.js
js1_6/extensions/regress-565521.js
js1_7/GC/regress-341675.js
js1_7/GC/regress-381374.js
js1_7/block/order-of-operation.js
js1_7/block/regress-341939.js
js1_7/block/regress-343765.js
@ -1057,7 +925,6 @@ js1_7/block/regress-348685.js
js1_7/block/regress-349283.js
js1_7/block/regress-349507.js
js1_7/block/regress-349653.js
js1_7/block/regress-350279.js
js1_7/block/regress-350793-01.js
js1_7/block/regress-351497.js
js1_7/block/regress-351794.js
@ -1096,7 +963,6 @@ js1_7/decompilation/regress-355049-01.js
js1_7/decompilation/regress-355049-02.js
js1_7/decompilation/regress-355635.js
js1_7/decompilation/regress-356247.js
js1_7/decompilation/regress-375794.js
js1_7/decompilation/regress-379925.js
js1_7/decompilation/regress-380506.js
js1_7/decompilation/regress-410571.js
@ -1114,7 +980,6 @@ js1_7/extensions/basic-Iterator.js
js1_7/extensions/basic-for-each.js
js1_7/extensions/basic-for-in.js
js1_7/extensions/destructuring-order.js
js1_7/extensions/iterator-ctor.js
js1_7/extensions/regress-346021.js
js1_7/extensions/regress-346642-02.js
js1_7/extensions/regress-349619.js
@ -1126,8 +991,6 @@ js1_7/extensions/regress-351102-07.js
js1_7/extensions/regress-352885-01.js
js1_7/extensions/regress-352885-02.js
js1_7/extensions/regress-353454.js
js1_7/extensions/regress-354499-01.js
js1_7/extensions/regress-354499-02.js
js1_7/extensions/regress-354945-01.js
js1_7/extensions/regress-354945-02.js
js1_7/extensions/regress-355052-01.js
@ -1136,7 +999,6 @@ js1_7/extensions/regress-355052-03.js
js1_7/extensions/regress-355145.js
js1_7/extensions/regress-355410.js
js1_7/extensions/regress-355512.js
js1_7/extensions/regress-355583.js
js1_7/extensions/regress-363040-01.js
js1_7/extensions/regress-363040-02.js
js1_7/extensions/regress-366668-02.js
@ -1148,20 +1010,16 @@ js1_7/extensions/regress-379566.js
js1_7/extensions/regress-380933.js
js1_7/extensions/regress-381301.js
js1_7/extensions/regress-381303.js
js1_7/extensions/regress-387955-01.js
js1_7/extensions/regress-392308.js
js1_7/extensions/regress-429266.js
js1_7/extensions/regress-455982-01.js
js1_7/extensions/regress-455982-02.js
js1_7/extensions/regress-458679.js
js1_7/extensions/regress-469234.js
js1_7/extensions/regress-469405-02.js
js1_7/extensions/regress-470176.js
js1_7/extensions/regress-470300-01.js
js1_7/extensions/regress-470300-02.js
js1_7/extensions/regress-473282.js
js1_7/extensions/regress-474771-01.js
js1_7/extensions/regress-474771-02.js
js1_7/extensions/regress-476257.js
js1_7/extensions/regress-477048.js
js1_7/geniter/326466-01.js
@ -1206,22 +1064,16 @@ js1_7/geniter/throw-after-close.js
js1_7/geniter/throw-forever.js
js1_7/geniter/unreachable-yield.js
js1_7/geniter/yield-undefined.js
js1_7/iterable/regress-340526-01.js
js1_7/iterable/regress-341496.js
js1_7/iterable/regress-341499.js
js1_7/iterable/regress-341510.js
js1_7/iterable/regress-354750-01.js
js1_7/iterable/regress-355025.js
js1_7/iterable/regress-355075-01.js
js1_7/iterable/regress-355075-02.js
js1_7/iterable/regress-355090.js
js1_7/iterable/regress-412467.js
js1_7/iterable/regress-415922.js
js1_7/iterable/regress-568056.js
js1_7/lexical/regress-336376-01.js
js1_7/lexical/regress-351515.js
js1_7/regress/regress-351503-01.js
js1_7/regress/regress-351503-02.js
js1_7/regress/regress-352640-03.js
js1_7/regress/regress-352797-02.js
js1_7/regress/regress-352870-01.js
js1_7/regress/regress-352870-02.js
@ -1243,7 +1095,6 @@ js1_7/regress/regress-385393-05.js
js1_7/regress/regress-387951.js
js1_7/regress/regress-406477.js
js1_7/regress/regress-407727-02.js
js1_7/regress/regress-407957.js
js1_7/regress/regress-414553.js
js1_7/regress/regress-416601.js
js1_7/regress/regress-416705.js
@ -1256,13 +1107,11 @@ js1_7/regress/regress-452960.js
js1_7/regress/regress-453049.js
js1_7/regress/regress-453051.js
js1_7/regress/regress-453411.js
js1_7/regress/regress-461235.js
js1_7/regress/regress-461945.js
js1_7/regress/regress-462071.js
js1_7/regress/regress-462282.js
js1_7/regress/regress-462388.js
js1_7/regress/regress-462407.js
js1_7/regress/regress-464403.js
js1_7/regress/regress-465236.js
js1_7/regress/regress-465424.js
js1_7/regress/regress-465484.js
@ -1287,10 +1136,8 @@ js1_8/extensions/regress-385393-01.js
js1_8/extensions/regress-385393-10.js
js1_8/extensions/regress-385393-11.js
js1_8/extensions/regress-385729.js
js1_8/extensions/regress-394709.js
js1_8/extensions/regress-452476.js
js1_8/extensions/regress-452913.js
js1_8/extensions/regress-454744.js
js1_8/extensions/regress-455973.js
js1_8/extensions/regress-465337.js
js1_8/extensions/regress-465453.js
@ -1321,7 +1168,6 @@ js1_8/regress/regress-427798.js
js1_8/regress/regress-433279-01.js
js1_8/regress/regress-433279-02.js
js1_8/regress/regress-433279-03.js
js1_8/regress/regress-452491.js
js1_8/regress/regress-453492.js
js1_8/regress/regress-455981-01.js
js1_8/regress/regress-455981-02.js
@ -1352,18 +1198,14 @@ js1_8/regress/regress-465454.js
js1_8/regress/regress-465460-01.js
js1_8/regress/regress-465460-02.js
js1_8/regress/regress-465460-03.js
js1_8/regress/regress-465460-04.js
js1_8/regress/regress-465460-05.js
js1_8/regress/regress-465460-06.js
js1_8/regress/regress-465460-07.js
js1_8/regress/regress-465460-08.js
js1_8/regress/regress-465460-09.js
js1_8/regress/regress-465460-10.js
js1_8/regress/regress-465460-11.js
js1_8/regress/regress-465460-12.js
js1_8/regress/regress-465483.js
js1_8/regress/regress-465567-01.js
js1_8/regress/regress-465567-02.js
js1_8/regress/regress-465688.js
js1_8/regress/regress-466128.js
js1_8/regress/regress-466787.js
@ -1388,7 +1230,6 @@ js1_8/regress/regress-477234.js
js1_8/regress/regress-477581.js
js1_8/regress/regress-478205.js
js1_8/regress/regress-479353.js
js1_8/regress/regress-479740.js
js1_8/regress/regress-481800.js
js1_8/regress/regress-483749.js
js1_8/regress/regress-499524.js
@ -1413,11 +1254,12 @@ js1_8_1/decompilation/regress-443074.js
js1_8_1/extensions/regress-352281.js
js1_8_1/extensions/regress-353214-02.js
js1_8_1/extensions/regress-437288-01.js
js1_8_1/extensions/regress-452498-162.js
js1_8_1/extensions/regress-452498-193.js
js1_8_1/extensions/regress-452498-196.js
js1_8_1/extensions/regress-452498-224.js
js1_8_1/extensions/regress-477158.js
js1_8_1/extensions/regress-477187.js
js1_8_1/extensions/regress-520572.js
js1_8_1/extensions/strict-warning.js
js1_8_1/regress/regress-420399.js
js1_8_1/regress/regress-452498-027.js
@ -1425,6 +1267,7 @@ js1_8_1/regress/regress-452498-038.js
js1_8_1/regress/regress-452498-039.js
js1_8_1/regress/regress-452498-050.js
js1_8_1/regress/regress-452498-051.js
js1_8_1/regress/regress-452498-052-a.js
js1_8_1/regress/regress-452498-052.js
js1_8_1/regress/regress-452498-053.js
js1_8_1/regress/regress-452498-054.js
@ -1444,7 +1287,6 @@ js1_8_1/regress/regress-452498-103.js
js1_8_1/regress/regress-452498-107.js
js1_8_1/regress/regress-452498-108.js
js1_8_1/regress/regress-452498-110.js
js1_8_1/regress/regress-452498-111.js
js1_8_1/regress/regress-452498-112.js
js1_8_1/regress/regress-452498-114.js
js1_8_1/regress/regress-452498-117.js
@ -1453,6 +1295,7 @@ js1_8_1/regress/regress-452498-123.js
js1_8_1/regress/regress-452498-129.js
js1_8_1/regress/regress-452498-130.js
js1_8_1/regress/regress-452498-131.js
js1_8_1/regress/regress-452498-135-a.js
js1_8_1/regress/regress-452498-135.js
js1_8_1/regress/regress-452498-138.js
js1_8_1/regress/regress-452498-139.js
@ -1463,11 +1306,13 @@ js1_8_1/regress/regress-452498-185.js
js1_8_1/regress/regress-452498-187.js
js1_8_1/regress/regress-452498-191.js
js1_8_1/regress/regress-466905-01.js
js1_8_1/regress/regress-495773.js
js1_8_1/regress/regress-479430-01.js
js1_8_1/regress/regress-479430-02.js
js1_8_1/regress/regress-479430-03.js
js1_8_1/regress/regress-479430-04.js
js1_8_1/regress/regress-479430-05.js
js1_8_1/regress/regress-495907.js
js1_8_1/regress/regress-496922.js
js1_8_1/regress/regress-507053.js
js1_8_1/regress/regress-507295.js
js1_8_1/regress/regress-507424.js
js1_8_1/regress/regress-509354.js
js1_8_1/regress/regress-515885.js
@ -1478,26 +1323,8 @@ js1_8_1/strict/12.2.1.js
js1_8_1/strict/generator-eval-arguments.js
js1_8_1/strict/let-block-eval-arguments.js
js1_8_1/trace/math-trace-tests.js
js1_8_1/trace/regress-458838.js
js1_8_1/trace/regress-462459-01.js
js1_8_1/trace/regress-462459-02.js
js1_8_1/trace/regress-462459-03.js
js1_8_1/trace/regress-462459-04.js
js1_8_1/trace/regress-462459-05.js
js1_8_1/trace/regress-462459-06.js
js1_8_1/trace/regress-462459-07.js
js1_8_1/trace/regress-462459-08.js
js1_8_1/trace/regress-462459-09.js
js1_8_1/trace/regress-462459-10.js
js1_8_1/trace/regress-462459-11.js
js1_8_1/trace/regress-462459-12.js
js1_8_1/trace/regress-471635.js
js1_8_1/trace/regress-489682.js
js1_8_1/trace/trace-test.js
js1_8_5/extensions/parseInt-octal.js
js1_8_5/extensions/proxy-enumerateOwn-duplicates.js
js1_8_5/extensions/scripted-proxies.js
js1_8_5/extensions/typedarray-prototype.js
js1_8_5/extensions/typedarray.js
js1_8_5/regress/regress-500528.js
js1_8_5/regress/regress-533876.js
@ -1507,10 +1334,31 @@ js1_8_5/regress/regress-541255-2.js
js1_8_5/regress/regress-541255-3.js
js1_8_5/regress/regress-541255-4.js
js1_8_5/regress/regress-546615.js
js1_8_5/regress/regress-555246-0.js
js1_8_5/regress/regress-560101.js
js1_8_5/regress/regress-560998-1.js
js1_8_5/regress/regress-566549.js
js1_8_5/regress/regress-566914.js
js1_8_5/regress/regress-569306.js
js1_8_5/regress/regress-571014.js
js1_8_5/regress/regress-577648-1.js
js1_8_5/regress/regress-577648-2.js
js1_8_5/regress/regress-584355.js
narcissus/../ecma/Date/15.9.5.10-2.js
narcissus/../ecma/Date/15.9.5.11-2.js
narcissus/../ecma/Date/15.9.5.12-2.js
narcissus/../ecma/Date/15.9.5.2-2-n.js
narcissus/../ecma/Date/15.9.5.23-3-n.js
narcissus/../ecma/Date/15.9.5.3-1-n.js
narcissus/../ecma/Date/15.9.5.4-2-n.js
narcissus/../ecma/Date/15.9.5.8.js
narcissus/../ecma/Date/dst-offset-caching-1-of-8.js
narcissus/../ecma/Date/dst-offset-caching-2-of-8.js
narcissus/../ecma/Date/dst-offset-caching-3-of-8.js
narcissus/../ecma/Date/dst-offset-caching-4-of-8.js
narcissus/../ecma/Date/dst-offset-caching-5-of-8.js
narcissus/../ecma/Date/dst-offset-caching-6-of-8.js
narcissus/../ecma/Date/dst-offset-caching-7-of-8.js
narcissus/../ecma/Date/dst-offset-caching-8-of-8.js
narcissus/../ecma_3/Date/15.9.5.4.js
narcissus/../ecma_3/Date/regress-452786.js