# HG changeset patch # User graydon@pobox.com # Date 1210376502 25200 # Node ID 96353393b888008003368a3f60c856547725c26f # Parent 453abb0693abe9901cf3f30f03a584e353ad3df6# Parent 6341b5682cb97a9cfa600361106e096f79614a35 merge of 'f0d802758dd59390bd0e093accae30b633a282b7' and 'f4428f9164b3b7de0296d580047e55503ec1142a' diff --git a/ast-query.sml b/ast-query.sml --- a/ast-query.sml +++ b/ast-query.sml @@ -92,18 +92,17 @@ fun needFunctionType (t:Ast.TYPE) | _ => NONE in findType t isFunctionType "function" end fun resultTyOfFuncTy t = case (#result (needFunctionType t)) of SOME t => t - (* void case should never occur, I think *) - + | NONE => error ["resultTyOfFuncTy: none found"] val minArgsOfFuncTy = (#minArgs) o needFunctionType fun queryFuncTy (q:Ast.FUNCTION_TYPE -> 'a) (funcTy:Ast.TYPE) : 'a = q (needFunctionType funcTy) diff --git a/ast.sml b/ast.sml --- a/ast.sml +++ b/ast.sml @@ -140,26 +140,16 @@ datatype PRAGMA = openNamespaces: OPEN_NAMESPACES, globalNames: NAME_SET } | ResolvedName of NAME and NAMESPACE_EXPRESSION = Namespace of NAMESPACE | NamespaceName of NAME_EXPRESSION -(* Post-defn phase, only the following variants should appear: - - and NAME_EXPRESSION = - QualifiedName of { namespace: NAMESPACE_EXPRESSION, - identifier: IDENTIFIER } - - and NAMESPACE_EXPRESSION = - Namespace of NAMESPACE -*) - and FUNC_NAME_KIND = Ordinary | Operator | Get | Set | Call | Has @@ -451,22 +441,22 @@ datatype FIXTURE = NamespaceFixture of NAMESPACE | ClassFixture of CLS | InterfaceFixture of IFACE | TypeVarFixture of NONCE | TypeFixture of (IDENTIFIER list * TYPE) | MethodFixture of { func: FUNC, ty: TYPE, - readOnly: bool, (* ES3 funcs are r/w methods with ty=Ast.Special Ast.Any *) + writable: bool, (* ES3 funcs are r/w methods with ty=Ast.Special Ast.Any *) override: bool, final: bool } | ValFixture of { ty: TYPE, - readOnly: bool } + writable: bool } | VirtualValFixture of { ty: TYPE, getter: FUNC option, setter: FUNC option } (* VIRTUAL_VAL_FIXTURE *) and HEAD = Head of RIB * INITS diff --git a/boot.sml b/boot.sml --- a/boot.sml +++ b/boot.sml @@ -67,17 +67,17 @@ fun instantiateRootClass (regs:Mach.REGS : (Ast.CLS * Mach.CLS_CLOSURE * Mach.OBJ) = let val prog = (#prog regs) val (cls, _) = lookupRoot prog fullName val (_, cty) = lookupRoot prog Name.intrinsic_Class val _ = trace ["allocating class ", LogErr.name fullName]; val closure = Eval.newClsClosure (#scope regs) cls - val obj = Mach.newObject (Mach.MagicTag (Mach.Class closure)) (Mach.Object proto) + val obj = Mach.newObject (Mach.PrimitiveTag (Mach.Class closure)) (Mach.Object proto) val classRegs = Eval.extendScopeReg regs obj Mach.InstanceScope val Ast.Cls { classRib, ... } = cls val _ = trace ["allocating ", Int.toString (length classRib), " class fixtures on class ", LogErr.name fullName, ", object #", Int.toString (Eval.getObjId (obj))]; val _ = if (!doTrace) @@ -88,19 +88,19 @@ fun instantiateRootClass (regs:Mach.REGS val _ = trace ["binding class ", LogErr.name fullName]; val Mach.Obj { props, ... } = (#global regs) val _ = if Mach.hasProp props fullName then error ["global object already has a binding for ", LogErr.name fullName] else () val _ = Mach.addProp props fullName { ty = Ast.InstanceType cty, state = Mach.ValProp (Mach.Object obj), - attrs = { dontDelete = true, - dontEnum = true, - readOnly = true, + attrs = { removable = false, + enumerable = false, + writable = false, fixed = true } } val _ = Eval.bindAnySpecialIdentity regs obj in (cls, closure, obj) end fun completeClassFixtures (regs:Mach.REGS) (name:Ast.NAME) @@ -267,18 +267,17 @@ fun boot (baseDir:string) : Mach.REGS = val (prog, objFrag) = loadFile prog (builtin "Object.es") val (prog, clsFrag) = loadFile prog (builtin "Class.es") val (prog, funFrag) = loadFile prog (builtin "Function.es") val (prog, ifaceFrag) = loadFile prog (builtin "Interface.es") val (prog, otherFrags) = loadFiles prog [builtin "Namespace.es", - builtin "Magic.es", - builtin "Internal.es", + builtin "Helper.es", builtin "Conversions.es", builtin "string_primitive.es", builtin "String.es", (* * boolean before Boolean because the latter @@ -319,21 +318,20 @@ fun boot (baseDir:string) : Mach.REGS = builtin "UnicodeClasses.es", builtin "UnicodeCasemapping.es", builtin "UnicodeTbl.es", builtin "Unicode.es", builtin "RegExpCompiler.es", builtin "RegExpEvaluator.es", builtin "RegExp.es", builtin "Date.es", - builtin "MetaObjects.es", (* before JSON *) - builtin "JSON.es", + builtin "MetaObjects.es" + (* builtin "Vector.es", *) - (* builtin "Map.es", *) - builtin "DecimalContext.es" + (* builtin "Map.es" *) ] val glob = let val (_, objIty) = lookupRoot prog Name.public_Object in Mach.newObject (Mach.InstanceTag objIty) Mach.Null end diff --git a/builtins/Array.es b/builtins/Array.es --- a/builtins/Array.es +++ b/builtins/Array.es @@ -33,19 +33,17 @@ * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * Status: not reviewed against specs. */ - use default namespace public; use namespace intrinsic; - use namespace ECMAScript4_Internal; // Array "extras" from JS1.6 (@todo: and JS1.8 -- reduce/reduceRight) // See http://developer.mozilla.org/en/docs/New_in_JavaScript_1.6#Array_extras // The callback function typically takes (item, i, list) parameters type Mapper = function (*, double, Object):*; type Eacher = function (*, double, Object):void; // FIXME: 'void' seems too strict type Checker = function (*, double, Object):boolean; type Reducer = function (*, *, double, Object):*; diff --git a/builtins/Class.es b/builtins/Class.es --- a/builtins/Class.es +++ b/builtins/Class.es @@ -61,17 +61,17 @@ // for ( let s in superTypes() ) // if (s === t) // return true; // return false; // } // intrinsic function superTypes() { // // FIXME #158: don't use "let" here, "let function" is broken. -// var supers = []; // magic::superTypes(this); +// var supers = []; // helper::superTypes(this); // var i = 0; // // Clunky // function next() { // if (i == supers.length) // throw iterator::StopIteration; // return supers[i++]; // } // var it = {} diff --git a/builtins/Conversions.es b/builtins/Conversions.es --- a/builtins/Conversions.es +++ b/builtins/Conversions.es @@ -39,26 +39,26 @@ */ use namespace intrinsic; // Unused functions have been commented out. lth / 2007-09-07 /* intrinsic function IsPrimitive(value) - magic::isPrimitive(value); + helper::isPrimitive(value); */ /* intrinsic function DefaultValue(obj, preferredType) - magic::defaultValue(obj, preferredType); + helper::defaultValue(obj, preferredType); */ intrinsic function ToPrimitive(value, preferredType) - magic::toPrimitive(value, preferredType); + helper::toPrimitive(value, preferredType); /* * ES-262-3 9.9: ToObject. * * ES-262-4 draft: All values except undefined and null are * already objects, no conversion is necessary. */ diff --git a/builtins/Date.es b/builtins/Date.es --- a/builtins/Date.es +++ b/builtins/Date.es @@ -38,23 +38,20 @@ * * * Status: complete; not reviewed; not tested. * * The Emacs java formatting mode often fails here because of the * extensive use of expression functions. */ - use namespace ECMAScript4_Internal; use namespace helper; use namespace informative; use namespace intrinsic; - use default namespace public; - const NOARG = {}; dynamic class Date { static const length = 7; /* E262-3 15.9.2: The Date Constructor Called as a Function */ diff --git a/builtins/Error.es b/builtins/Error.es --- a/builtins/Error.es +++ b/builtins/Error.es @@ -44,18 +44,16 @@ * Can we use "prototype" with "var" like I do here? It makes sense, * and is desirable, but probably not necessary. * * It's my belief that making eg EvalError extend Error makes * EvalError.prototype be an Error object, though that needs to be * verified. */ - use namespace ECMAScript4_Internal; - helper function isExactlyType(obj, t) { // FIXME. What we want is // // let (ot = reflect::typeOf(obj)) // t.reflect::isSubtypeOf(ot) && ot.reflect::isSubtypeOf(t) if (t === EvalError) return obj is EvalError; if (t === RangeError) return obj is RangeError; if (t === ReferenceError) return obj is ReferenceError; diff --git a/builtins/Function.es b/builtins/Function.es --- a/builtins/Function.es +++ b/builtins/Function.es @@ -41,43 +41,40 @@ * The model here is that a function definition is compiled to a * Function object whose private "env" property is something * arbitrary; when a function is closed in an environment the object * is cloned and the clone is given a new value for "env". * Implementations don't have to do it that way but as a model it's * just fine. */ - use namespace __ES4__; - use namespace ECMAScript4_Internal; - public dynamic class Function { // IMPLEMENTATION ARTIFACT: A getter because Function is loaded before int. static function get length() { return 1 } /* E262-3 15.3.1: The Function Constructor Called as a Function */ static meta function invoke(...args) - magic::construct(Function, args); + helper::construct(Function, args); /* The following is for the benefit of the specification, don't remove it. public function Function(...args) helper::createFunction(args); helper function createFunction(args) { let parameters = ""; let body = ""; if (args.length > 0) { body = args[args.length-1]; args.length = args.length-1; parameters = args.join(","); } body = string(body); - magic::initializeFunction(this, __ES4__::global, parameters, body); + helper::initializeFunction(this, __ES4__::global, parameters, body); } */ /* E262-3 10.X / 13.X: function invocation. This method is never called. The Function constructor marks instances of Function specially, and recognizes these @@ -88,21 +85,19 @@ Other parts of the class hierarchy may however create meta::invoke methods that will be considered by the function calling machinery. */ meta final function invoke(...args) { throw new Error("Implementation error"); } - /* XXX: The prototype object behaves like a function (and - system magic makes its classname be "Function", though it's - not an instance of the Function class). So here we install - some things in the prototype that ensures that the object - behaves like a function in some trivial ways. + /* XXX: The prototype object behaves like a function. So here + we install some things in the prototype that ensures that + the object behaves like a function in some trivial ways. */ public prototype meta function invoke(...args) undefined; public prototype var length : double = 0; /* XXX: Function.prototype.toString */ public prototype function toString(this: Function) @@ -128,17 +123,17 @@ Function object, and everyone eventually ends up in Function.apply(). */ static public function apply(fn/*: Callable*/, thisArg: Object=null, argArray: Object=null) { if (thisArg === null) thisArg = global; if (argArray === null) argArray = []; - return magic::apply(fn, thisArg, argArray); + return helper::apply(fn, thisArg, argArray); } /* E262-3 15.3.4.4: Function.prototype.call. Assuming a rest argument does not contribute to the "length" of the function, so the length of Function.prototype.call is 1, which is what we want. */ @@ -179,17 +174,17 @@ if (!(V is Object)) return false; let O : Object = this.prototype; if (!(O is Object)) throw new TypeError("[[HasInstance]]: prototype is not object"); while (true) { - V = magic::getPrototype(V); + V = helper::getPrototype(V); if (V === null) return false; if (O == V) return true; } } /* Source code for decompilation, installed by the constructor */ @@ -198,15 +193,15 @@ public prototype function toSource() this.source; // IMPLEMENTATION ARTIFACT // This is a getter because 'double' is not defined by the time we // start constructing Functions. public function get length() - magic::fnLength(this); + helper::fnLength(this); // 'length' is logically a read-only property, so setting it should fail silently public function set length(x) { // ignore it } } diff --git a/builtins/GenericFunction.es b/builtins/GenericFunction.es --- a/builtins/GenericFunction.es +++ b/builtins/GenericFunction.es @@ -98,17 +98,17 @@ Several points to be made here. (1) The RI is still pretty weak--no parameterized types for one thing--so this implementation has its own Map class and its own Set class. No big deal, just extra code. (2) The RI has no real meta-object functionality at this point, so this code uses some primitives that have been hacked into the - system as magic hooks. These hooks will eventually be useful + system as helper hooks. These hooks will eventually be useful for the meta-objects system anyhow. (3) Using arrays like I do here is nuts, we should switch to lisp-like lists. (Why? because when you use an array to simulate a list, what's a functional operation--like cdr--in a reasonable language is a destructive operation--like shift--here. So you end up copying arrays when you shouldn't have to.) An argument could be made that lisp-like lists @@ -436,17 +436,17 @@ * * System hooks -- a sketch for meta-objects functionality. */ public function typeOf(v) { switch type (v) { case (v:undefined) { return UndefinedType } case (v:null) { return NullType } - case (v:*) { return magic::getClassOfObject(v) } + case (v:*) { return helper::getClassOfObject(v) } } } // Subtype relation, simplified. Must be compatible with the // subtype relation in the language, but is simplified for generic // functions. // // t1 is "type undefined", "type null", or a class type @@ -482,29 +482,29 @@ * depend on undocumented behavior of the RI: the interfaces are * actually in order in the internal data structures. */ function getDirectSuperClassAndInterfaces(clsOrInterface: (Class,Interface)) { let supers = []; switch type (clsOrInterface) { case (cls:Class) { - let probe = magic::getSuperClass(cls); + let probe = helper::getSuperClass(cls); if (probe !== null) supers.push(probe); for ( let i=0 ; ; i++ ) { - let probe = magic::getImplementedInterface(cls, toUint(i)); + let probe = helper::getImplementedInterface(cls, toUint(i)); if (probe === null) break; supers.push(probe); } } case (iface:Interface) { for ( let i=0 ; ; i++ ) { - let probe = magic::getSuperInterface(iface, toUint(i)); + let probe = helper::getSuperInterface(iface, toUint(i)); if (probe === null) break; supers.push(probe); } } } return supers; } diff --git a/builtins/Global.es b/builtins/Global.es --- a/builtins/Global.es +++ b/builtins/Global.es @@ -34,18 +34,16 @@ * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * * Status: not reviewed against specs. */ - use namespace ECMAScript4_Internal; - // 15.1.1.1 NaN // 15.1.1.2 Infinity // 15.1.1.3 undefined // [proposals:bug fixes] - [IMMUTABLE.GLOBALS] says that these three names // are {DE,DD,RO}, and not just {DE,DD} as in E262-3. public const NaN = 0.0/0.0; public const Infinity = 1.0/0.0; public const undefined = void(0); @@ -75,17 +73,17 @@ iterator class Enumerator { // FIXME: . type ResultFun = function(EnumerableId, Object!) : *; // FIXME: T function Enumerator(v, f: ResultFun, e: boolean = false) : result_fun = f, enumerate = e { initial_obj = (v is Object) ? v : null; current_obj = initial_obj; - current_ids = magic::getEnumerableIds(initial_obj); + current_ids = helper::getEnumerableIds(initial_obj); } // FIXME: why no ResultFun, boolean args? meta static function invoke(v) : iterator::Iterator new iterator::Enumerator(v); iterator function get(e : boolean = false) : iterator::Iterator (e == enumerate) ? this : new iterator::Enumerator(initial_obj, result_fun, e); // FIXME: . @@ -96,34 +94,34 @@ loop: while (true) { while (current_index === current_ids.length) { if (!enumerate) throw iterator::StopIteration; // No more properties in current_obj: try walking up the prototype chain. - current_obj = magic::getPrototype(current_obj); + current_obj = helper::getPrototype(current_obj); if (current_obj === null) throw iterator::StopIteration; - current_ids = magic::getEnumerableIds(current_obj); + current_ids = helper::getEnumerableIds(current_obj); current_index = 0; } let id : EnumerableId = current_ids[current_index++]; // Check for a shadowing property from initial_obj to current_obj on the prototype chain. - for (let obj : Object = initial_obj; obj !== current_obj; obj = magic::getPrototype(obj)) { - if (magic::hasOwnProperty(obj, id)) + for (let obj : Object = initial_obj; obj !== current_obj; obj = helper::getPrototype(obj)) { + if (helper::hasOwnProperty(obj, id)) continue loop; } // Check whether name is still bound in order to skip deleted properties. - if (magic::hasOwnProperty(current_obj, id)) + if (helper::hasOwnProperty(current_obj, id)) return result_fun(id, initial_obj); } } private var initial_obj : Object, current_obj : Object, current_ids : EnumerableIdArray, current_index : double, @@ -161,33 +159,33 @@ function close() : void; } helper class GeneratorImpl implements iterator::Generator { public function next() this.send(undefined) public function send(i) - magic::genSend(this, i) + helper::genSend(this, i) public function throw_(e) - magic::genThrow(this, e) + helper::genThrow(this, e) public function close() : void - magic::genClose(this) + helper::genClose(this) - // FIXME: this gets trumped by Mach.magicToUstring + // FIXME: this gets trumped by Mach.primitiveToUstring //public function toString() // "[object Generator]" } // 15.1.2.1 eval (x) // // FIXME: This should probably be an intrinsic::eval that looks - // like public::eval below but which delegates to magic::eval, + // like public::eval below but which delegates to helper::eval, // passing "this function" as the object from which to extract the // scope chain. intrinsic native function eval(s: string); public function eval(x) { if (this !== global) throw EvalError(); diff --git a/builtins/Magic.es b/builtins/Helper.es rename from builtins/Magic.es rename to builtins/Helper.es --- a/builtins/Magic.es +++ b/builtins/Helper.es @@ -1,11 +1,11 @@ /* -*- mode: java; indent-tabs-mode: nil -*- * - * ECMAScript 4 builtins - magic functions + * ECMAScript 4 builtins - miscellaneous helper functions * * The following licensing terms and conditions apply and must be * accepted in order to use the Reference Implementation: * * 1. This Reference Implementation is made available to all * interested persons on the same terms as Ecma makes available its * standards and technical reports, as set forth at * http://www.ecma-international.org/publications/. @@ -28,134 +28,113 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * - * - * Magic functions are implementation traps that express aspects of - * the language that cannot be expressed without either (a) modeling - * the language in the language, eg, by modeling objects and their - * property lists, or (b) breaking security. - * - * A good example is [[Prototype]], which exists on all objects but - * which is presumed not to be available for reading or writing by the - * user program. We can model it directly using eg ___proto___, but - * not without creating facilities that are presumed not to exist - * (reading that field). - * - * Library code references magic functions as global functions in the - * "magic" namespace, eg "magic::getPrototype(o)". - * - * Do note that a conforming implementation can't express the magic - * hooks quite like shown here because the magic namespace pollutes - * the name space for user programs. An implementation might instead - * supply a flag --magic to the compiler that allows the compiler to - * magically know about "magic" when the library files are being - * compiled. */ use namespace intrinsic; /* -------------------------------------------------------------- CLASS INSTANTIATION. */ /* * Given a class object, run the standard object-construction * protocol for it (and its base classes, initializers, settings, * ctors). Return the resulting instance, always an Object! */ - magic native function construct(cls:Class!, args:[*]) : Object!; + helper native function construct(cls:Class!, args:[*]) : Object!; /* -------------------------------------------------------------- PROPERTY MANIPULATION. */ /* Retrieve the [[Class]] property of o */ - magic native function getClassName(o : Object!) : string; + informative native function getClassName(o : Object!) : string; /* Retrieve the class object of o */ - magic native function getClassOfObject(o : Object!) : Class; + helper native function getClassOfObject(o : Object!) : Class; /* Retrieve the base class of cls, or null. */ - magic native function getSuperClass(cls : Class!) : Class; + helper native function getSuperClass(cls : Class!) : Class; /* Retrieve the kth implemented interface of cls, or null. */ - magic native function getImplementedInterface(cls: Class!, k: double) : Interface; + helper native function getImplementedInterface(cls: Class!, k: double) : Interface; /* Retrieve the kth superinterface of iface, or null. */ - magic native function getSuperInterface(iface: Interface!, k: double) : Interface; + helper native function getSuperInterface(iface: Interface!, k: double) : Interface; /* Retrieve the array of enumerable properties of o, in property creation order. */ - magic native function getEnumerableIds(o : Object) : Array; // FIXME: EnumerableIdArray + helper native function getEnumerableIds(o : Object) : Array; // FIXME: EnumerableIdArray /* Retrieve the possibly null [[Prototype]] property of o */ - magic native function getPrototype(o : Object!) : Object; + helper native function getPrototype(o : Object!) : Object; /* Return true iff o has a local property named by p. */ - magic native function hasOwnProperty(o : Object!, p : (Name|string)) : boolean; + helper native function hasOwnProperty(o : Object!, p : (Name|string)) : boolean; /* Return true if the property p does exists locally on o and its - DontEnum bit is set */ - magic native function getPropertyIsDontEnum(o : Object!, p : (Name|string)) : boolean; + Enumerable bit is set */ + helper native function getPropertyIsEnumerable(o : Object!, p : (Name|string)) : boolean; /* Return true if the property p does exists locally on o and its - DontDelete bit is set */ - magic native function getPropertyIsDontDelete(o : Object!, p : (Name|string)) : boolean; + Removable bit is set */ + helper native function getPropertyIsRemovable(o : Object!, p : (Name|string)) : boolean; - /* Provided that the property p exists locally on o, set its DontEnum + /* Provided that the property p exists locally on o, set its Enumerable flag according to f. If the property p does not exist locally on o, it does nothing. */ - magic native function setPropertyIsDontEnum(o : Object!, p : (Name|string), f : boolean) : void; + helper native function setPropertyIsEnumerable(o : Object!, p : (Name|string), f : boolean) : void; - magic native function isPrimitive(v:*) : boolean; - magic native function toPrimitive(v:*, hint:string) : *; - magic native function defaultValue(ob:Object!, hint:string) : *; + helper native function isPrimitive(v:*) : boolean; + helper native function toPrimitive(v:*, hint:string) : *; + helper native function defaultValue(ob:Object!, hint:string) : *; /* ---------------------------------------------------------------- FUNCTION MANIPULATION. */ /* Given a function object, a this object, and an array of argument values, call the function with the this object and arguments. */ - magic native function apply(fn : Function!, t : Object!, args : Array) : *; + helper native function apply(fn : Function!, t : Object!, args : Array) : *; - magic native function fnLength(fn: Function!) : double; + helper native function fnLength(fn: Function!) : double; /* ---------------------------------------------------------------- GENERATOR MANIPULATION. */ - magic native function genSend(g : Object!, x : *) : *; + helper native function genSend(g : Object!, x : *) : *; - magic native function genThrow(g : Object!, x : *) : *; + helper native function genThrow(g : Object!, x : *) : *; - magic native function genClose(g : Object!) : *; + helper native function genClose(g : Object!) : *; /* ---------------------------------------------------------------- STRING MANIPULATION. Strings contain string data in some unspecified way - there is no representation of string data in - the language. The following magic functions access and set + the language. The following helper functions access and set those string data. */ /* Given a string and a position in that string, return the numeric value of the character at that position in the string. */ - magic native function charCodeAt(s : string, pos : double) : double; + informative native function charCodeAt(s : string, pos : double) : double; /* Given a numeric character value, return a string of length 1 whose element 0 is the character with that same value. */ - magic native function fromCharCode(ch : double) : string; + informative native function fromCharCode(ch : double) : string; /* Given a string object, return the number of characters in the * string. */ - magic native function stringLength(s : string) : double; + informative native function stringLength(s : string) : double; /* Given two string objects A and B , return a new string object containing the characters from A followed by the characters from B. */ - magic native function stringAppend(a : string, b : string) : string; + informative native function stringAppend(a : string, b : string) : string; diff --git a/builtins/Map.es b/builtins/Map.es --- a/builtins/Map.es +++ b/builtins/Map.es @@ -64,18 +64,16 @@ * This implementation uses chaining for collisions and load factors * to trigger rehashing; neither is normative. * * A good implementation would defer creating the iterator * intermediate array until insertions or deletions make it necessary * to create it. */ - use namespace ECMAScript4_Internal; - __ES4__ dynamic class Map. { static public const length = 2; /* Create the map. Note that the equality and hashcode * predicates must always agree: if two objects are equal, * they must hash to the same value. */ diff --git a/builtins/Math.es b/builtins/Math.es --- a/builtins/Math.es +++ b/builtins/Math.es @@ -35,21 +35,20 @@ /* See ticket #8 for everything about the Math object. * * Summary: Math is a singleton instance of a hidden class called * "Math". Early binding and inlining opportunities are provided for * by a strongly-typed global intrinsic const variable also called * "Math", and for intrinsic methods on objects of this type. */ + use namespace intrinsic; + use namespace helper; - use namespace ECMAScript4_Internal; - use namespace intrinsic; - - ECMAScript4_Internal namespace MathInternals; + helper namespace MathInternals; type AnyNumber = (double|decimal); type FloatNumber = (double|decimal); helper function toAnyNumber(x): AnyNumber { if (x is AnyNumber) return x; return double(x); @@ -529,17 +528,17 @@ } intrinsic const Math : MathInternals::Math = new MathInternals::Math(); // 15.8.2 Public function Properties of the Math Object. These // are {DE} only. // - // FIXME: these properties need to be set to DontEnum, but + // FIXME: these properties need to be set to Enumerable, but // that's not yet possible because propertyIsEnumerable // does not work and (maybe) because one can't construct // Name objects in the public namespace. See tickets #89 // and #90. public var Math = intrinsic::Math; Math.public::abs = diff --git a/builtins/MetaObjects.es b/builtins/MetaObjects.es --- a/builtins/MetaObjects.es +++ b/builtins/MetaObjects.es @@ -29,17 +29,16 @@ * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * */ - use namespace ECMAScript4_Internal; use namespace helper; use namespace intrinsic; helper function numberconversion(t) numbertypes.indexOf(t) != -1; helper function stringconversion(t) stringtypes.indexOf(t) != -1; @@ -87,17 +86,17 @@ function isSubtypeOf(t: Type): boolean; } intrinsic const function typeOf(v): Type { if (v is null) return nulltype; if (v is undefined) return undefinedtype; - return getClassMetaObject(magic::getClassOfObject(v)); + return getClassMetaObject(helper::getClassOfObject(v)); } intrinsic interface NullType extends Type { } helper class NullTypeImpl implements NullType { @@ -144,36 +143,36 @@ { } function computeSupers() { throw "ABSTRACT" } function pushClass(cls) { if (cls !== null) { supers.push(getClassMetaObject(cls)); - pushClass(magic::getSuperClass(cls)); + pushClass(helper::getSuperClass(cls)); } } function pushSuperInterfaces(iface) { let i = 0; while (true) { - let iface2 = magic::getSuperInterface(iface, toUint(i)); + let iface2 = helper::getSuperInterface(iface, toUint(i)); if (iface2 == null) break; supers.push(getInterfaceMetaObject(iface2)); pushSuperInterfaces(iface2); i++; } } function pushImplementedInterfaces(cls) { let i = 0; while (true) { - let iface = magic::getImplementedInterface(cls, toUint(i)); + let iface = helper::getImplementedInterface(cls, toUint(i)); if (iface == null) break; supers.push(getInterfaceMetaObject(iface)); pushSuperInterfaces(iface); i++; } } @@ -235,17 +234,17 @@ public function name(): Name new Name("unknown"); override function computeSupers() { if (supers !== null) return; supers = []; - pushClass(magic::getSuperClass(cls)); + pushClass(helper::getSuperClass(cls)); pushImplementedInterfaces(cls); } } intrinsic interface InterfaceType extends NominalType { // Another security leak //function implementedBy(): ClassTypeIterator diff --git a/builtins/Name.es b/builtins/Name.es --- a/builtins/Name.es +++ b/builtins/Name.es @@ -30,18 +30,16 @@ * * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * */ - use namespace ECMAScript4_Internal; - __ES4__ final class Name extends String { // IMPLEMENTATION ARTIFACT: A getter because Name is loaded before int. static public function get length() { return 2 } // FIXME, "is undefined" would be better than "=== undefined" // but doesn't work, ticket #364 I think. diff --git a/builtins/Namespace.es b/builtins/Namespace.es --- a/builtins/Namespace.es +++ b/builtins/Namespace.es @@ -41,12 +41,12 @@ { // No "length" because constructor is private, this may or may // not be a general rule. // FIXME: we might need a static make-a-user-namespace // function here for dynamic namespaces. Not a ctor! // // For bootstrapping purposes, the ctor of Namespace must *not* - // call magic::foo on any foo, since it'll feed back on itself - // during construction of the magic namespace itself. So we + // call helper::foo on any foo, since it'll feed back on itself + // during construction of the helper namespace itself. So we // insist on an empty ctor for the time being. } diff --git a/builtins/Number.es b/builtins/Number.es --- a/builtins/Number.es +++ b/builtins/Number.es @@ -38,19 +38,16 @@ * * * The committee decided at the January 2007 meeting at Mozilla that * "Number" is a heavyweight wrapper (non-final, dynamic) for a * "double" value. */ use namespace intrinsic; - use namespace ECMAScript4_Internal; - - use default namespace public; __ES4__ type AnyNumber = (double|decimal|Number!); dynamic class Number { private var val : double; // IMPLEMENTATION ARTIFACT: A getter because Number is loaded before int. diff --git a/builtins/Object.es b/builtins/Object.es --- a/builtins/Object.es +++ b/builtins/Object.es @@ -35,19 +35,16 @@ * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * * Status: Complete; Not reviewed against spec. */ - - use namespace ECMAScript4_Internal; - public dynamic class Object { // IMPLEMENTATION ARTIFACT: A getter because Object is loaded before int. public static function get length() { return 1 } /* Do not remove this, it's used by the spec public function Object(value=undefined) { } @@ -63,17 +60,17 @@ intrinsic function toString() : string private::toString(); private function toString(): string "[object " + helper::getClassName() + "]"; helper function getClassName() - magic::getClassName(this); + informative::getClassName(this); /* E262-3 15.2.4.3: Object.prototype.toLocaleString */ public prototype function toLocaleString() this.private::toLocaleString(); intrinsic function toLocaleString() : string private::toLocaleString(); @@ -91,40 +88,40 @@ private function valueOf(): Object this; /* E262-3 15.2.4.5: Object.prototype.hasOwnProperty */ public prototype function hasOwnProperty(name) this.private::hasOwnProperty(helper::toEnumerableId(name)); - // Bootstrapping barfs if this does not go directly to the magic, + // Bootstrapping barfs if this does not go directly to the helper, // though I don't know why. Could be that Object is not fully // set up yet when it's called. intrinsic function hasOwnProperty(name: EnumerableId): boolean - magic::hasOwnProperty(this, name); + helper::hasOwnProperty(this, name); private function hasOwnProperty(name: EnumerableId): boolean - magic::hasOwnProperty(this, name); + helper::hasOwnProperty(this, name); /* E262-3 15.2.4.6: Object.prototype.isPrototypeOf */ public prototype function isPrototypeOf(value) this.private::isPrototypeOf(value); intrinsic function isPrototypeOf(value): boolean private::isPrototypeOf(value); private function isPrototypeOf(value): boolean { if (!(value is Object)) return false; let obj = value; while (true) { - obj = magic::getPrototype(obj); + obj = helper::getPrototype(obj); if (obj === null || obj === undefined) return false; if (obj === this) return true; } } /* E262-3 15.2.4.7: Object.prototype.propertyIsEnumerable (V) */ @@ -132,60 +129,60 @@ public prototype function propertyIsEnumerable(name) this.private::propertyIsEnumerable(helper::toEnumerableId(name)); intrinsic function propertyIsEnumerable(name: EnumerableId): boolean private::propertyIsEnumerable(name); private function propertyIsEnumerable(name) { - if (!magic::hasOwnProperty(this, name)) + if (!helper::hasOwnProperty(this, name)) return false; - return !magic::getPropertyIsDontEnum(this, name); + return !helper::getPropertyIsEnumerable(this, name); } /* Old code prototype function propertyIsEnumerable(name, flag=undefined) this.private::propertyIsEnumerable(helper::toEnumerableId(name), flag === undefined ? flag : boolean(flag)); intrinsic function propertyIsEnumerable(name: EnumerableId, flag: (boolean|undefined) = undefined): boolean private::propertyIsEnumerable(name, flag); private function propertyIsEnumerable(name, flag) { - if (!magic::hasOwnProperty(this, name)) + if (!helper::hasOwnProperty(this, name)) return false; - let oldval = !magic::getPropertyIsDontEnum(this, name); - if (!magic::getPropertyIsDontDelete(this, name)) + let oldval = !helper::getPropertyIsEnumerable(this, name); + if (!helper::getPropertyIsDontDelete(this, name)) if (flag !== undefined) - magic::setPropertyIsDontEnum(this, name, !flag); + helper::setPropertyIsEnumerable(this, name, !flag); return oldval; } */ public prototype function __defineProperty__(name, value, enumerable=undefined, removable=undefined, writable=undefined) this.private::__defineProperty__(helper::toEnumerableId(name), value, enumerable === undefined ? true : boolean(enumerable), removable === undefined ? true : boolean(removable), writable === undefined ? true : boolean(writable)); intrinsic function __defineProperty__(name: EnumerableId, value, enumerable:boolean=true, removable:boolean=true, writable:boolean=true): void private::__defineProperty__(name, value, enumerable, removable, writable); private function __defineProperty__(name, value, enumerable, removable, writable) { - if (!magic::hasOwnProperty(this, name)) + if (!helper::hasOwnProperty(this, name)) throw new TypeError(/* Property exists */); - let obj = magic::getPrototype(this); + let obj = helper::getPrototype(this); while (obj != null) { - if (magic::hasOwnProperty(obj, name) && magic::getPropertyIsReadOnly(obj, name)) - throw new TypeError(/* Property is ReadOnly in prototype chain */); - obj = magic::getPrototype(obj); + if (helper::hasOwnProperty(obj, name) && !helper::getPropertyIsWritable(obj, name)) + throw new TypeError(/* non-Writable property in prototype chain */); + obj = helper::getPrototype(obj); } this[name] = value; - magic::setPropertyIsDontEnum(this, name, !enumerable); - magic::setPropertyIsDontDelete(this, name, !removable); - magic::setPropertyIsReadOnly(this, name, !writable); + helper::setPropertyIsEnumerable(this, name, enumerable); + helper::setPropertyIsRemovable(this, name, removable); + helper::setPropertyIsWritable(this, name, writable); } } diff --git a/builtins/RegExp.es b/builtins/RegExp.es --- a/builtins/RegExp.es +++ b/builtins/RegExp.es @@ -37,22 +37,20 @@ * * * Status: complete; not reviewed; not tested. * * See RegExpCompiler.es for the compiler. * See RegExpEvaluator.es for the evaluator and compiled code representation. */ - use namespace ECMAScript4_Internal; + use namespace helper; use namespace intrinsic; use namespace Unicode; use namespace RegExpInternals; - - use default namespace public; /* E262-3 15.10: Regular expression object */ public dynamic class RegExp { static const length = 2; /* E262-3 15.10.3.1: The RegExp constructor called as a function */ meta static function invoke( pattern, flags ) { diff --git a/builtins/RegExpCompiler.es b/builtins/RegExpCompiler.es --- a/builtins/RegExpCompiler.es +++ b/builtins/RegExpCompiler.es @@ -43,17 +43,17 @@ * Status: Complete; Not reviewed; Not tested. * * The committee agreed in its 2007-06-05 phone conference to remove * support for octal literals from the reference implementation. * Following the grammar of E262-3, numbers other than zero may not * start with the digit '0'. */ - use namespace ECMAScript4_Internal; + use namespace helper; use namespace intrinsic; use namespace Unicode; use namespace RegExpInternals; use default namespace RegExpInternals; intrinsic class RegExpCompiler { /* Invariant for token handling: either idx==source.length or source[idx] is a significant char */ @@ -461,17 +461,17 @@ let (t : string? = characterEscape(true)) { if (t !== null) return new CharsetAdhoc(t); } let (t : double? = decimalEscape()) { if (t !== null) - return new CharsetAdhoc(string.fromCharCode(t)); + return new CharsetAdhoc(string.intrinsic::fromCharCode(t)); } fail( SyntaxError, "Failed to match escape sequence " + peekChar() ); } /* Returns null if it does not consume anything but fails; * throws an error if it consumes and then fails. */ @@ -546,21 +546,21 @@ case 0x72 /* "r" */: advance(); return "\r"; case 0x74 /* "t" */: advance(); return "\t"; case 0x63 /* "c" */: consumeChar(); let (c : string = peekChar()) { if (c >= "A" && c <= "Z") { eat(c); - return string.fromCharCode(c.charCodeAt(0) - "A".charCodeAt(0) + 1); + return string.intrinsic::fromCharCode(c.charCodeAt(0) - "A".charCodeAt(0) + 1); } if (c >= "a" && c <= "z") { eat(c); - return string.fromCharCode(c.charCodeAt(0) - "a".charCodeAt(0) + 1); + return string.intrinsic::fromCharCode(c.charCodeAt(0) - "a".charCodeAt(0) + 1); } else return "c"; } case 0x78 /* "x" */: case 0x58 /* "X" */: case 0x75 /* "u" */: @@ -577,17 +577,17 @@ else { let saved = idx; if (c == 0x78 /* "x" */ || c == 0x58 /* "X" */) res = hexDigits(2); else res = hexDigits(4); if (res === null) { idx = saved; - res = string.fromCharCode(c); + res = string.intrinsic::fromCharCode(c); } return res; } } if (atEnd()) fail( SyntaxError, "EOF inside escape sequence" ); @@ -674,17 +674,17 @@ if (!isHexDigit(c)) break; k = k*16 + hexValue(consumeChar(c)); } } if (n !== null && i < m || i == 0) return null; skip(); - return string.fromCharCode(k); + return string.intrinsic::fromCharCode(k); } function decimalDigits() : double { let k : double = 0; let c : string; while (isDecimalDigit(c = peekChar())) k = k*10 + decimalValue(consumeChar(c)); skip(); @@ -700,17 +700,17 @@ function peekChar2() : string idx+1 < slen ? source[idx+1] : "*END*"; function peekCharCode() : double { // In a production implementation, this would probably be // no faster than peekChar. In our reference // implementation, it is substantially faster. if (idx < slen) - return magic::charCodeAt(source, intrinsic::toUint(idx)); + return informative::charCodeAt(source, intrinsic::toUint(idx)); else return 0x0; } function consumeChar(c : string? = null) : string { if (!atEnd() && (c === null || source[idx] == c)) return source[idx++]; if (c !== null) diff --git a/builtins/RegExpEvaluator.es b/builtins/RegExpEvaluator.es --- a/builtins/RegExpEvaluator.es +++ b/builtins/RegExpEvaluator.es @@ -35,17 +35,17 @@ * Software ASA, and others. * * * Representation of compiled code, plus evaluation. * * Status: Complete, not reviewed, not tested. */ - use namespace ECMAScript4_Internal; + use namespace helper; use namespace intrinsic; use namespace RegExpInternals; use default namespace RegExpInternals; /* Encapsulation of compiled regular expression as returned by the compiler. */ intrinsic class RegExpMatcher! @@ -462,17 +462,17 @@ class CharsetRange! extends CharsetMixin implements CharsetMatcher { function CharsetRange(lo: string, hi: string): lo=lo, hi=hi { } public function match(ctx: Context, c: string): boolean { let lo_code = lo.charCodeAt(0); let hi_code = hi.charCodeAt(0); for ( let i=lo_code ; i <= hi_code ; i++ ) - if (Canonicalize(ctx, string.fromCharCode(i)) == c) + if (Canonicalize(ctx, string.intrinsic::fromCharCode(i)) == c) return true; return false; } const lo : string, hi : string; } class CharsetAdhoc! extends CharsetMixin implements CharsetMatcher diff --git a/builtins/String.es b/builtins/String.es --- a/builtins/String.es +++ b/builtins/String.es @@ -37,32 +37,30 @@ * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * Status: complete; not reviewed; not tested. * * Strings are constructed by: - * new String + magic::setStringValue - * magic::fromCharCode - * magic::stringAppend + * new String + helper::setStringValue + * helper::fromCharCode + * helper::stringAppend * * A string's length is obtained by: - * magic::stringLength + * helper::stringLength * * Strings are picked apart by: - * magic::charCodeAt + * helper::charCodeAt * - * (We would expect "+" to map to magic::stringAppend().) + * (We would expect "+" to map to helper::stringAppend().) */ - use default namespace public; use namespace intrinsic; - use namespace ECMAScript4_Internal; __ES4__ type AnyString = (string|String!); /* The January 2007 meeting resolved that String is open and * dynamic. */ dynamic class String { diff --git a/builtins/Unicode.es b/builtins/Unicode.es --- a/builtins/Unicode.es +++ b/builtins/Unicode.es @@ -28,17 +28,17 @@ * * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * */ - use namespace ECMAScript4_Internal; + use namespace helper; use namespace intrinsic; use namespace Unicode; use default namespace Unicode; /* Unicode line break characters */ const linebreaks = "\u000A\u000D\u0085\u2028\u2029"; /* Unicode space characters, less character values below SPACE */ diff --git a/builtins/UnicodeCasemapping.es b/builtins/UnicodeCasemapping.es --- a/builtins/UnicodeCasemapping.es +++ b/builtins/UnicodeCasemapping.es @@ -1,11 +1,11 @@ /* Generated by ../unicode/casemapping.as */ - use namespace ECMAScript4_Internal; + use namespace helper; use default namespace Unicode; var upperTbl = []; var lowerTbl = []; function initUpperTbl() { let u : [] = upperTbl; if (u.length > 0) return; u[0x61]=0x0041; diff --git a/builtins/UnicodeTbl.es b/builtins/UnicodeTbl.es --- a/builtins/UnicodeTbl.es +++ b/builtins/UnicodeTbl.es @@ -48,17 +48,17 @@ * * Case mapping tables: * * ... * * The raw unicode character data and the scripts to process them are * in the directory ../unicode. */ - use namespace ECMAScript4_Internal; + use namespace helper; use namespace intrinsic; use namespace Unicode; use default namespace Unicode; function makeTable(data) { var t = []; t.watermark = -1; t.data = data; diff --git a/builtins/Vector.es b/builtins/Vector.es --- a/builtins/Vector.es +++ b/builtins/Vector.es @@ -32,18 +32,16 @@ * End of Terms and Conditions * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * Status: not reviewed against specs, not tested. */ - use namespace ECMAScript4_Internal; - __ES4__ class Vector. { public function Vector(length: double=0, fixed: boolean=false) : fixed = fixed { informative::setLength(length); } @@ -495,10 +493,9 @@ informative function getValue(idx: double) storage[idx]; informative function setValue(idx: double, val: T) storage[idx] = val; private const storage = new Array(); } -} diff --git a/builtins/boolean_primitive.es b/builtins/boolean_primitive.es --- a/builtins/boolean_primitive.es +++ b/builtins/boolean_primitive.es @@ -40,30 +40,30 @@ */ use default namespace public; use namespace intrinsic; /* * The boolean class is final and non-dynamic because most * implementations will in fact represent boolean objects not - * using objects, but using some magic tagged value, of which + * using objects, but using some primitive tagged value, of which * there will be only two, one for "true" and the other for * "false". * * The literals true and false denote instances of this class. */ __ES4__ final class boolean! { // IMPLEMENTATION ARTIFACT: A getter because boolean is loaded before int. static function get length() { return 1 } /* Don't remove this function boolean(value=false) - magic::newBoolean(value) + helper::newBoolean(value) */ /* E262-3 15.6.1: The boolean Constructor Called as a Function. */ meta static function invoke(x=null) : boolean (x is boolean) ? x : new boolean(x); /* E262-4 early-binding variant. */ override intrinsic function toString() : string diff --git a/builtins/decimal.es b/builtins/decimal.es --- a/builtins/decimal.es +++ b/builtins/decimal.es @@ -36,19 +36,17 @@ * * Copyright (c) 2007 Adobe Systems Inc., The Mozilla Foundation, Opera * Software ASA, and others. * * * Status: Incomplete (toExponential, toPrecision, toFixed; constants); not reviewed; not tested. */ - use default namespace public; use namespace intrinsic; - use namespace ECMAScript4_Internal; // The [[Prototype]] of "decimal" is Number.[[Prototype]] // Don't add prototype methods or properties here! __ES4__ final class decimal! { static const length = 1; @@ -66,17 +64,17 @@ static const LOG2E: decimal = 1.442695040888963407359924681001892m; /* Approximately */ static const LOG10E: decimal = 0.4342944819032518276511289189166051m; /* Approximately */ static const PI: decimal = 3.141592653589793238462643383279503m; /* Approximately */ static const SQRT1_2: decimal = 0.7071067811865475244008443621048490m;/* Approximately */ static const SQRT2: decimal = 1.414213562373095048801688724209698m; /* Approximately */ /* Don't remove this function decimal(value=false) - magic::newDecimal(value) + helper::newDecimal(value) */ /* E262-3 15.7.1.1: The decimal Constructor Called as a Function */ meta static function invoke(x=0m) (x is decimal) ? x : new decimal(x); override intrinsic function toString(radix = 10) : string { if (radix === 10 || radix === undefined) diff --git a/builtins/double.es b/builtins/double.es --- a/builtins/double.es +++ b/builtins/double.es @@ -41,19 +41,17 @@ * Status: Incomplete. * * TO DO: * - toPrecision and toExponential currently punt to native code * but are mostly expressible in ECMAScript. toFixed shows how this * might be done. */ - use default namespace public; use namespace intrinsic; - use namespace ECMAScript4_Internal; // The [[Prototype]] of "double" is Number.[[Prototype]] // Don't add prototype methods or properties here! __ES4__ final class double! { static const length = 1; @@ -69,17 +67,17 @@ static const LOG2E: double = 1.4426950408889634; /* Approximately */ static const LOG10E: double = 0.4342944819032518; /* Approximately */ static const PI: double = 3.1415926535897932; /* Approximately */ static const SQRT1_2: double = 0.7071067811865476;/* Approximately */ static const SQRT2: double = 1.4142135623730951; /* Approximately */ /* Don't remove this function double(value=false) - magic::newDouble(value) + helper::newDouble(value) */ /* E262-3 15.7.1.1: The double Constructor Called as a Function */ meta static function invoke(x=0d) (x is double) ? x : new double(x); override intrinsic function toString(radix = 10) : string { if (radix === 10 || radix === undefined) diff --git a/builtins/string_primitive.es b/builtins/string_primitive.es --- a/builtins/string_primitive.es +++ b/builtins/string_primitive.es @@ -40,54 +40,53 @@ * Software ASA, and others. * * * FIXME: add "substr" * * Status: incomplete; not reviewed; not tested. * * Strings are constructed by: - * new string + magic::setStringValue - * magic::fromCharCode - * magic::stringAppend + * the primitive string ctor + * informative::fromCharCode + * informative::stringAppend * * A string's length is obtained by: - * magic::stringLength + * informative::stringLength * * strings are picked apart by: - * magic::charCodeAt + * informative::charCodeAt * - * (We would expect "+" to map to magic::stringAppend().) + * (We would expect "+" to map to informative::stringAppend().) * * Note, most string functions are "generic". This is implemented as * either a static method on the "string" class that treats a "self" * argument generically according to the spec, or as a private static * method ditto. We avoid implementing generic behavior in instance * methods of the "string" class because it implies too much about the * type of "this". */ - use default namespace public; + use namespace helper; use namespace intrinsic; - use namespace ECMAScript4_Internal; use namespace Unicode; use namespace RegExpInternals; __ES4__ final class string! { // A getter because string is loaded before int static function get length() { return 1 } /* E262-3 15.5.1: The String Constructor Called as a Function */ meta static function invoke(value="") (value is string) ? value : new string(value); /* Don't remove this function string(value="") - magic::newString(value) + helper::newString(value) */ /* E262-3 15.5.3.2: String.fromCharCode E262-4 draft proposals:bug_fixes - FUNCTION.LENGTH */ static function fromCharCode(...codes) string.helper::fromCharCode(codes); @@ -95,17 +94,17 @@ string.helper::fromCharCode(codes); /* IMPLEMENTATION DEVICE. This method is not private, * it is called from methods in 'String'. */ helper static function fromCharCode(codes: Array): string { let s = ""; for (let i=0, limit=codes.length ; i < limit ; ++i) - s += magic::fromCharCode(intrinsic::toUint(codes[i] & 0x1FFFFF)); + s += informative::fromCharCode(intrinsic::toUint(codes[i] & 0x1FFFFF)); return s; } /* E262-3 15.5.4.2: String.prototype.toString */ /* prototype function toString(this : string) this; @@ -137,33 +136,33 @@ intrinsic function charAt(pos: double = 0) : string string.charAt(this, pos); static function charAt(self, pos) : string { let S = string(self); let ipos = helper::toInteger(pos); if (ipos < 0 || ipos >= S.length) return ""; - return magic::fromCharCode(magic::charCodeAt(S, intrinsic::toUint(ipos))); + return informative::fromCharCode(informative::charCodeAt(S, intrinsic::toUint(ipos))); } /* E262-3 15.5.4.5: String.prototype.charCodeAt E262-4 draft proposals:static_generics */ intrinsic function charCodeAt(pos: double = 0) : double string.charCodeAt(this, pos); static function charCodeAt(self, pos) : double { let S = string(self); let ipos = helper::toInteger(pos); if (ipos < 0 || ipos >= S.length) return NaN; - return magic::charCodeAt(S, intrinsic::toUint(ipos)); + return informative::charCodeAt(S, intrinsic::toUint(ipos)); } /* E262-3 15.5.4.6: String.prototype.concat. E262-4 draft proposals:static_generics E262-4 draft proposals:bug_fixes - FUNCTION.LENGTH */ /* @@ -208,17 +207,17 @@ let slen = S.length; let m = Math.min(Math.max(pos, 0), slen); let sslen = SS.length; let lim = slen - sslen + 1; outer: for ( let k = m ; k < lim ; k++ ) { for ( let w = 0 ; w < sslen ; w++ ) { - if (magic::charCodeAt(S, intrinsic::toUint(k+w)) !== magic::charCodeAt(SS, intrinsic::toUint(w))) + if (informative::charCodeAt(S, intrinsic::toUint(k+w)) !== informative::charCodeAt(SS, intrinsic::toUint(w))) continue outer; } return k; } return -1; } @@ -243,17 +242,17 @@ let m = Math.min(Math.max(pos, 0), slen); if (sslen > slen) return -1; outer: for ( let k = Math.min(m, slen-sslen) ; k >= 0 ; k-- ) { for ( let w = 0 ; w < sslen ; w++ ) { - if (magic::charCodeAt(S, intrinsic::toUint(k+w)) !== magic::charCodeAt(SS, intrinsic::toUint(w))) + if (informative::charCodeAt(S, intrinsic::toUint(k+w)) !== informative::charCodeAt(SS, intrinsic::toUint(w))) continue outer; } return k; } return -1; } /* E262-3 15.5.4.9: String.prototype.localeCompare @@ -665,22 +664,22 @@ intrinsic function toLowerCase() : string string.toLowerCase(this); static function toLowerCase(self): string { let S = string(self); let s = ""; for ( let i=0, limit=S.length ; i < limit ; i++ ) { - let u = Unicode::toLowerCaseCharCode(magic::charCodeAt(S,intrinsic::toUint(i))); + let u = Unicode::toLowerCaseCharCode(informative::charCodeAt(S,intrinsic::toUint(i))); if (u is double) - s += magic::fromCharCode(intrinsic::toUint(u)); + s += informative::fromCharCode(intrinsic::toUint(u)); else { for ( let j=0 ; j < u.length ; j++ ) - s += magic::fromCharCode(u[j]); + s += informative::fromCharCode(u[j]); } } return s; } /* E262-3 15.5.4.17: String.prototype.toLocaleLowerCase E262-4 draft proposals:static_generics @@ -709,22 +708,22 @@ intrinsic function toUpperCase() : string string.toUpperCase(this); static function toUpperCase(self): string { let S = string(self); let s = ""; for ( let i=0, limit=S.length ; i < limit ; i++ ) { - let u = Unicode::toUpperCaseCharCode(magic::charCodeAt(S,intrinsic::toUint(i))); + let u = Unicode::toUpperCaseCharCode(informative::charCodeAt(S,intrinsic::toUint(i))); if (u is double) - s += magic::fromCharCode(intrinsic::toUint(u)); + s += informative::fromCharCode(intrinsic::toUint(u)); else { for ( let j=0 ; j < u.length ; j++ ) - s += magic::fromCharCode(u[j]); + s += informative::fromCharCode(u[j]); } } return s; } /* E262-3 15.5.4.19: String.prototype.toLocaleUpperCase E262-4 draft proposals:static_generics @@ -768,17 +767,17 @@ for ( j=len-1 ; j >= i && Unicode::isTrimmableSpace(s.charAt(j)) ; j-- ) ; return s.substring(i,j+1); } /* E262-3 15.5.5.1: length. */ function get length() : double - magic::stringLength(this); + informative::stringLength(this); /* Catchall indexing operation. */ meta function get(pos) { let x = double(pos); if (isNaN(x)) return undefined; return charAt(x); } diff --git a/defn.sml b/defn.sml --- a/defn.sml +++ b/defn.sml @@ -121,47 +121,39 @@ type ENV = defaultNamespace: Ast.NAMESPACE, program: Fixture.PROGRAM, func: Ast.FUNC option } val (initRib:Ast.RIB) = [ (* This is the new name that non-backward-compatibly pollutes the ES3 unqualified global. *) - (Ast.PropName Name.public_ES4_, Ast.NamespaceFixture Name.ES4NS), + (Ast.PropName Name.public_ES4, Ast.NamespaceFixture Name.ES4NS), (* These are the namespaces in ES4 that have spec-defined, normative roles and meanings. *) - (Ast.PropName Name.ES4_public_, Ast.NamespaceFixture Name.publicNS), - (Ast.PropName Name.ES4_meta_, Ast.NamespaceFixture Name.metaNS), - (Ast.PropName Name.ES4_magic_, Ast.NamespaceFixture Name.magicNS), - (Ast.PropName Name.ES4_intrinsic_, Ast.NamespaceFixture Name.intrinsicNS), + (Ast.PropName Name.ES4_public, Ast.NamespaceFixture Name.publicNS), + (Ast.PropName Name.ES4_meta, Ast.NamespaceFixture Name.metaNS), + (Ast.PropName Name.ES4_intrinsic, Ast.NamespaceFixture Name.intrinsicNS), (* - * This is the namespace in ES4 that holds all additional non-normative namespaces of the - * standard library - *) - - (Ast.PropName Name.ES4_ECMAScript4_Internal_, Ast.NamespaceFixture Name.ECMAScript4_InternalNS), - - (* - * This is a namespace that *would* be defined in the standard library except that we - * define a bunch of native methods in it, and therefore wish to have access to it here. - * In theory we could back off and look it up once the interpreter boots. It's just here + * These are a namespaces that *would* be defined in the standard library except that we + * define a bunch of native methods in them, and therefore wish to have access to them here. + * In theory we could back off and look it up once the interpreter boots. They're just here * to be convenient. *) - (Ast.PropName Name.ECMAScript4_Internal_informative_, Ast.NamespaceFixture Name.informativeNS), + (Ast.PropName Name.ES4_helper, Ast.NamespaceFixture Name.helperNS), + (Ast.PropName Name.ES4_informative, Ast.NamespaceFixture Name.informativeNS), (* * These are namespaces that *could* be defined in the boot process, but that code is * sufficiently tangly and order-sensitive that it's much easier to define them here. *) - (Ast.PropName Name.ECMAScript4_Internal_helper_, Ast.NamespaceFixture Name.helperNS), - (Ast.PropName Name.ECMAScript4_Internal_Unicode_, Ast.NamespaceFixture Name.UnicodeNS), - (Ast.PropName Name.ECMAScript4_Internal_RegExpInternals_, Ast.NamespaceFixture Name.RegExpInternalsNS) + (Ast.PropName Name.ES4_Unicode, Ast.NamespaceFixture Name.UnicodeNS), + (Ast.PropName Name.ES4_RegExpInternals, Ast.NamespaceFixture Name.RegExpInternalsNS) ] fun getFullRibs (env:ENV) : Ast.RIBS = let val { innerRibs, outerRibs, ... } = env in @@ -252,16 +244,19 @@ and defNameExpr (env:ENV) Ast.UnqualifiedName { identifier, ... } => Ast.UnqualifiedName { identifier=identifier, openNamespaces=openNamespaces, globalNames=globalNames } | Ast.QualifiedName { namespace, identifier } => Ast.QualifiedName { namespace = defNamespaceExpr env namespace, identifier = identifier } + + | Ast.ResolvedName name => + Ast.ResolvedName name end fun resolve (env:ENV) (nameExpr:Ast.NAME_EXPRESSION) : (Ast.RIBS * Ast.NAME * Ast.FIXTURE) = Fixture.resolveNameExpr (getFullRibs env) (defNameExpr env nameExpr) fun resolveNsExprToNamespace (env:ENV) @@ -1160,24 +1155,24 @@ and defVar (env:ENV) (ns:Ast.NAMESPACE) (var:Ast.BINDING) : (Ast.FIXTURE_NAME*Ast.FIXTURE) = case var of Ast.Binding { ident, ty } => let val ty':Ast.TYPE = defTypeExpr env ty - val readOnly' = case kind of - Ast.Const => true - | Ast.LetConst => true - | _ => false + val writable' = case kind of + Ast.Const => false + | Ast.LetConst => false + | _ => true val offset = (#tempOffset env) val name' = fixtureNameFromPropIdent env (SOME ns) ident offset in - (name', Ast.ValFixture {ty=ty',readOnly=readOnly'}) + (name', Ast.ValFixture {ty=ty',writable=writable'}) end (* (BINDING list * INIT_STEP list) -> (RIB * INITS) and INIT_STEP = (* used to encode init of bindings *) InitStep of (BINDING_IDENTIFIER * EXPRESSION) | AssignStep of (EXPRESSION * EXPRESSION) @@ -1428,17 +1423,17 @@ and defFunc (env:ENV) native=native, generator=generator, loc=loc}) end (* FUNC_DEFN - A function can be bound or unbound, writable or readonly, have constrained or + A function can be bound or unbound, writable or not, have constrained or unconstrainted 'this'. In all cases however a function definition specifies the function's name, type, and implementation Edition 3 style functions are unbound, writable, and have an unconstratined 'this'. The fixture that holds one is of type *, and it is initialized by an assignment expression in the preamble of the defining block. *) @@ -1463,44 +1458,44 @@ and defFuncDefn (env:ENV) setter = NONE } | Ast.Set => Ast.VirtualValFixture { ty = AstQuery.singleParamTyOfFuncTy ty, getter = NONE, setter = SOME newFunc } | Ast.Ordinary => let - val (ftype, isReadOnly) = + val (ftype, isWritable) = if (#kind f) = Ast.Var then (* e3 style writeable function *) - (makeTy env (Ast.AnyType), false) + (makeTy env (Ast.AnyType), true) else (* read only, method *) - (ty, true) + (ty, false) in Ast.MethodFixture { func = newFunc, ty = ftype, - readOnly = isReadOnly, + writable = isWritable, final = (#final f), override = (#override f)} end | Ast.Call => Ast.MethodFixture { func = newFunc, ty = ty, - readOnly = true, + writable = false, final = true, override = false} | Ast.Has => Ast.MethodFixture { func = newFunc, ty = ty, - readOnly = true, + writable = false, final = true, override = false} | Ast.Operator => LogErr.unimplError ["operator function not implemented"] in [(newName, fixture)] end diff --git a/eval.sml b/eval.sml --- a/eval.sml +++ b/eval.sml @@ -333,19 +333,19 @@ fun allocRib (regs:Mach.REGS) val Mach.Obj { props, ident, ... } = obj val _ = traceConstruct ["allocating rib on object id #", Int.toString ident] val _ = if (Mach.isBooting regs andalso getObjId (#global regs) = getObjId obj) then () else Mach.setRib obj (f @ (Mach.getRib obj)) val {scope, ...} = regs val methodScope = extendScope scope obj Mach.ActivationScope - val attrs0 = { dontDelete = true, - dontEnum = true, - readOnly = true, + val attrs0 = { removable = false, + enumerable = false, + writable = false, fixed = true } fun allocFixture (n, f) = case n of Ast.TempName t => allocTemp regs f t temps | Ast.PropName pn => let val _ = traceConstruct ["allocating fixture for prop ", fmtName pn] fun allocProp state p = @@ -381,63 +381,63 @@ fun allocRib (regs:Mach.REGS) in case f of Ast.TypeFixture (typeParams, ty) => allocProp "type" { ty = normalize regs ty, (* FIXME: handle typeParams *) state = Mach.TypeProp, attrs = attrs0 } - | Ast.MethodFixture { func, ty, readOnly, ... } => + | Ast.MethodFixture { func, ty, writable, ... } => let val Ast.Func { native, ... } = func val p = if native then Mach.NativeFunctionProp (Mach.getNativeFunction pn) else Mach.MethodProp (newFunClosure methodScope func this) in allocProp "method" { ty = normalize regs ty, state = p, - attrs = { dontDelete = true, - dontEnum = true, - readOnly = readOnly, + attrs = { removable = false, + enumerable = false, + writable = writable, fixed = true } } end - | Ast.ValFixture { ty, readOnly, ... } => + | Ast.ValFixture { ty, writable, ... } => let val ty = evalTy regs ty in allocProp "value" { ty = ty, - state = if readOnly - then Mach.UninitProp - else valAllocState regs ty, - attrs = { dontDelete = true, - dontEnum = true, - readOnly = readOnly, + state = if writable + then valAllocState regs ty + else Mach.UninitProp, + attrs = { removable = false, + enumerable = false, + writable = writable, fixed = true } } end | Ast.VirtualValFixture { ty, getter, setter, ... } => let val getFn = case getter of NONE => NONE | SOME f => SOME (newFunClosure methodScope f this) val setFn = case setter of NONE => NONE | SOME f => SOME (newFunClosure methodScope f this) in allocProp "virtual value" { ty = evalTy regs ty, state = Mach.VirtualValProp { getter = getFn, setter = setFn }, - attrs = { dontDelete = true, - dontEnum = true, - readOnly = true, + attrs = { removable = false, + enumerable = false, + writable = false, fixed = true } } end | Ast.ClassFixture cls => let val Ast.Cls {classRib, ...} = cls val _ = traceConstruct ["allocating class object for class ", fmtName pn] val classObj = needObj regs (newClass regs scope cls) @@ -681,25 +681,25 @@ and allocSpecial (regs:Mach.REGS) end and asArrayIndex (v:Mach.VALUE) : Word32.word = case v of Mach.Object (Mach.Obj { tag, ... }) => (case tag of - Mach.MagicTag (Mach.Double d) => + Mach.PrimitiveTag (Mach.Double d) => if Mach.isIntegral d andalso 0.0 <= d andalso d < 4294967295.0 then doubleToWord d else 0wxFFFFFFFF - | Mach.MagicTag (Mach.Decimal d) => + | Mach.PrimitiveTag (Mach.Decimal d) => 0wxFFFFFFFF (* FIXME *) | _ => 0wxFFFFFFFF) | _ => 0wxFFFFFFFF and hasOwnValue (obj:Mach.OBJ) (n:Ast.NAME) : bool = @@ -962,62 +962,62 @@ and setValueOrVirtual (regs:Mach.REGS) : unit = let val Mach.Obj { props, ... } = obj in case Mach.findProp props name of SOME existingProp => let val { state, attrs, ty, ... } = existingProp - val { readOnly, ... } = attrs + val { writable, ... } = attrs fun newProp _ = { state = Mach.ValProp (checkAndConvert regs v ty), ty = ty, attrs = attrs } fun write _ = let val np = newProp() in Mach.delProp props name; Mach.addProp props name np end in case state of Mach.MethodProp _ => - if readOnly - then throwExn (newTypeErr regs ["setValue on read-only method property: ", + if writable + then write () (* ES3 style mutable fun props are readOnly *) + else throwExn (newTypeErr regs ["setValue on non-writable method property: ", LogErr.name name]) - else write () (* ES3 style mutable fun props are readOnly *) | Mach.VirtualValProp { setter, ... } => if doVirtual then case setter of NONE => throwExn (newTypeErr regs ["attempting to write to a virtual property without a setter: ", LogErr.name name]) | SOME s => (invokeFuncClosure (withThis regs obj) s NONE [v]; ()) else write () | Mach.ValProp _ => - if readOnly - then () (* ignore it *) - else write () + if writable + then write () + else () (* ignore it *) | _ => badPropAccess regs "setValue" name state end | NONE => let fun newProp _ = let val prop = { state = Mach.ValProp v, ty = Ast.AnyType, - attrs = { dontDelete = false, - dontEnum = false, - readOnly = false, + attrs = { removable = true, + enumerable = true, + writable = true, fixed = false } } in if isDynamic regs obj then Mach.addProp props name prop else throwExn (newTypeErr regs ["attempting to add property to non-dynamic object"]) end fun catchAll _ = (* FIXME: need to use builtin Name.es object here, when that file exists. *) @@ -1066,17 +1066,17 @@ and defValue (regs:Mach.REGS) if not (Mach.hasProp props name) then error regs ["defValue on missing property: ", LogErr.name name] else (* * defProp is similar to setProp, but follows different rules: * * - No adding props, only overwriting allocated ones * - Permitted to write to uninitialized props - * - Permitted to write to read-only (const) props + * - Permitted to write to non-writable (const) props *) let val existingProp = Mach.getProp props name val ty = (#ty existingProp) val newProp = { state = Mach.ValProp (checkAndConvert regs v ty), ty = (#ty existingProp), attrs = (#attrs existingProp) } fun writeProp _ = @@ -1220,22 +1220,22 @@ and newRegExp (regs:Mach.REGS) (flags:Ustring.STRING) : Mach.VALUE = instantiateGlobalClass regs Name.public_RegExp [newString regs pattern, newString regs flags] and newBuiltin (regs:Mach.REGS) (n:Ast.NAME) - (m:Mach.MAGIC option) + (m:Mach.PRIMITIVE option) : Mach.VALUE = let val args = case m of NONE => [] - | SOME m' => [Mach.Object (Mach.newObject (Mach.MagicTag m') Mach.Null)] + | SOME m' => [Mach.Object (Mach.newObject (Mach.PrimitiveTag m') Mach.Null)] in instantiateGlobalClass regs n args end (* SPEC fun evalDecimalLiteral (env: ENV) (decimal: Decimal.DEC) @@ -1404,62 +1404,62 @@ and newFunctionFromClosure (regs:Mach.RE (closure:Mach.FUN_CLOSURE) = let val (funClass, funClassClosure) = getFunctionClassObjectAndClosure regs val funProto = getPrototype regs funClass (* This is a little weird: we're construction function f, but f.prototype needs to * point to an instance of public::Function -- in order to behave "functiony" in the * sense of prototypes and private implementation methods -- even though f.prototype - * is not going to have any function *magic* associated with it. + * is not going to have any function *primitive* associated with it. * * We also wire the new f.prototype.__proto__ value to Object.prototype. * * f.__proto__ = Function.prototype - * f.prototype = (new Function()) // essentially, minus any function magic + * f.prototype = (new Function()) // essentially, minus any function primitive * *) val originalObjectProto = getOriginalObjectPrototype regs val newProtoObj = constructStandard regs funClass funClassClosure originalObjectProto [] val newProto = Mach.Object newProtoObj val _ = traceConstruct ["built new prototype chained to Object.prototype"] - val tag = Mach.MagicTag (Mach.Function closure) + val tag = Mach.PrimitiveTag (Mach.Function closure) val obj = constructStandardWithTag regs funClass funClassClosure tag funProto [] val Mach.Obj { props=newProtoProps, ... } = newProtoObj in setPrototype regs obj newProto; setValueOrVirtual regs newProtoObj Name.public_constructor (Mach.Object obj) false; - Mach.setPropDontEnum newProtoProps Name.public_constructor true; + Mach.setPropEnumerable newProtoProps Name.public_constructor false; Mach.Object obj end and newFunctionFromFunc (regs:Mach.REGS) (scope:Mach.SCOPE) (f:Ast.FUNC) : Mach.VALUE = newFunctionFromClosure regs (newFunClosure scope f NONE) and newNativeFunction (regs:Mach.REGS) (f:Mach.NATIVE_FUNCTION) = let val (classObj, classClosure) = getFunctionClassObjectAndClosure regs - val tag = Mach.MagicTag (Mach.NativeFunction f) + val tag = Mach.PrimitiveTag (Mach.NativeFunction f) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in Mach.Object obj end and getIteratorNamespace (regs:Mach.REGS) : Ast.NAMESPACE = - Mach.needNamespace (getValue regs (#global regs) Name.ES4_iterator_) + Mach.needNamespace (getValue regs (#global regs) Name.ES4_iterator) and getStopIteration (regs:Mach.REGS) = getValue regs (#global regs) { id = Ustring.StopIteration_, ns = getIteratorNamespace regs } and isStopIteration (regs:Mach.REGS) (v:Mach.VALUE) : bool = @@ -1492,17 +1492,17 @@ and newGenerator (regs:Mach.REGS) : Mach.VALUE = let val classObj = case !(Mach.getGeneratorClassSlot regs) of NONE => error regs ["cannot find helper::GeneratorImpl"] | SOME ob => ob val classClosure = Mach.needClass (Mach.Object classObj) val objRef = ref (Mach.newObjectNoTag ()) val gen = newGen (fn () => execBody (!objRef)) - val tag = Mach.MagicTag (Mach.Generator gen) + val tag = Mach.PrimitiveTag (Mach.Generator gen) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in objRef := obj; Mach.Object obj end and yieldFromGen (regs:Mach.REGS) @@ -1587,40 +1587,40 @@ and closeGen (regs:Mach.REGS) *) and toUstring (regs:Mach.REGS) (v:Mach.VALUE) : Ustring.STRING = case v of Mach.Undef => Ustring.undefined_ | Mach.Null => Ustring.null_ - | Mach.Object (Mach.Obj { tag = (Mach.MagicTag mag), ... }) => - Mach.magicToUstring mag + | Mach.Object (Mach.Obj { tag = (Mach.PrimitiveTag prim), ... }) => + Mach.primitiveToUstring prim | _ => toUstring regs (toPrimitiveWithStringHint regs v) (* * ES-262-3 9.2: The ToBoolean operation *) and toBoolean (v:Mach.VALUE) : bool = case v of Mach.Undef => false | Mach.Null => false | Mach.Object (Mach.Obj { tag, ... }) => (case tag of - Mach.MagicTag (Mach.Boolean b) => b - | Mach.MagicTag (Mach.Double x) => + Mach.PrimitiveTag (Mach.Boolean b) => b + | Mach.PrimitiveTag (Mach.Double x) => not (Real64.==(x,(Real64.fromInt 0)) orelse Real64.isNan x) - | Mach.MagicTag (Mach.Decimal x) => + | Mach.PrimitiveTag (Mach.Decimal x) => not ((x = Decimal.zero) orelse (Decimal.isNaN x)) - | Mach.MagicTag (Mach.String s) => + | Mach.PrimitiveTag (Mach.String s) => not (Ustring.stringLength s = 0) | _ => true) (* * ES-262-3 8.6.2.6: The [[DefaultValue]] operation *) @@ -1691,25 +1691,25 @@ and toNumeric (regs:Mach.REGS) fun zero _ = newDouble regs (Real64.fromInt 0) fun one _ = newDouble regs (Real64.fromInt 1) in case v of Mach.Undef => NaN () | Mach.Null => zero () | Mach.Object (Mach.Obj { tag, ... }) => (case tag of - Mach.MagicTag (Mach.Double _) => v - | Mach.MagicTag (Mach.Decimal _) => v - | Mach.MagicTag (Mach.Boolean false) => zero () - | Mach.MagicTag (Mach.Boolean true) => one () + Mach.PrimitiveTag (Mach.Double _) => v + | Mach.PrimitiveTag (Mach.Decimal _) => v + | Mach.PrimitiveTag (Mach.Boolean false) => zero () + | Mach.PrimitiveTag (Mach.Boolean true) => one () (* * FIXME: This is not the correct definition of ToNumber applied to string. * See ES-262-3 9.3.1. We need to talk it over. *) - | Mach.MagicTag (Mach.String us) => + | Mach.PrimitiveTag (Mach.String us) => let val s = Ustring.toAscii us in case Real64.fromString s of SOME s' => newDouble regs s' | NONE => NaN () end (* * FIXME: ES-262-3 9.3 defines ToNumber on objects in terms of primitives. We've @@ -1726,28 +1726,28 @@ and toDecimal (v:Mach.VALUE) Decimal.defaultPrecision Decimal.defaultRoundingMode in case v of Mach.Undef => Decimal.NaN | Mach.Null => Decimal.zero | Mach.Object (Mach.Obj { tag, ... }) => (case tag of - Mach.MagicTag (Mach.Double d) => + Mach.PrimitiveTag (Mach.Double d) => (* NB: Lossy. *) (case fromStr (Real64.toString d) of SOME d' => d' | NONE => Decimal.NaN) - | Mach.MagicTag (Mach.Decimal d) => d - | Mach.MagicTag (Mach.Boolean false) => Decimal.zero - | Mach.MagicTag (Mach.Boolean true) => Decimal.one + | Mach.PrimitiveTag (Mach.Decimal d) => d + | Mach.PrimitiveTag (Mach.Boolean false) => Decimal.zero + | Mach.PrimitiveTag (Mach.Boolean true) => Decimal.one (* * FIXME: This is not the correct definition either. See toNumeric. *) - | Mach.MagicTag (Mach.String us) => + | Mach.PrimitiveTag (Mach.String us) => let val s = Ustring.toAscii us in case fromStr s of SOME s' => s' | NONE => Decimal.NaN end (* @@ -1764,28 +1764,28 @@ and toDouble (v:Mach.VALUE) fun zero _ = (Real64.fromInt 0) fun one _ = (Real64.fromInt 1) in case v of Mach.Undef => NaN () | Mach.Null => zero () | Mach.Object (Mach.Obj {tag, ...}) => (case tag of - Mach.MagicTag (Mach.Double d) => d - | Mach.MagicTag (Mach.Decimal d) => + Mach.PrimitiveTag (Mach.Double d) => d + | Mach.PrimitiveTag (Mach.Decimal d) => (* NB: Lossy. *) (case Real64.fromString (Decimal.toString d) of SOME d' => d' | NONE => NaN ()) - | Mach.MagicTag (Mach.Boolean false) => zero () - | Mach.MagicTag (Mach.Boolean true) => one () + | Mach.PrimitiveTag (Mach.Boolean false) => zero () + | Mach.PrimitiveTag (Mach.Boolean true) => one () (* * FIXME: This is not the correct definition either. See toNumeric. *) - | Mach.MagicTag (Mach.String us) => + | Mach.PrimitiveTag (Mach.String us) => let val s = Ustring.toAscii us in case Real64.fromString s of SOME s' => s' | NONE => NaN() end (* @@ -2496,17 +2496,17 @@ and bindTypes (regs:Mach.REGS) val argFixtures = map (fn t => Ast.TypeFixture ([], t)) typeArgs val typeRib = ListPair.zip (paramFixtureNames, argFixtures) val _ = allocObjRib regs scopeObj NONE typeRib in env end (* Types of various kinds are have a dual representation: both as TYPEs - * and as a magic within Mach.VALUE, such as a CLS_CLOSURE. + * and as a primitive within Mach.VALUE, such as a CLS_CLOSURE. * Really would love to unify these two representations, * which might enable nice downstream simplifications. - cf *) and applyTypesToClass (regs:Mach.REGS) (classVal:Mach.VALUE) (typeArgs:Ast.TYPE list) : Mach.VALUE = @@ -2673,17 +2673,17 @@ and evalYieldExpr (regs:Mach.REGS) (expr:Ast.EXPRESSION option) : Mach.VALUE = let val { thisGen, ... } = regs in case thisGen of SOME (Mach.Obj { tag, ... }) => (case tag of - Mach.MagicTag (Mach.Generator gen) => + Mach.PrimitiveTag (Mach.Generator gen) => let val v = case expr of NONE => Mach.Undef | SOME expr => evalExpr regs expr in yieldFromGen regs gen v end | _ => error regs ["missing Generator tag on object in yield"]) @@ -2733,19 +2733,19 @@ and evalLiteralArrayExpr (regs:Mach.REGS (* FIXME: this is probably incorrect wrt. Array typing rules. *) val ty = if n < (length tyExprs) then List.nth (tyExprs, n) else (if (length tyExprs) > 0 then List.last tyExprs else Ast.AnyType) val prop = { ty = ty, state = Mach.ValProp v, - attrs = { dontDelete = false, - dontEnum = false, - readOnly = false, + attrs = { removable = true, + enumerable = true, + writable = true, fixed = false } } in Mach.addProp props name prop; putVal (n+1) vs end val numProps = putVal 0 vals in setValue regs obj Name.public_length (newDouble regs (Real64.fromInt numProps)); @@ -2789,17 +2789,17 @@ and evalLiteralObjectExpr (regs:Mach.REG val proto = getPrototype regs newClassObj val obj = constructStandardWithTag regs newClassObj newClassClosure newTag proto [] val (Mach.Obj {props, ...}) = obj fun getPropState (v:Mach.VALUE) : Mach.PROPERTY_STATE = case v of Mach.Object (Mach.Obj {tag, ...}) => (case tag of - Mach.MagicTag (Mach.Function closure) => + Mach.PrimitiveTag (Mach.Function closure) => let val Ast.Func { name, ... } = (#func closure) val kind = (#kind name) in if kind = Ast.Get then Mach.VirtualValProp { getter = SOME closure, setter = NONE } else if kind = Ast.Set @@ -2834,19 +2834,19 @@ and evalLiteralObjectExpr (regs:Mach.REG let val const = case kind of Ast.Const => true | Ast.LetConst => true | _ => false val (n:Ast.NAME) = evalNameExpr regs name val v = evalExpr regs init val ty = searchFieldTypes n tyExprs - val attrs = { dontDelete = const, - dontEnum = false, - readOnly = const, + val attrs = { removable = not const, + enumerable = true, + writable = not const, fixed = false } val state = getPropState v val existingProp = Mach.findProp props n val prop = { ty = ty, attrs = attrs, state = mergePropState existingProp state } in Mach.addProp props n prop @@ -2889,21 +2889,21 @@ and evalLiteralExpr (regs:Mach.REGS) case lit of Ast.LiteralNull => Mach.Null | Ast.LiteralUndefined => Mach.Undef | Ast.LiteralDouble r => newDouble regs r | Ast.LiteralDecimal d => newDecimal regs d | Ast.LiteralBoolean b => newBoolean regs b | Ast.LiteralString s => newString regs s | Ast.LiteralArray {exprs=Ast.ListExpr exprs, ty} => evalLiteralArrayExpr regs exprs ty (* FIXME handle comprehensions *) + | Ast.LiteralArray _ => LogErr.unimplError ["unhandled non-ListExpr array literal"] + | Ast.LiteralXML _ => LogErr.unimplError ["unhandled literal XML"] + | Ast.LiteralNamespace n => newNamespace regs n | Ast.LiteralObject {expr, ty} => evalLiteralObjectExpr regs expr ty - | Ast.LiteralNamespace n => newNamespace regs n | Ast.LiteralFunction f => newFunctionFromFunc regs (#scope regs) f - - | Ast.LiteralXML _ => LogErr.unimplError ["unhandled literal XML"] | Ast.LiteralRegExp re => evalLiteralRegExp regs (#str re) and evalListExpr (regs:Mach.REGS) (es:Ast.EXPRESSION list) : Mach.VALUE = case es of [] => Mach.Undef | [e] => evalExpr regs e @@ -2938,18 +2938,18 @@ and constructObjectViaFunction (regs:Mac and evalNewObj (regs:Mach.REGS) (obj:Mach.OBJ) (args:Mach.VALUE list) : Mach.VALUE = case obj of Mach.Obj { tag, ... } => case tag of - Mach.MagicTag (Mach.Class c) => constructClassInstance regs obj c args - | Mach.MagicTag (Mach.Function f) => constructObjectViaFunction regs obj f args + Mach.PrimitiveTag (Mach.Class c) => constructClassInstance regs obj c args + | Mach.PrimitiveTag (Mach.Function f) => constructObjectViaFunction regs obj f args | _ => throwExn (newTypeErr regs ["operator 'new' applied to unexpected object type"]) and evalCallMethodByExpr (regs:Mach.REGS) (func:Ast.EXPRESSION) (args:Mach.VALUE list) : Mach.VALUE = let @@ -3021,20 +3021,20 @@ and evalCallByRef (regs:Mach.REGS) and evalCallByObj (regs:Mach.REGS) (fobj:Mach.OBJ) (args:Mach.VALUE list) : Mach.VALUE = case fobj of Mach.Obj { tag, ... } => case tag of - Mach.MagicTag (Mach.NativeFunction { func, ... }) => + Mach.PrimitiveTag (Mach.NativeFunction { func, ... }) => (trace ["evalCallByObj: entering native function"]; func regs args) - | Mach.MagicTag (Mach.Function f) => + | Mach.PrimitiveTag (Mach.Function f) => (trace ["evalCallByObj: entering standard function"]; invokeFuncClosure regs f (SOME fobj) args) | _ => if hasOwnValue fobj Name.meta_invoke then (trace ["evalCallByObj: redirecting through meta::invoke"]; evalCallByRef regs (fobj, Name.meta_invoke) args true) else throwExn (newTypeErr regs ["calling non-callable object"]) @@ -3132,27 +3132,16 @@ and evalCrement (regs:Mach.REGS) val v'' = performBinop regs bop v' i in setValue regs obj name v''; if pre then v'' else v' end -and evalDeleteOp (regs: Mach.REGS) - (expr: Ast.EXPRESSION) - : Mach.VALUE = - let - val (_, (Mach.Obj {props, ...}, name)) = resolveRefExpr regs expr true - in - if (#dontDelete (#attrs (Mach.getProp props name))) - then newBoolean regs false - else (Mach.delProp props name; newBoolean regs true) - end - (* SPEC fun evalUnaryExpr (env: ENV) (unaryOp: Ast.ASSIGNOP) (expr: Ast.EXPRESSION) : Mach.VALUE = (* FINISH ME *) @@ -3161,24 +3150,24 @@ fun evalUnaryExpr (env: ENV) and evalUnaryOp (regs:Mach.REGS) (unop:Ast.UNOP) (expr:Ast.EXPRESSION) : Mach.VALUE = let in case unop of - Ast.Delete => + Ast.Delete => let val (_, (Mach.Obj {props, ...}, name)) = resolveRefExpr regs expr false in if (Mach.hasProp props name) - then if (#dontDelete (#attrs (Mach.getProp props name))) - then newBoolean regs false - else (Mach.delProp props name; newBoolean regs true) + then if (#removable (#attrs (Mach.getProp props name))) + then (Mach.delProp props name; newBoolean regs true) + else newBoolean regs false else newBoolean regs true end | Ast.PreIncrement => evalCrement regs Ast.Plus true expr | Ast.PreDecrement => evalCrement regs Ast.Minus true expr | Ast.PostIncrement => evalCrement regs Ast.Plus false expr | Ast.PostDecrement => evalCrement regs Ast.Minus false expr | Ast.BitwiseNot => @@ -3631,46 +3620,46 @@ and doubleEquals (regs:Mach.REGS) toBoolean b end and typeOfTag (regs:Mach.REGS) (tag:Mach.TAG) : (Ast.TYPE) = let - fun magicInstanceType getter = + fun primitiveInstanceType getter = let val cell = getter regs in case !cell of - SOME (Mach.Obj { tag = Mach.MagicTag + SOME (Mach.Obj { tag = Mach.PrimitiveTag (Mach.Class {cls=Ast.Cls { instanceType, ... }, ...}), ...}) => instanceType - | _ => error regs ["error fetching magic instance type"] + | _ => error regs ["error fetching primitive instance type"] end in case tag of Mach.InstanceTag ity => Ast.InstanceType ity | Mach.ObjectTag tys => Ast.RecordType tys | Mach.ArrayTag tys => Ast.ArrayType (tys,NONE) (* FIXME *) - | Mach.MagicTag (Mach.Boolean _) => magicInstanceType Mach.getBooleanClassSlot - | Mach.MagicTag (Mach.Double _) => magicInstanceType Mach.getDoubleClassSlot - | Mach.MagicTag (Mach.Decimal _) => magicInstanceType Mach.getDecimalClassSlot - | Mach.MagicTag (Mach.String _) => magicInstanceType Mach.getStringClassSlot - | Mach.MagicTag (Mach.Namespace _) => magicInstanceType Mach.getNamespaceClassSlot - | Mach.MagicTag (Mach.Class _) => magicInstanceType Mach.getClassClassSlot - | Mach.MagicTag (Mach.Interface _) => magicInstanceType Mach.getInterfaceClassSlot - | Mach.MagicTag (Mach.Type _) => magicInstanceType Mach.getTypeInterfaceSlot - | Mach.MagicTag (Mach.NativeFunction _) => magicInstanceType Mach.getFunctionClassSlot - | Mach.MagicTag (Mach.Generator _) => magicInstanceType Mach.getGeneratorClassSlot - | Mach.MagicTag (Mach.Function {func=Ast.Func { ty, ...}, ...}) => ty + | Mach.PrimitiveTag (Mach.Boolean _) => primitiveInstanceType Mach.getBooleanClassSlot + | Mach.PrimitiveTag (Mach.Double _) => primitiveInstanceType Mach.getDoubleClassSlot + | Mach.PrimitiveTag (Mach.Decimal _) => primitiveInstanceType Mach.getDecimalClassSlot + | Mach.PrimitiveTag (Mach.String _) => primitiveInstanceType Mach.getStringClassSlot + | Mach.PrimitiveTag (Mach.Namespace _) => primitiveInstanceType Mach.getNamespaceClassSlot + | Mach.PrimitiveTag (Mach.Class _) => primitiveInstanceType Mach.getClassClassSlot + | Mach.PrimitiveTag (Mach.Interface _) => primitiveInstanceType Mach.getInterfaceClassSlot + | Mach.PrimitiveTag (Mach.Type _) => primitiveInstanceType Mach.getTypeInterfaceSlot + | Mach.PrimitiveTag (Mach.NativeFunction _) => primitiveInstanceType Mach.getFunctionClassSlot + | Mach.PrimitiveTag (Mach.Generator _) => primitiveInstanceType Mach.getGeneratorClassSlot + | Mach.PrimitiveTag (Mach.Function {func=Ast.Func { ty, ...}, ...}) => ty | Mach.NoTag => (* FIXME: this would be a hard error if we didn't use NoTag values * as temporaries. Currently we do, so there are contexts where we * want them to have a type in order to pass a runtime type test. * this is of dubious value to me. -graydon. * * error regs ["typeOfVal on NoTag object"]) @@ -3718,46 +3707,24 @@ and evalLogicalOr (regs:Mach.REGS) val a = evalExpr regs aexpr in if toBoolean a then a else evalExpr regs bexpr end - and evalOperatorIs (regs:Mach.REGS) (v:Mach.VALUE) (te:Ast.TYPE) : bool = let val vt = typeOfVal regs v - fun isLike (Mach.Object obj) (Ast.RecordType fields) = List.all (objHasLikeField obj) fields - | isLike v lte = (typeOfVal regs v) <* lte - and objHasLikeField obj {name, ty} = - let - val name = evalNameExpr regs name - in - if hasOwnValue obj name - then - let - val v2 = getValue regs obj name - in - isLike v2 ty - end - else - false - end in - case te of - (* (* IS-LIKE *) - Ast.LikeType lte => isLike v lte - - (* IS-OK *) - |*) _ => vt <* te + vt <* te end (* SPEC fun evalBinaryTypeExpr (env: ENV) (binaryTypeOp: Ast.BINTYPEOP) (expr: Ast.EXPRESSION) (typeExpr: Ast.TYPE) @@ -3775,16 +3742,38 @@ and evalBinaryTypeOp (regs:Mach.REGS) val v = evalExpr regs expr in case bop of Ast.Cast => if evalOperatorIs regs v (evalTy regs ty) then v else throwExn (newTypeOpFailure regs "cast failed" v ty) | Ast.Is => newBoolean regs (evalOperatorIs regs v (evalTy regs ty)) + | Ast.Like => + let + val vt = typeOfVal regs v + fun isLike (Mach.Object obj) (Ast.RecordType fields) = List.all (objHasLikeField obj) fields + | isLike v lte = (typeOfVal regs v) <* lte + and objHasLikeField obj {name, ty} = + let + val name = evalNameExpr regs name + in + if hasOwnValue obj name + then + let + val v2 = getValue regs obj name + in + isLike v2 ty + end + else + false + end + in + newBoolean regs (isLike v ty) + end end and hasInstance (regs:Mach.REGS) (obj:Mach.OBJ) (v:Mach.VALUE) : bool = let @@ -3825,17 +3814,17 @@ and evalInstanceOf (regs:Mach.REGS) (aexpr:Ast.EXPRESSION) (bexpr:Ast.EXPRESSION) : Mach.VALUE = let val a = evalExpr regs aexpr val b = evalExpr regs bexpr val ob = needObj regs b in - case Mach.getObjMagic ob of + case Mach.getObjPrimitive ob of SOME (Mach.Class _) => objHasInstance regs ob a | SOME (Mach.Interface _) => objHasInstance regs ob a | SOME (Mach.Function _) => objHasInstance regs ob a | SOME (Mach.NativeFunction _) => objHasInstance regs ob a | _ => throwExn (newTypeErr regs ["operator 'instanceof' applied object with no [[hasInstance]] method"]) end @@ -3944,16 +3933,17 @@ and resolveLexicalReference (regs:Mach.R let fun defaultRef obj nameExpr = case nameExpr of Ast.UnqualifiedName { identifier, ... } => (obj, Name.public identifier) | Ast.QualifiedName { namespace, identifier } => (obj, { id=identifier, ns=evalNamespaceExpr regs namespace }) + | Ast.ResolvedName name => (obj, name) in case expr of Ast.LexicalReference { name, loc } => let val _ = LogErr.setLoc loc val refOpt = resolveOnScopeChain regs (#scope regs) name val _ = LogErr.setLoc loc val r = case refOpt of @@ -3992,16 +3982,17 @@ and resolveObjectNameReference (regs:Mac let fun defaultRef obj nameExpr = case nameExpr of Ast.UnqualifiedName { identifier, ... } => (obj, Name.public identifier) | Ast.QualifiedName { namespace, identifier } => (obj, { id=identifier, ns=evalNamespaceExpr regs namespace }) + | Ast.ResolvedName name => (obj, name) in case expr of Ast.ObjectNameReference { object, name, loc } => let val _ = LogErr.setLoc loc val v = evalExpr regs object val _ = LogErr.setLoc loc val ob = case v of @@ -4145,29 +4136,31 @@ and resolveName (regs:Mach.REGS) (objects:Mach.OBJ list) (nameExpr:Ast.NAME_EXPRESSION) : REF option = let val (identifier, openNamespaces, globalNames) = case nameExpr of Ast.QualifiedName {identifier, namespace} => (identifier, [[evalNamespaceExpr regs namespace]], []) | Ast.UnqualifiedName { identifier, openNamespaces, globalNames } => (identifier, openNamespaces, globalNames) + | Ast.ResolvedName {ns, id} => (id, [[ns]], []) in Mach.findName ((#global regs), objects, identifier, openNamespaces, globalNames) end (* FIXME: evalNameExpr is mostly for field names; the handling of field names is presently a little confused. *) and evalNameExpr (regs:Mach.REGS) (nameExpr:Ast.NAME_EXPRESSION) : Ast.NAME = case nameExpr of Ast.QualifiedName { identifier, namespace } => { id = identifier, ns = evalNamespaceExpr regs namespace } | Ast.UnqualifiedName { identifier, ... } => Name.public identifier + | Ast.ResolvedName name => name and evalNamespaceExpr (regs:Mach.REGS) (nsExpr:Ast.NAMESPACE_EXPRESSION) : Ast.NAMESPACE = case nsExpr of Ast.Namespace ns => ns | Ast.NamespaceName ne => case resolveOnScopeChain regs (#scope regs) ne of @@ -4489,21 +4482,21 @@ and bindArgs (regs:Mach.REGS) bindArg (n+1) args) fun bind (finalArgs:Mach.VALUE list) = (* * FIXME: this is a random guess at the appropriate form * of 'arguments'. *) (Mach.addProp props Name.arguments { state = Mach.ValListProp args, - (* args is a better approximation than finalArgs *) + (* args is a better approximation than finalArgs *) ty = Name.typename Name.public_Object, - attrs = { dontDelete = true, - dontEnum = true, - readOnly = false, + attrs = { removable = false, + enumerable = false, + writable = true, fixed = true } }; bindArg 0 finalArgs) (* * FIXME: should handle a flag in func that indicates whether * to insist on precise number of args. *) in @@ -4567,17 +4560,17 @@ and evalInitsMaybePrototype (regs:Mach.R else () ; *) if isPrototypeInit then let val Mach.Obj { props, ... } = obj in setValue regs obj pn v; - Mach.setPropDontEnum props pn true + Mach.setPropEnumerable props pn false end else defValue regs obj pn v) | Ast.TempName tn => (traceConstruct ["evalInit assigning to temp ", (Int.toString tn), " on object #", (Int.toString (getObjId obj))]; Mach.defTemp temps tn v); Mach.pop regs end @@ -4854,27 +4847,27 @@ and specialArrayConstructor (regs:Mach.R | _ => bindVal 0 args; instanceObj end (* * ES-262-3 15.2.2.1 The Object Constructor *) -and specialMagicCopyingConstructor (regs:Mach.REGS) - (classObj:Mach.OBJ) - (classClosure:Mach.CLS_CLOSURE) - (args:Mach.VALUE list) +and specialPrimitiveCopyingConstructor (regs:Mach.REGS) + (classObj:Mach.OBJ) + (classClosure:Mach.CLS_CLOSURE) + (args:Mach.VALUE list) : Mach.OBJ = let - val magic = + val primitive = case args of - [] => error regs ["called special magic-copying constructor with no args"] - | v :: _ => Mach.needMagic v - val tag = (Mach.MagicTag magic) + [] => error regs ["called special primitive-copying constructor with no args"] + | v :: _ => Mach.needPrimitive v + val tag = (Mach.PrimitiveTag primitive) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in obj end and specialObjectConstructor (regs:Mach.REGS) (classObj:Mach.OBJ) @@ -4890,19 +4883,19 @@ and specialObjectConstructor (regs:Mach. | (Mach.Null :: _) => instantiate () | (Mach.Undef :: _) => instantiate () | (Mach.Object (Mach.Obj { tag, ...}) :: _) => case tag of (* * FIXME: This part is dubioius. ES-262-3 says to call ToObject * on non-Object primitives. We do not do so here: rather, ToObject * implements its lower half (primitive values) by calling into *here*, - * so here is where we do any cloning and magic-copying. + * so here is where we do any cloning and primitive-copying. *) - Mach.MagicTag mt => constructStandardWithTag regs classObj classClosure (Mach.MagicTag mt) proto args + Mach.PrimitiveTag mt => constructStandardWithTag regs classObj classClosure (Mach.PrimitiveTag mt) proto args | _ => instantiate() end and specialBooleanConstructor (regs:Mach.REGS) (classObj:Mach.OBJ) (classClosure:Mach.CLS_CLOSURE) (args:Mach.VALUE list) @@ -4915,17 +4908,17 @@ and specialBooleanConstructor (regs:Mach if b then Mach.getBooleanTrueSlot regs else Mach.getBooleanFalseSlot regs in case !cell of SOME obj => obj | NONE => let - val tag = Mach.MagicTag (Mach.Boolean b) + val tag = Mach.PrimitiveTag (Mach.Boolean b) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in cell := SOME obj; obj end end @@ -4936,17 +4929,17 @@ and specialDoubleConstructor (regs:Mach. (args:Mach.VALUE list) : Mach.OBJ = let val n = case args of [] => 0.0 | v :: _ => toDouble v fun build _ = let - val tag = Mach.MagicTag (Mach.Double n) + val tag = Mach.PrimitiveTag (Mach.Double n) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in obj end in if Real64.isNan n then @@ -4980,17 +4973,17 @@ and specialDecimalConstructor (regs:Mach (classObj:Mach.OBJ) (classClosure:Mach.CLS_CLOSURE) (args:Mach.VALUE list) : Mach.OBJ = let val n = case args of [] => toDecimal (newDouble regs 0.0) | v :: _ => toDecimal v - val tag = Mach.MagicTag (Mach.Decimal n) + val tag = Mach.PrimitiveTag (Mach.Decimal n) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in obj end and specialStringConstructor (regs:Mach.REGS) @@ -5002,17 +4995,17 @@ and specialStringConstructor (regs:Mach. val s = case args of [] => Ustring.empty | v :: _ => toUstring regs v in case Mach.findInStrCache regs s of SOME obj => obj | NONE => let - val tag = Mach.MagicTag (Mach.String s) + val tag = Mach.PrimitiveTag (Mach.String s) val proto = getPrototype regs classObj val obj = constructStandardWithTag regs classObj classClosure tag proto [] in Mach.updateStrCache regs (s, obj); obj end end @@ -5037,19 +5030,19 @@ and constructSpecial (regs:Mach.REGS) Int.toString id, " = ", fmtName name]; SOME (f regs classObj classClosure args)) else findSpecial rest end in findSpecial [ - (Mach.getClassClassSlot, specialMagicCopyingConstructor), - (Mach.getInterfaceClassSlot, specialMagicCopyingConstructor), - (Mach.getNamespaceClassSlot, specialMagicCopyingConstructor), + (Mach.getClassClassSlot, specialPrimitiveCopyingConstructor), + (Mach.getInterfaceClassSlot, specialPrimitiveCopyingConstructor), + (Mach.getNamespaceClassSlot, specialPrimitiveCopyingConstructor), (Mach.getObjectClassSlot, specialObjectConstructor), (Mach.getFunctionClassSlot, specialFunctionConstructor), (Mach.getArrayClassSlot, specialArrayConstructor), (Mach.getBooleanClassSlot, specialBooleanConstructor), (Mach.getDoubleClassSlot, specialDoubleConstructor), (Mach.getDecimalClassSlot, specialDecimalConstructor), @@ -5063,17 +5056,17 @@ and bindAnySpecialIdentity (regs:Mach.RE (obj:Mach.OBJ) = if not (Mach.isBooting regs) then () else let val Mach.Obj { ident, tag, ... } = obj in case tag of - Mach.MagicTag (Mach.Class { cls = Ast.Cls { name, ... }, ... }) => + Mach.PrimitiveTag (Mach.Class { cls = Ast.Cls { name, ... }, ... }) => let val bindings = [ (Name.intrinsic_Type, Mach.getTypeInterfaceSlot), (Name.intrinsic_Class, Mach.getClassClassSlot), (Name.intrinsic_Interface, Mach.getInterfaceClassSlot), (Name.ES4_Namespace, Mach.getNamespaceClassSlot), (Name.public_Object, Mach.getObjectClassSlot), @@ -5109,29 +5102,29 @@ and bindAnySpecialIdentity (regs:Mach.RE end and setPrototype (regs:Mach.REGS) (obj:Mach.OBJ) (proto:Mach.VALUE) : unit = let - val Mach.Obj { props, ... } = obj - val n = Name.public_prototype - val prop = { ty = Ast.AnyType, + val Mach.Obj { props, ... } = obj + val n = Name.public_prototype + val prop = { ty = Ast.AnyType, state = Mach.ValProp proto, - attrs = { dontDelete = true, - dontEnum = true, (* FIXME: is this wrong? (DAH) *) - readOnly = false, - fixed = true } } + attrs = { removable = false, + enumerable = false, (* FIXME: is this wrong? (DAH) *) + writable = true, + fixed = true } } in - if Mach.hasProp props n - then Mach.delProp props n - else (); - Mach.addProp props n prop + if Mach.hasProp props n + then Mach.delProp props n + else (); + Mach.addProp props n prop end and getPrototype (regs:Mach.REGS) (obj:Mach.OBJ) : Mach.VALUE = let val Mach.Obj { props, ... } = obj @@ -5220,17 +5213,17 @@ and getSpecialPrototype (regs:Mach.REGS) and initClassPrototype (regs:Mach.REGS) (obj:Mach.OBJ) : unit = let val Mach.Obj { ident, props, tag, ... } = obj in case tag of - Mach.MagicTag (Mach.Class {cls=Ast.Cls {name, extends,...},...}) => + Mach.PrimitiveTag (Mach.Class {cls=Ast.Cls {name, extends,...},...}) => let val baseProtoVal = case extends of NONE => Mach.Null | SOME baseClassTy => let val ty = AstQuery.needInstanceType (evalTy regs baseClassTy) val ob = instanceClass regs ty @@ -5257,17 +5250,17 @@ and initClassPrototype (regs:Mach.REGS) "(obj #", Int.toString (getObjId newPrototype), ")"]; setPrototype regs obj (Mach.Object newPrototype); if setConstructor then (setValueOrVirtual regs newPrototype Name.public_constructor (Mach.Object obj) false; - Mach.setPropDontEnum newProtoProps Name.public_constructor true) + Mach.setPropEnumerable newProtoProps Name.public_constructor false) else (); traceConstruct ["finished initialising class prototype"] end | _ => () end and constructClassInstance (regs:Mach.REGS) diff --git a/fixture.sml b/fixture.sml --- a/fixture.sml +++ b/fixture.sml @@ -125,17 +125,17 @@ fun mergeFixtures (tyeq:TYEQ) case (newFix, getFixture oldRib newName) of (Ast.VirtualValFixture vnew, Ast.VirtualValFixture vold) => replaceFixture oldRib newName (Ast.VirtualValFixture (mergeVirtuals tyeq newName vnew vold)) | (Ast.ValFixture new, Ast.ValFixture old) => if (tyeq (#ty new) (#ty old)) - andalso (#readOnly new) = (#readOnly old) + andalso (#writable new) = (#writable old) then oldRib else error ["incompatible redefinition of fixture name: ", LogErr.fname newName] | (Ast.MethodFixture new, Ast.MethodFixture old) => replaceFixture oldRib newName (Ast.MethodFixture new) (* FIXME: types *) | (Ast.MethodFixture new, Ast.ValFixture old) => replaceFixture oldRib newName (Ast.MethodFixture new) (* FIXME: types *) | (Ast.ValFixture new, Ast.MethodFixture old) => replaceFixture oldRib newName (Ast.ValFixture new) (* FIXME: types *) @@ -383,16 +383,17 @@ and resolveNameExpr (ribs:Ast.RIBS) then (r::rs) else search rs | search [] = [] in case search ribs of [] => error ["qualified name not present in ribs: ", LogErr.name name] | (rib::ribs) => ((rib::ribs), name, (getFixture rib (Ast.PropName name))) end + | Ast.ResolvedName { ns, id } => resolveNameExpr ribs (Ast.QualifiedName { namespace=(Ast.Namespace ns), identifier=id }) | Ast.UnqualifiedName { identifier, openNamespaces, globalNames } => case findName (ribs, identifier, openNamespaces, globalNames) of NONE => error ["unable to resolve unqualified name expression: ", LogErr.nameExpr ne] | SOME ((rib::ribs), name) => (rib::ribs, name, (getFixture rib (Ast.PropName name))) | SOME ([], _) => error ["name expression resolved to reference in empty rib: ", LogErr.nameExpr ne] end diff --git a/logerr.sml b/logerr.sml --- a/logerr.sml +++ b/logerr.sml @@ -144,16 +144,17 @@ and nameExpr (ne:Ast.NAME_EXPRESSION) = else "[...]::" ^ (Ustring.toAscii identifier) end in case ne of Ast.UnqualifiedName { identifier, openNamespaces, ... } => unqualName openNamespaces identifier | Ast.QualifiedName { namespace, identifier } => ((nsExpr namespace) ^ "::" ^ (Ustring.toAscii identifier)) + | Ast.ResolvedName n => name n end fun identList fields = join ", " (map Ustring.toAscii fields) fun ty t = let fun typeList tys = diff --git a/mach.sml b/mach.sml --- a/mach.sml +++ b/mach.sml @@ -67,19 +67,19 @@ fun nameEq (a:Ast.NAME) (b:Ast.NAME) = ( val cachesz = 4096 (* * FIXME: these are supposed to be Removable, Enumerable, Writable and Fixed. * Unfortunately it means we have to go invert the sense of the first three * all through the code. Yay. *) -type ATTRS = { dontDelete: bool, - dontEnum: bool, - readOnly: bool, +type ATTRS = { removable: bool, + enumerable: bool, + writable: bool, fixed: bool } type IDENTIFIER = Ustring.STRING type NAMESPACE = Ast.NAMESPACE datatype VALUE = Undef | Null @@ -92,17 +92,17 @@ datatype VALUE = Undef tag: TAG , rib: Ast.RIB ref (* INFORMATIVE *) } and TAG = ObjectTag of Ast.FIELD_TYPE list | ArrayTag of Ast.TYPE list (* FIXME: need TYPE option too - see ArrayType *) | InstanceTag of Ast.INSTANCE_TYPE - | MagicTag of MAGIC + | PrimitiveTag of PRIMITIVE | NoTag and OBJ_CACHE = ObjCache of { doubleCache: (OBJ Real64Map.map) ref, nsCache: (OBJ NsMap.map) ref, nmCache: (OBJ NmMap.map) ref, @@ -145,21 +145,21 @@ datatype VALUE = Undef generatorClass : (OBJ option) ref } and FRAME = Frame of { name: string, args: VALUE list } (* - * Magic is visible only to the interpreter; + * Primitive is visible only to the interpreter; * it is not visible to users. *) - and MAGIC = + and PRIMITIVE = Boolean of bool | Double of Real64.real | Decimal of Decimal.DEC | String of Ustring.STRING | Namespace of Ast.NAMESPACE | Class of CLS_CLOSURE | Interface of IFACE_CLOSURE | Function of FUN_CLOSURE @@ -278,17 +278,17 @@ withtype FUN_CLOSURE = aux: AUX } (* REGS *) -> VALUE list -> VALUE), length: int } and OBJ_IDENTIFIER = (* LDOTS *) int (* Important to model "fixedness" separately from - * "dontDelete-ness" because fixedness affects + * "removable-ness" because fixedness affects * which phase of name lookup the name is found during. *) and TEMPS = (Ast.TYPE * TEMP_STATE) list ref and PROPERTY = { ty: Ast.TYPE, state: PROPERTY_STATE, attrs: ATTRS } @@ -303,44 +303,44 @@ withtype FUN_CLOSURE = fun isObject (v:VALUE) : bool = case v of Object _ => true | _ => false -fun isDouble (Object (Obj {tag = MagicTag (Double _), ...})) = true +fun isDouble (Object (Obj {tag = PrimitiveTag (Double _), ...})) = true | isDouble _ = false -fun isDecimal (Object (Obj {tag = MagicTag (Decimal _), ...})) = true +fun isDecimal (Object (Obj {tag = PrimitiveTag (Decimal _), ...})) = true | isDecimal _ = false -fun isString (Object (Obj {tag = MagicTag (String _), ...})) = true +fun isString (Object (Obj {tag = PrimitiveTag (String _), ...})) = true | isString _ = false -fun isBoolean (Object (Obj {tag = MagicTag (Boolean _), ...})) = true +fun isBoolean (Object (Obj {tag = PrimitiveTag (Boolean _), ...})) = true | isBoolean _ = false -fun isNamespace (Object (Obj {tag = MagicTag (Namespace _), ...})) = true +fun isNamespace (Object (Obj {tag = PrimitiveTag (Namespace _), ...})) = true | isNamespace _ = false -fun isClass (Object (Obj {tag = MagicTag (Class _), ...})) = true +fun isClass (Object (Obj {tag = PrimitiveTag (Class _), ...})) = true | isClass _ = false -fun isInterface (Object (Obj {tag = MagicTag (Interface _), ...})) = true +fun isInterface (Object (Obj {tag = PrimitiveTag (Interface _), ...})) = true | isInterface _ = false -fun isFunction (Object (Obj {tag = MagicTag (Function _), ...})) = true +fun isFunction (Object (Obj {tag = PrimitiveTag (Function _), ...})) = true | isFunction _ = false -fun isType (Object (Obj {tag = MagicTag (Type _), ...})) = true +fun isType (Object (Obj {tag = PrimitiveTag (Type _), ...})) = true | isType _ = false -fun isNativeFunction (Object (Obj {tag = MagicTag (NativeFunction _), ...})) = true +fun isNativeFunction (Object (Obj {tag = PrimitiveTag (NativeFunction _), ...})) = true | isNativeFunction _ = false fun isNumeric ob = isDouble ob orelse isDecimal ob fun isNull Null = true | isNull _ = false fun isUndef Undef = true @@ -432,31 +432,31 @@ fun getProp (b:PROPERTY_BINDINGS) | NONE => (* * If not found, then cons up a temporary property * with value undefined. Any property not found * errors would have been caught by evalRefExpr *) {ty=Ast.UndefinedType , state=ValProp Undef, - attrs={dontDelete=false, (* unused attrs *) - dontEnum=false, - readOnly=false, + attrs={removable=true, (* unused attrs *) + enumerable=false, + writable=true, fixed=false}} fun hasProp (b:PROPERTY_BINDINGS) (n:Ast.NAME) : bool = case findProp b n of NONE => false | SOME _ => true -fun hasMagic (Obj { tag = MagicTag _, ... }) = true - | hasMagic _ = false +fun hasPrimitive (Obj { tag = PrimitiveTag _, ... }) = true + | hasPrimitive _ = false fun setRib (obj:OBJ) (r:Ast.RIB) : unit = let val Obj { rib, ... } = obj in rib := r @@ -477,29 +477,29 @@ fun getRibs (scope:SCOPE) val rib = getRib object in case parent of NONE => [rib] | SOME p => rib :: (getRibs p) end -fun setPropDontEnum (props:PROPERTY_BINDINGS) +fun setPropEnumerable (props:PROPERTY_BINDINGS) (n:Ast.NAME) - (dontEnum:bool) + (enumerable:bool) : unit = case findProp props n of SOME prop => let val attrs = (#attrs prop) val newProp = { ty = (#ty prop), state = (#state prop), - attrs = { dontDelete = (#dontDelete attrs), - dontEnum = dontEnum, - readOnly = (#readOnly attrs), + attrs = { removable = (#removable attrs), + enumerable = enumerable, + writable = (#writable attrs), fixed = (#fixed attrs) } } in delProp props n; addProp props n newProp end | NONE => () @@ -583,19 +583,19 @@ fun isInRange (low:Real64.real) (d:Real64.real) : bool = low <= d andalso d <= high (* * Some stringification helpers on low-level values. *) -fun magicToUstring (magic:MAGIC) +fun primitiveToUstring (primitive:PRIMITIVE) : Ustring.STRING = - case magic of + case primitive of Double n => NumberToString n | Decimal d => Ustring.fromString (Decimal.toString d) | String s => s | Boolean true => Ustring.true_ | Boolean false => Ustring.false_ | Namespace ns => Ustring.fromString (LogErr.namespace ns) | Class _ => Ustring.fromString "[class Class]" | Interface _ => Ustring.fromString "[interface Interface]" @@ -670,28 +670,28 @@ fun inspect (v:VALUE) : unit = let val pad = " " fun p 0 s = List.app TextIO.print s | p n s = (TextIO.print pad; p (n-1) s) fun nl _ = TextIO.print "\n"; - fun att {dontDelete,dontEnum,readOnly,fixed} = - if not dontDelete - andalso not dontEnum - andalso not readOnly + fun att {removable,enumerable,writable,fixed} = + if not removable + andalso not enumerable + andalso not writable andalso not fixed then "" else (" (" - ^ (if dontDelete then "DD," else "") - ^ (if dontEnum then "DE," else "") - ^ (if readOnly then "RO," else "") - ^ (if fixed then "FX" else "") + ^ (if removable then "R," else "") + ^ (if enumerable then "E," else "") + ^ (if writable then "W," else "") + ^ (if fixed then "F" else "") ^ ") ") fun id (Obj ob) = Int.toString (#ident ob) fun typ t = LogErr.ty t fun magType t = case t of @@ -702,25 +702,25 @@ fun inspect (v:VALUE) | Function { func = Ast.Func { ty=ty0, ... }, ... } => (" : " ^ (typ ty0)) | Type t => (" = " ^ (typ t)) | _ => "" (* FIXME: elaborate printing of type expressions. *) fun mag m = case m of String s => ("\"" ^ (Ustring.toAscii s) ^ "\"") - | m => Ustring.toAscii (magicToUstring m) ^ (magType m) + | m => Ustring.toAscii (primitiveToUstring m) ^ (magType m) fun tag (Obj ob) = case (#tag ob) of (* FIXME: elaborate printing of structural tags. *) ObjectTag _ => "" | ArrayTag _ => "" | InstanceTag t => "" - | MagicTag m => "" + | PrimitiveTag m => "" | NoTag => "" fun printVal indent _ Undef = TextIO.print "undefined\n" | printVal indent _ Null = TextIO.print "null\n" | printVal indent 0 (Object obj) = TextIO.print ((tag obj) ^ "\n") | printVal indent n (Object obj) = let @@ -762,94 +762,94 @@ fun inspect (v:VALUE) printVal 0 d v end (* * To get from any object to its CLS, you work out the * "nominal base" of the object's tag. You can then find * a fixed prop in the global object that has a "Class" - * magic value pointing to the CLS. + * primitive value pointing to the CLS. *) fun nominalBaseOfTag (to:TAG) : Ast.NAME = case to of ObjectTag _ => Name.public_Object | ArrayTag _ => Name.public_Array | InstanceTag ity => (#name ity) - | MagicTag (Boolean _) => Name.ES4_boolean - | MagicTag (Double _) => Name.ES4_double - | MagicTag (Decimal _) => Name.ES4_decimal - | MagicTag (String _) => Name.ES4_string - | MagicTag (Namespace _) => Name.ES4_Namespace - | MagicTag (Class _) => Name.intrinsic_Class - | MagicTag (Interface _) => Name.intrinsic_Interface - | MagicTag (Function _) => Name.public_Function - | MagicTag (Type _) => Name.intrinsic_Type - | MagicTag (NativeFunction _) => Name.public_Function - | MagicTag (Generator _) => Name.helper_GeneratorImpl + | PrimitiveTag (Boolean _) => Name.ES4_boolean + | PrimitiveTag (Double _) => Name.ES4_double + | PrimitiveTag (Decimal _) => Name.ES4_decimal + | PrimitiveTag (String _) => Name.ES4_string + | PrimitiveTag (Namespace _) => Name.ES4_Namespace + | PrimitiveTag (Class _) => Name.intrinsic_Class + | PrimitiveTag (Interface _) => Name.intrinsic_Interface + | PrimitiveTag (Function _) => Name.public_Function + | PrimitiveTag (Type _) => Name.intrinsic_Type + | PrimitiveTag (NativeFunction _) => Name.public_Function + | PrimitiveTag (Generator _) => Name.helper_GeneratorImpl | NoTag => error ["nominalBaseOfTag on NoTag"] -fun getObjMagic (Obj { tag = MagicTag m, ... }) = SOME m - | getObjMagic _ = NONE +fun getObjPrimitive (Obj { tag = PrimitiveTag m, ... }) = SOME m + | getObjPrimitive _ = NONE -fun getMagic (Object (Obj { tag = MagicTag m, ... })) = SOME m - | getMagic _ = NONE +fun getPrimitive (Object (Obj { tag = PrimitiveTag m, ... })) = SOME m + | getPrimitive _ = NONE -fun needMagic (Object (Obj { tag = MagicTag m, ... })) = m - | needMagic _ = error ["require object with magic"] +fun needPrimitive (Object (Obj { tag = PrimitiveTag m, ... })) = m + | needPrimitive _ = error ["require object with primitive"] -fun needClass (Object (Obj {tag = MagicTag (Class c), ...})) = c +fun needClass (Object (Obj {tag = PrimitiveTag (Class c), ...})) = c | needClass _ = error ["require class object"] -fun needInterface (Object (Obj {tag = MagicTag (Interface i), ...})) = i +fun needInterface (Object (Obj {tag = PrimitiveTag (Interface i), ...})) = i | needInterface _ = error ["require interface object"] -fun needFunction (Object (Obj {tag = MagicTag (Function f), ...})) = f +fun needFunction (Object (Obj {tag = PrimitiveTag (Function f), ...})) = f | needFunction _ = error ["require function object]"] -fun needNamespace (Object (Obj {tag = MagicTag (Namespace n), ...})) = n +fun needNamespace (Object (Obj {tag = PrimitiveTag (Namespace n), ...})) = n | needNamespace _ = error ["require namespace object"] fun needNamespaceOrNull Null = Name.publicNS - | needNamespaceOrNull (Object (Obj {tag = MagicTag (Namespace n), ...})) = n + | needNamespaceOrNull (Object (Obj {tag = PrimitiveTag (Namespace n), ...})) = n | needNamespaceOrNull _ = error ["require namespace object"] -fun needType (Object (Obj {tag = MagicTag (Type t), ...})) = t +fun needType (Object (Obj {tag = PrimitiveTag (Type t), ...})) = t | needType _ = error ["require type object"] -fun needDouble (Object (Obj {tag = MagicTag (Double d), ...})) = d +fun needDouble (Object (Obj {tag = PrimitiveTag (Double d), ...})) = d | needDouble _ = error ["require double object"] -fun needDecimal (Object (Obj {tag = MagicTag (Decimal d), ...})) = d +fun needDecimal (Object (Obj {tag = PrimitiveTag (Decimal d), ...})) = d | needDecimal _ = error ["require decimal object"] -fun needBoolean (Object (Obj {tag = MagicTag (Boolean b), ...})) = b +fun needBoolean (Object (Obj {tag = PrimitiveTag (Boolean b), ...})) = b | needBoolean _ = error ["require boolean object"] -fun needString (Object (Obj {tag = MagicTag (String s), ...})) = s +fun needString (Object (Obj {tag = PrimitiveTag (String s), ...})) = s | needString _ = error ["require string object"] (* Call stack and debugging stuff *) (* An approximation of an invocation argument list, for debugging. *) fun approx (arg:VALUE) : string = case arg of Null => "null" | Undef => "undefined" | Object ob => - if hasMagic ob + if hasPrimitive ob then let - val str = Ustring.toAscii (magicToUstring (needMagic arg)) + val str = Ustring.toAscii (primitiveToUstring (needPrimitive arg)) in if isString arg then "\"" ^ str ^ "\"" else str end else "obj" @@ -1290,17 +1290,17 @@ fun findName (globalObj: OBJECT, objects namespace :: [] => SOME (object, {ns=namespace, id=identifier}) | [] => raise (LogErr.NameError "internal error") | _ => if (getObjId object) = (getObjId globalObj) then case Fixture.selectNamespacesByGlobalNames (identifier, matches''', globalNames) of namespace :: [] => SOME (object, {ns=namespace,id=identifier}) | [] => raise (LogErr.NameError "internal error") - | _ => raise (LogErr.NameError "ambiguous reference") + | _ => raise (LogErr.NameError ("ambiguous reference: " ^ Ustring.toAscii identifier)) else - raise (LogErr.NameError "ambiguous reference") + raise (LogErr.NameError ("ambiguous reference: " ^ Ustring.toAscii identifier)) end end end end diff --git a/name.sml b/name.sml --- a/name.sml +++ b/name.sml @@ -50,17 +50,16 @@ val UnicodeNS = newOpaqueNS () val RegExpInternalsNS = newOpaqueNS () fun public (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = publicNS } fun ES4 (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = ES4NS } fun meta (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = metaNS } fun magic (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = magicNS } fun intrinsic (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = intrinsicNS } fun helper (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = helperNS } -fun ECMAScript4_Internal (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = ECMAScript4_InternalNS } fun informative (id:Ast.IDENTIFIER) : Ast.NAME = { id = id, ns = informativeNS } (* * To reference a name as a type expression, you need * a complicated structure. *) fun typename (n:Ast.NAME) = @@ -242,41 +241,42 @@ val intrinsic_toPrecision = intrinsic Us val intrinsic_toExponential = intrinsic Ustring.toExponential_ val intrinsic_toFixedStep10 = intrinsic Ustring.toFixedStep10_ val intrinsic_set = intrinsic Ustring.set_ val intrinsic_get = intrinsic Ustring.get_ val intrinsic_DaylightSavingsTA = intrinsic Ustring.DaylightSavingsTA_ val intrinsic_LocalTZA = intrinsic Ustring.LocalTZA_ -val magic_stringAppend = magic Ustring.stringAppend_ -val magic_stringLength = magic Ustring.stringLength_ -val magic_fromCharCode = magic Ustring.fromCharCode_ -val magic_charCodeAt = magic Ustring.charCodeAt_ -val magic_fnLength = magic Ustring.fnLength_ -val magic_genSend = magic Ustring.genSend_ -val magic_genThrow = magic Ustring.genThrow_ -val magic_genClose = magic Ustring.genClose_ -val magic_apply = magic Ustring.apply_ +val informative_stringAppend = informative Ustring.stringAppend_ +val informative_stringLength = informative Ustring.stringLength_ +val informative_fromCharCode = informative Ustring.fromCharCode_ +val informative_charCodeAt = informative Ustring.charCodeAt_ -val magic_toPrimitive = magic Ustring.toPrimitive_ -val magic_isPrimitive = magic Ustring.isPrimitive_ -val magic_defaultValue = magic Ustring.defaultValue_ -val magic_setPropertyIsDontEnum = magic Ustring.setPropertyIsDontEnum_ -val magic_getPropertyIsDontDelete = magic Ustring.getPropertyIsDontDelete_ -val magic_getPropertyIsDontEnum = magic Ustring.getPropertyIsDontEnum_ -val magic_hasOwnProperty = magic Ustring.hasOwnProperty_ -val magic_getPrototype = magic Ustring.getPrototype_ -val magic_getSuperClass = magic Ustring.getSuperClass_ -val magic_getSuperInterface = magic Ustring.getSuperInterface_ -val magic_getImplementedInterface = magic Ustring.getImplementedInterface_ -val magic_getEnumerableIds = magic Ustring.getEnumerableIds_ -val magic_getClassOfObject = magic Ustring.getClassOfObject_ -val magic_getClassName = magic Ustring.getClassName_ -val magic_construct = magic Ustring.construct_ +val helper_fnLength = helper Ustring.fnLength_ +val helper_genSend = helper Ustring.genSend_ +val helper_genThrow = helper Ustring.genThrow_ +val helper_genClose = helper Ustring.genClose_ +val helper_apply = helper Ustring.apply_ + +val helper_toPrimitive = helper Ustring.toPrimitive_ +val helper_isPrimitive = helper Ustring.isPrimitive_ +val helper_defaultValue = helper Ustring.defaultValue_ +val helper_setPropertyIsEnumerable = helper Ustring.setPropertyIsEnumerable_ +val helper_getPropertyIsRemovable = helper Ustring.getPropertyIsRemovable_ +val helper_getPropertyIsEnumerable = helper Ustring.getPropertyIsEnumerable_ +val helper_hasOwnProperty = helper Ustring.hasOwnProperty_ +val helper_getPrototype = helper Ustring.getPrototype_ +val helper_getSuperClass = helper Ustring.getSuperClass_ +val helper_getSuperInterface = helper Ustring.getSuperInterface_ +val helper_getImplementedInterface = helper Ustring.getImplementedInterface_ +val helper_getEnumerableIds = helper Ustring.getEnumerableIds_ +val helper_getClassOfObject = helper Ustring.getClassOfObject_ +val informative_getClassName = informative Ustring.getClassName_ +val helper_construct = helper Ustring.construct_ (* * Property names that have special meanings to the interpreter. *) val public_constructor = public Ustring.constructor_ val public_length = public Ustring.length_ val public_cursor = public Ustring.cursor_ @@ -290,26 +290,22 @@ val meta_get = meta Ustring.get_ val meta_set = meta Ustring.set_ val meta_has = meta Ustring.has_ val meta_call = meta Ustring.call_ val arguments = public Ustring.arguments_ val empty = public Ustring.empty (* These are the property names that are opaque namespaces themselves are bound under. *) -val public_ES4_ = public Ustring.ES4_ +val public_ES4 = public Ustring.ES4_ -val ES4_public_ = ES4 Ustring.public_ -val ES4_meta_ = ES4 Ustring.meta_ -val ES4_magic_ = ES4 Ustring.magic_ -val ES4_intrinsic_ = ES4 Ustring.intrinsic_ -val ES4_iterator_ = ES4 Ustring.iterator_ - -val ES4_ECMAScript4_Internal_ = ES4 Ustring.ECMAScript4_Internal_ - -val ECMAScript4_Internal_informative_ = ECMAScript4_Internal Ustring.informative_ -val ECMAScript4_Internal_helper_ = ECMAScript4_Internal Ustring.helper_ -val ECMAScript4_Internal_Unicode_ = ECMAScript4_Internal Ustring.Unicode_ -val ECMAScript4_Internal_RegExpInternals_ = ECMAScript4_Internal Ustring.RegExpInternals_ +val ES4_public = ES4 Ustring.public_ +val ES4_meta = ES4 Ustring.meta_ +val ES4_helper = ES4 Ustring.helper_ +val ES4_intrinsic = ES4 Ustring.intrinsic_ +val ES4_iterator = ES4 Ustring.iterator_ +val ES4_informative = ES4 Ustring.informative_ +val ES4_Unicode = ES4 Ustring.Unicode_ +val ES4_RegExpInternals = ES4 Ustring.RegExpInternals_ val helper_GeneratorImpl = helper Ustring.GeneratorImpl_ end diff --git a/native.sml b/native.sml --- a/native.sml +++ b/native.sml @@ -141,65 +141,65 @@ fun propQuery (regs:Mach.REGS) end (* * Given a class object, run the standard object-construction * protocol for it (and its base classes, initializers, settings, * ctors). Return the resulting instance, always an Object! * - * magic native function construct(cls:Class!, args:[*]) : Object!; + * helper native function construct(cls:Class!, args:[*]) : Object!; *) fun construct (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val (obj, cls) = nthAsObjAndCls vals 0 val args = Eval.arrayToList regs (nthAsObj vals 1) in Eval.constructClassInstance regs obj cls args end (* * Retrieve the [[Class]] property of o * - * magic native function getClassName(o : Object!) : string; + * informative native function getClassName(o : Object!) : string; *) fun getClassName (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 in Eval.newString regs (#id (Mach.nominalBaseOfTag tag)) end (* * Meta-object interface: * Retrieve the class of an object instance. * - * magic native function getClassOfObject(o: Object!) : Class; + * helper native function getClassOfObject(o: Object!) : Class; *) fun getClassOfObject (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 in Eval.getValue regs (#global regs) (Mach.nominalBaseOfTag tag) end (* * Meta-object interface: * Retrieve the possibly null base class of cls. * - * magic native function getSuperClass(cls : Class!) : Class; + * helper native function getSuperClass(cls : Class!) : Class; *) fun getSuperClass (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val { cls, env, ... } = Mach.needClass (rawNth vals 0) val Ast.Cls { extends, ... } = cls val regs = Eval.withScope regs env @@ -211,17 +211,17 @@ fun getSuperClass (regs:Mach.REGS) | _ => Mach.Null) end (* * Meta-object interface: * Retrieve the possibly null kth implemented interface of cls. * - * magic native function getClassExtends(cls : Class!, k: uint) : Class; + * helper native function getClassExtends(cls : Class!, k: uint) : Class; *) fun getImplementedInterface (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val { cls, env, ... } = Mach.needClass (rawNth vals 0) val k = Word32.toInt (nthAsUInt regs vals 1) val Ast.Cls { implements, ... } = cls @@ -236,17 +236,17 @@ fun getImplementedInterface (regs:Mach.R regs (List.nth(implements, k))))) end (* * Meta-object interface: * Retrieve the possibly null kth base interface of iface. * - * magic native function getSuperInterface(iface: Interface!, k: uint): Interface; + * helper native function getSuperInterface(iface: Interface!, k: uint): Interface; *) fun getSuperInterface (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val { iface, env, ... } = Mach.needInterface (rawNth vals 0) val k = Word32.toInt(nthAsUInt regs vals 1) val Ast.Iface { extends, ... } = iface @@ -260,17 +260,17 @@ fun getSuperInterface (regs:Mach.REGS) (Eval.evalTy regs (List.nth(extends, k))))) end (* * Retrieve the array of enumerable properties of o, in property creation order. * - * magic native function getEnumerableIds(o : Object) : iterator::EnumerableIdArray; + * helper native function getEnumerableIds(o : Object) : iterator::EnumerableIdArray; *) fun getEnumerableIds (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val v = rawNth vals 0 in case v of @@ -278,17 +278,17 @@ fun getEnumerableIds (regs:Mach.REGS) | Mach.Null => Eval.newArray regs [] | Mach.Object (Mach.Obj { props, ... }) => let val { bindings, ... } = !props val bindingList = NameMap.listItemsi bindings fun select (name, { seq, prop }) = case prop of { state = Mach.ValProp _, - attrs = { dontEnum = false, dontDelete, readOnly, fixed }, + attrs = { enumerable = true, removable, writable, fixed }, ty } => SOME (name, seq) | _ => NONE val filteredList = List.mapPartial select bindingList val bindingArray = Array.fromList filteredList fun sort ((_, seq1), (_, seq2)) = Int.compare (seq2,seq1) val _ = ArrayQSort.sort sort bindingArray fun project ((name:Ast.NAME, _), (curr:Mach.VALUE list)) = (* FIXME: what about numeric? string? *) @@ -299,93 +299,93 @@ fun getEnumerableIds (regs:Mach.REGS) Eval.newArray regs vals end end (* * Retrieve the possibly null [[Prototype]] property of o * - * magic native function getPrototype(o : Object!) : Object; + * helper native function getPrototype(o : Object!) : Object; *) fun getPrototype (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { proto, ... } = nthAsObj vals 0 in proto end (* * Return true iff o has a local property named by p. * - * magic native function hasOwnProperty(o : Object!, p : string) : Boolean; + * helper native function hasOwnProperty(o : Object!, p : string) : Boolean; *) fun hasOwnProperty (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = propQuery regs vals Mach.hasProp (* * Return true if the property p does exists locally on o and its - * DontEnum bit is set + * Enumerable bit is set * - * magic native function getPropertyIsDontEnum(o : Object!, p : string) : Boolean; + * helper native function getPropertyIsEnumerable(o : Object!, p : string) : Boolean; *) -fun getPropertyIsDontEnum (regs:Mach.REGS) +fun getPropertyIsEnumerable (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let fun f props n = if Mach.hasProp props n - then (#dontEnum (#attrs (Mach.getProp props n))) + then (#enumerable (#attrs (Mach.getProp props n))) else false in propQuery regs vals f end (* * Return true if the property p does exists locally on o and its - * DontDelete bit is set + * removable bit is set * - * magic native function getPropertyIsDontDelete(o : Object!, p : string) : Boolean; + * helper native function getPropertyIsRemovable(o : Object!, p : string) : Boolean; *) -fun getPropertyIsDontDelete (regs:Mach.REGS) - (vals:Mach.VALUE list) +fun getPropertyIsRemovable (regs:Mach.REGS) + (vals:Mach.VALUE list) : Mach.VALUE = let fun f props n = if Mach.hasProp props n - then (#dontDelete (#attrs (Mach.getProp props n))) + then (#removable (#attrs (Mach.getProp props n))) else false in propQuery regs vals f end -(* Provided that the property p exists locally on o, set its DontEnum +(* Provided that the property p exists locally on o, set its Enumerable * flag according to f. If the property p does not exist locally on * o, it does nothing. * - * magic native function setPropertyIsDontEnum(o : Object!, p : string, f : Boolean) : void; + * helper native function setPropertyIsEnumerable(o : Object!, p : string, f : Boolean) : void; *) -fun setPropertyIsDontEnum (regs:Mach.REGS) +fun setPropertyIsEnumerable (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { props, ...} = nthAsObj vals 0 val n = nthAsName regs vals 1 val b = nthAsBool vals 2 in - Mach.setPropDontEnum props n b; + Mach.setPropEnumerable props n b; Mach.Undef end fun isPrimitive (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = Eval.newBoolean regs (Eval.isPrimitive (rawNth vals 0)) @@ -411,17 +411,17 @@ fun defaultValue (regs:Mach.REGS) Eval.defaultValue regs obj hint end (* * Given a function object, a this object, and an array of argument * values, call the function with the this object and arguments. * - * magic native function apply(fn : Function!, t : Object!, args : Array) : *; + * helper native function apply(fn : Function!, t : Object!, args : Array) : *; *) fun apply (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val fnObj = nthAsObj vals 0 val thisObj = nthAsObj vals 1 val argsObj = nthAsObj vals 2 @@ -432,66 +432,66 @@ fun apply (regs:Mach.REGS) fun fnLength (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 val len = case tag of - Mach.MagicTag (Mach.Function ({ func = Ast.Func { ty, ... }, ...})) + Mach.PrimitiveTag (Mach.Function ({ func = Ast.Func { ty, ... }, ...})) => AstQuery.minArgsOfFuncTy ty - | Mach.MagicTag (Mach.NativeFunction {length, ...}) => length + | Mach.PrimitiveTag (Mach.NativeFunction {length, ...}) => length | _ => error ["wrong kind of object to fnLength"] in Eval.newDouble regs (Real64.fromInt len) end fun genSend (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 val arg = rawNth vals 1 in case tag of - Mach.MagicTag (Mach.Generator gen) => Eval.sendToGen regs gen arg + Mach.PrimitiveTag (Mach.Generator gen) => Eval.sendToGen regs gen arg | _ => error ["wrong kind of object to genSend"] end fun genThrow (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 val arg = rawNth vals 1 in case tag of - Mach.MagicTag (Mach.Generator gen) => Eval.throwToGen regs gen arg + Mach.PrimitiveTag (Mach.Generator gen) => Eval.throwToGen regs gen arg | _ => error ["wrong kind of object to genSend"] end fun genClose (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val Mach.Obj { tag, ... } = nthAsObj vals 0 in case tag of - Mach.MagicTag (Mach.Generator gen) => Eval.closeGen regs gen + Mach.PrimitiveTag (Mach.Generator gen) => Eval.closeGen regs gen | _ => error ["wrong kind of object to genSend"]; Mach.Undef end (* Given a string and a position in that string, return the * numeric value of the character at that position in the * string. * - * magic native function charCodeAt(s : string, pos : uint) : uint; + * informative native function charCodeAt(s : string, pos : uint) : uint; *) fun charCodeAt (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val s = nthAsUstr vals 0 val i = nthAsUInt regs vals 1 in @@ -501,17 +501,17 @@ fun charCodeAt (regs:Mach.REGS) (Ustring.charCodeAt s (Word32.toInt i))) end (* * Given a numeric character value, return a string of length 1 * whose element 0 is the character with that same value. * - * magic native function fromCharCode(ch : uint) : string; + * informative native function fromCharCode(ch : uint) : string; *) fun fromCharCode (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val i = nthAsUInt regs vals 0 in Eval.newString @@ -521,34 +521,34 @@ fun fromCharCode (regs:Mach.REGS) (Word32.andb(i, 0wx1FFFFF)))) end (* * Given a string object, return the number of characters in the * string. * - * magic native function stringLength(s : string) : uint; + * informative native function stringLength(s : string) : uint; *) fun stringLength (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val s = nthAsUstr vals 0 in Eval.newDouble regs (Real64.fromInt (Ustring.stringLength s)) end (* * Given two string objects A and B , return a new string object * containing the characters from A followed by the characters * from B. * - * magic native function stringAppend(a : string, b : string) : string; + * informative native function stringAppend(a : string, b : string) : string; *) fun stringAppend (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val a = nthAsUstr vals 0 val b = nthAsUstr vals 1 in @@ -980,17 +980,17 @@ fun typename (regs:Mach.REGS) fun dumpFunc (regs:Mach.REGS) (vals:Mach.VALUE list) : Mach.VALUE = let val v = rawNth vals 0 in if Mach.isFunction v then - case Mach.needMagic v of + case Mach.needPrimitive v of Mach.Function { func, ... } => Pretty.ppFunc func | _ => () else (); Mach.Undef end fun inspect (regs:Mach.REGS) @@ -1025,43 +1025,43 @@ fun id (regs:Mach.REGS) (* Register all the native functions in this file. *) fun registerNatives _ = let fun addFn (len:int) (name:Ast.NAME) f = Mach.registerNativeFunction name {length=len, func=f} in - addFn 2 Name.magic_construct construct; - addFn 1 Name.magic_getClassName getClassName; - addFn 1 Name.magic_getClassOfObject getClassOfObject; - addFn 1 Name.magic_getSuperClass getSuperClass; - addFn 2 Name.magic_getImplementedInterface getImplementedInterface; - addFn 2 Name.magic_getSuperInterface getSuperInterface; - addFn 1 Name.magic_getEnumerableIds getEnumerableIds; - addFn 1 Name.magic_getPrototype getPrototype; - addFn 2 Name.magic_hasOwnProperty hasOwnProperty; - addFn 2 Name.magic_getPropertyIsDontEnum getPropertyIsDontEnum; - addFn 2 Name.magic_getPropertyIsDontDelete getPropertyIsDontDelete; - addFn 3 Name.magic_setPropertyIsDontEnum setPropertyIsDontEnum; + addFn 2 Name.helper_construct construct; + addFn 1 Name.informative_getClassName getClassName; + addFn 1 Name.helper_getClassOfObject getClassOfObject; + addFn 1 Name.helper_getSuperClass getSuperClass; + addFn 2 Name.helper_getImplementedInterface getImplementedInterface; + addFn 2 Name.helper_getSuperInterface getSuperInterface; + addFn 1 Name.helper_getEnumerableIds getEnumerableIds; + addFn 1 Name.helper_getPrototype getPrototype; + addFn 2 Name.helper_hasOwnProperty hasOwnProperty; + addFn 2 Name.helper_getPropertyIsEnumerable getPropertyIsEnumerable; + addFn 2 Name.helper_getPropertyIsRemovable getPropertyIsRemovable; + addFn 3 Name.helper_setPropertyIsEnumerable setPropertyIsEnumerable; - addFn 2 Name.magic_toPrimitive toPrimitive; - addFn 1 Name.magic_isPrimitive isPrimitive; - addFn 2 Name.magic_defaultValue defaultValue; + addFn 2 Name.helper_toPrimitive toPrimitive; + addFn 1 Name.helper_isPrimitive isPrimitive; + addFn 2 Name.helper_defaultValue defaultValue; - addFn 3 Name.magic_apply apply; - addFn 1 Name.magic_fnLength fnLength; - addFn 2 Name.magic_genSend genSend; - addFn 2 Name.magic_genThrow genThrow; - addFn 1 Name.magic_genClose genClose; + addFn 3 Name.helper_apply apply; + addFn 1 Name.helper_fnLength fnLength; + addFn 2 Name.helper_genSend genSend; + addFn 2 Name.helper_genThrow genThrow; + addFn 1 Name.helper_genClose genClose; - addFn 2 Name.magic_charCodeAt charCodeAt; - addFn 1 Name.magic_fromCharCode fromCharCode; - addFn 1 Name.magic_stringLength stringLength; - addFn 2 Name.magic_stringAppend stringAppend; + addFn 2 Name.informative_charCodeAt charCodeAt; + addFn 1 Name.informative_fromCharCode fromCharCode; + addFn 1 Name.informative_stringLength stringLength; + addFn 2 Name.informative_stringAppend stringAppend; addFn 1 Name.intrinsic_eval eval; addFn 1 Name.intrinsic_parseFloat parseFloat; addFn 2 Name.intrinsic_get get; addFn 3 Name.intrinsic_set set; addFn 1 Name.informative_objectHash objectHash; diff --git a/pretty-cvt.sml b/pretty-cvt.sml --- a/pretty-cvt.sml +++ b/pretty-cvt.sml @@ -207,527 +207,522 @@ structure PrettyCvt = struct | cvtINIT_STEP (AssignStep(x408, x409)) = PrettyRep.Ctor ("AssignStep", SOME (PrettyRep.Tuple [cvtEXPRESSION x408, cvtEXPRESSION x409])) and cvtTYPE (NullType) = PrettyRep.Ctor ("NullType", NONE) | cvtTYPE (UndefinedType) = PrettyRep.Ctor ("UndefinedType", NONE) | cvtTYPE (AnyType) = PrettyRep.Ctor ("AnyType", NONE) | cvtTYPE (RecordType ls417) = PrettyRep.Ctor ("RecordType", SOME (PrettyRep.List (List.map (fn x416 => cvtFIELD_TYPE x416 ) ls417))) - | cvtTYPE (ArrayType(ls424, opt429)) = PrettyRep.Ctor ("ArrayType", SOME (PrettyRep.Tuple [PrettyRep.List (List.map (fn x423 => - cvtTYPE x423 - ) ls424), + | cvtTYPE (ArrayType ls424) = PrettyRep.Ctor ("ArrayType", SOME (PrettyRep.List (List.map (fn x423 => + cvtTYPE x423 + ) ls424))) + | cvtTYPE (UnionType ls431) = PrettyRep.Ctor ("UnionType", SOME (PrettyRep.List (List.map (fn x430 => + cvtTYPE x430 + ) ls431))) + | cvtTYPE (FunctionType x437) = PrettyRep.Ctor ("FunctionType", SOME (cvtFUNCTION_TYPE x437)) + | cvtTYPE (NonNullType x440) = PrettyRep.Ctor ("NonNullType", SOME (cvtTYPE x440)) + | cvtTYPE (AppType(x443, ls445)) = PrettyRep.Ctor ("AppType", SOME (PrettyRep.Tuple [cvtTYPE x443, + PrettyRep.List (List.map (fn x444 => cvtTYPE x444 + ) ls445)])) + | cvtTYPE (TypeName(x452, opt454)) = PrettyRep.Ctor ("TypeName", SOME (PrettyRep.Tuple [cvtNAME_EXPRESSION x452, - (case opt429 of + (case opt454 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x428 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x428)) + | SOME x453 => PrettyRep.Ctor ("SOME", SOME (cvtNONCE x453)) )])) - | cvtTYPE (UnionType ls437) = PrettyRep.Ctor ("UnionType", SOME (PrettyRep.List (List.map (fn x436 => - cvtTYPE x436 - ) ls437))) - | cvtTYPE (FunctionType x443) = PrettyRep.Ctor ("FunctionType", SOME (cvtFUNCTION_TYPE x443)) - | cvtTYPE (NonNullType x446) = PrettyRep.Ctor ("NonNullType", SOME (cvtTYPE x446)) - | cvtTYPE (AppType(x449, ls451)) = PrettyRep.Ctor ("AppType", SOME (PrettyRep.Tuple [cvtTYPE x449, - PrettyRep.List (List.map (fn x450 => cvtTYPE x450 - ) ls451)])) - | cvtTYPE (TypeName(x458, opt460)) = PrettyRep.Ctor ("TypeName", SOME (PrettyRep.Tuple [cvtNAME_EXPRESSION x458, + | cvtTYPE (TypeNameReferenceType(x461, x462)) = PrettyRep.Ctor ("TypeNameReferenceType", + SOME (PrettyRep.Tuple [cvtTYPE x461, cvtNAME_EXPRESSION x462])) + | cvtTYPE (TypeIndexReferenceType(x466, n467)) = PrettyRep.Ctor ("TypeIndexReferenceType", + SOME (PrettyRep.Tuple [cvtTYPE x466, PrettyRep.Int n467])) + | cvtTYPE (InstanceType x471) = PrettyRep.Ctor ("InstanceType", SOME (cvtINSTANCE_TYPE x471)) + and cvtSTATEMENT (EmptyStmt) = PrettyRep.Ctor ("EmptyStmt", NONE) + | cvtSTATEMENT (ExprStmt x475) = PrettyRep.Ctor ("ExprStmt", SOME (cvtEXPRESSION x475)) + | cvtSTATEMENT (InitStmt{kind=x478, ns=opt480, prototype=b484, static=b485, + temps=x486, inits=ls488}) = PrettyRep.Ctor ("InitStmt", SOME (PrettyRep.Rec [("kind", + cvtVAR_DEFN_TAG x478), ("ns", + (case opt480 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x479 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x479)) + )), ("prototype", PrettyRep.Bool b484), ("static", PrettyRep.Bool b485), + ("temps", cvtBINDINGS x486), ("inits", PrettyRep.List (List.map (fn x487 => + cvtINIT_STEP x487 + ) ls488))])) + | cvtSTATEMENT (ClassBlock x507) = PrettyRep.Ctor ("ClassBlock", SOME (cvtCLASS_BLOCK x507)) + | cvtSTATEMENT (ForInStmt x510) = PrettyRep.Ctor ("ForInStmt", SOME (cvtFOR_ENUM_STATEMENT x510)) + | cvtSTATEMENT (ThrowStmt x513) = PrettyRep.Ctor ("ThrowStmt", SOME (cvtEXPRESSION x513)) + | cvtSTATEMENT (ReturnStmt x516) = PrettyRep.Ctor ("ReturnStmt", SOME (cvtEXPRESSION x516)) + | cvtSTATEMENT (BreakStmt opt520) = PrettyRep.Ctor ("BreakStmt", SOME + (case opt520 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x519 => PrettyRep.Ctor ("SOME", SOME (cvtIDENTIFIER x519)) + )) + | cvtSTATEMENT (ContinueStmt opt527) = PrettyRep.Ctor ("ContinueStmt", + SOME + (case opt527 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x526 => PrettyRep.Ctor ("SOME", SOME (cvtIDENTIFIER x526)) + )) + | cvtSTATEMENT (BlockStmt x533) = PrettyRep.Ctor ("BlockStmt", SOME (cvtBLOCK x533)) + | cvtSTATEMENT (LabeledStmt(x536, x537)) = PrettyRep.Ctor ("LabeledStmt", + SOME (PrettyRep.Tuple [cvtIDENTIFIER x536, cvtSTATEMENT x537])) + | cvtSTATEMENT (LetStmt x541) = PrettyRep.Ctor ("LetStmt", SOME (cvtBLOCK x541)) + | cvtSTATEMENT (WhileStmt x544) = PrettyRep.Ctor ("WhileStmt", SOME (cvtWHILE_STATEMENT x544)) + | cvtSTATEMENT (DoWhileStmt x547) = PrettyRep.Ctor ("DoWhileStmt", SOME (cvtWHILE_STATEMENT x547)) + | cvtSTATEMENT (ForStmt x550) = PrettyRep.Ctor ("ForStmt", SOME (cvtFOR_STATEMENT x550)) + | cvtSTATEMENT (IfStmt{cnd=x553, thn=x554, els=x555}) = PrettyRep.Ctor ("IfStmt", + SOME (PrettyRep.Rec [("cnd", cvtEXPRESSION x553), ("thn", cvtSTATEMENT x554), + ("els", cvtSTATEMENT x555)])) + | cvtSTATEMENT (WithStmt{obj=x565, ty=x566, body=x567}) = PrettyRep.Ctor ("WithStmt", + SOME (PrettyRep.Rec [("obj", cvtEXPRESSION x565), ("ty", cvtTYPE x566), + ("body", cvtSTATEMENT x567)])) + | cvtSTATEMENT (TryStmt{block=x577, catches=ls579, finally=opt584}) = + PrettyRep.Ctor ("TryStmt", SOME (PrettyRep.Rec [("block", cvtBLOCK x577), + ("catches", PrettyRep.List (List.map (fn x578 => cvtCATCH_CLAUSE x578 + ) ls579)), ("finally", + (case opt584 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x583 => PrettyRep.Ctor ("SOME", SOME (cvtBLOCK x583)) + ))])) + | cvtSTATEMENT (SwitchStmt{cond=x597, labels=ls599, cases=ls604}) = PrettyRep.Ctor ("SwitchStmt", + SOME (PrettyRep.Rec [("cond", cvtEXPRESSION x597), ("labels", PrettyRep.List (List.map (fn x598 => + cvtIDENTIFIER x598 + ) ls599)), + ("cases", PrettyRep.List (List.map (fn x603 => cvtCASE x603 + ) ls604))])) + | cvtSTATEMENT (SwitchTypeStmt{cond=x617, ty=x618, cases=ls620}) = PrettyRep.Ctor ("SwitchTypeStmt", + SOME (PrettyRep.Rec [("cond", cvtEXPRESSION x617), ("ty", cvtTYPE x618), + ("cases", PrettyRep.List (List.map (fn x619 => cvtCATCH_CLAUSE x619 + ) ls620))])) + | cvtSTATEMENT (DXNStmt{expr=x633}) = PrettyRep.Ctor ("DXNStmt", SOME (PrettyRep.Rec [("expr", + cvtEXPRESSION x633)])) + and cvtEXPRESSION (TernaryExpr(x639, x640, x641)) = PrettyRep.Ctor ("TernaryExpr", + SOME (PrettyRep.Tuple [cvtEXPRESSION x639, cvtEXPRESSION x640, cvtEXPRESSION x641])) + | cvtEXPRESSION (BinaryExpr(x645, x646, x647)) = PrettyRep.Ctor ("BinaryExpr", + SOME (PrettyRep.Tuple [cvtBINOP x645, cvtEXPRESSION x646, cvtEXPRESSION x647])) + | cvtEXPRESSION (BinaryTypeExpr(x651, x652, x653)) = PrettyRep.Ctor ("BinaryTypeExpr", + SOME (PrettyRep.Tuple [cvtBINTYPEOP x651, cvtEXPRESSION x652, cvtTYPE x653])) + | cvtEXPRESSION (UnaryExpr(x657, x658)) = PrettyRep.Ctor ("UnaryExpr", + SOME (PrettyRep.Tuple [cvtUNOP x657, cvtEXPRESSION x658])) + | cvtEXPRESSION (TypeExpr x662) = PrettyRep.Ctor ("TypeExpr", SOME (cvtTYPE x662)) + | cvtEXPRESSION (ThisExpr opt666) = PrettyRep.Ctor ("ThisExpr", SOME + (case opt666 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x665 => PrettyRep.Ctor ("SOME", SOME (cvtTHIS_KIND x665)) + )) + | cvtEXPRESSION (YieldExpr opt673) = PrettyRep.Ctor ("YieldExpr", SOME + (case opt673 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x672 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x672)) + )) + | cvtEXPRESSION (SuperExpr opt680) = PrettyRep.Ctor ("SuperExpr", SOME + (case opt680 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x679 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x679)) + )) + | cvtEXPRESSION (CallExpr{func=x686, actuals=ls688}) = PrettyRep.Ctor ("CallExpr", + SOME (PrettyRep.Rec [("func", cvtEXPRESSION x686), ("actuals", PrettyRep.List (List.map (fn x687 => + cvtEXPRESSION x687 + ) ls688))])) + | cvtEXPRESSION (ApplyTypeExpr{expr=x699, actuals=ls701}) = PrettyRep.Ctor ("ApplyTypeExpr", + SOME (PrettyRep.Rec [("expr", cvtEXPRESSION x699), ("actuals", PrettyRep.List (List.map (fn x700 => + cvtTYPE x700 + ) ls701))])) + | cvtEXPRESSION (LetExpr{defs=x712, body=x713, head=opt715}) = PrettyRep.Ctor ("LetExpr", + SOME (PrettyRep.Rec [("defs", cvtBINDINGS x712), ("body", cvtEXPRESSION x713), + ("head", + (case opt715 of + NONE => PrettyRep.Ctor ("NONE", NONE) + | SOME x714 => PrettyRep.Ctor ("SOME", SOME (cvtHEAD x714)) + ))])) + | cvtEXPRESSION (NewExpr{obj=x728, actuals=ls730}) = PrettyRep.Ctor ("NewExpr", + SOME (PrettyRep.Rec [("obj", cvtEXPRESSION x728), ("actuals", PrettyRep.List (List.map (fn x729 => + cvtEXPRESSION x729 + ) ls730))])) + | cvtEXPRESSION (SetExpr(x741, x742, x743)) = PrettyRep.Ctor ("SetExpr", + SOME (PrettyRep.Tuple [cvtASSIGNOP x741, cvtEXPRESSION x742, cvtEXPRESSION x743])) + | cvtEXPRESSION (ListExpr ls748) = PrettyRep.Ctor ("ListExpr", SOME (PrettyRep.List (List.map (fn x747 => + cvtEXPRESSION x747 + ) ls748))) + | cvtEXPRESSION (InitExpr(x754, x755, x756)) = PrettyRep.Ctor ("InitExpr", + SOME (PrettyRep.Tuple [cvtINIT_TARGET x754, cvtHEAD x755, cvtINITS x756])) + | cvtEXPRESSION (GetTemp n760) = PrettyRep.Ctor ("GetTemp", SOME (PrettyRep.Int n760)) + | cvtEXPRESSION (GetParam n763) = PrettyRep.Ctor ("GetParam", SOME (PrettyRep.Int n763)) + | cvtEXPRESSION (Comprehension(x766, ls768, opt773)) = PrettyRep.Ctor ("Comprehension", + SOME (PrettyRep.Tuple [cvtEXPRESSION x766, PrettyRep.List (List.map (fn x767 => + cvtFOR_ENUM_HEAD x767 + ) ls768), - (case opt460 of + (case opt773 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x459 => PrettyRep.Ctor ("SOME", SOME (cvtNONCE x459)) + | SOME x772 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x772)) )])) - | cvtTYPE (TypeNameReferenceType(x467, x468)) = PrettyRep.Ctor ("TypeNameReferenceType", - SOME (PrettyRep.Tuple [cvtTYPE x467, cvtNAME_EXPRESSION x468])) - | cvtTYPE (TypeIndexReferenceType(x472, n473)) = PrettyRep.Ctor ("TypeIndexReferenceType", - SOME (PrettyRep.Tuple [cvtTYPE x472, PrettyRep.Int n473])) - | cvtTYPE (InstanceType x477) = PrettyRep.Ctor ("InstanceType", SOME (cvtINSTANCE_TYPE x477)) - and cvtSTATEMENT (EmptyStmt) = PrettyRep.Ctor ("EmptyStmt", NONE) - | cvtSTATEMENT (ExprStmt x481) = PrettyRep.Ctor ("ExprStmt", SOME (cvtEXPRESSION x481)) - | cvtSTATEMENT (InitStmt{kind=x484, ns=opt486, prototype=b490, static=b491, - temps=x492, inits=ls494}) = PrettyRep.Ctor ("InitStmt", SOME (PrettyRep.Rec [("kind", - cvtVAR_DEFN_TAG x484), ("ns", - (case opt486 of + | cvtEXPRESSION (LiteralExpr x780) = PrettyRep.Ctor ("LiteralExpr", SOME (cvtLITERAL x780)) + | cvtEXPRESSION (LexicalReference{name=x783, loc=opt785}) = PrettyRep.Ctor ("LexicalReference", + SOME (PrettyRep.Rec [("name", cvtNAME_EXPRESSION x783), ("loc", + (case opt785 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x485 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x485)) - )), ("prototype", PrettyRep.Bool b490), ("static", PrettyRep.Bool b491), - ("temps", cvtBINDINGS x492), ("inits", PrettyRep.List (List.map (fn x493 => - cvtINIT_STEP x493 - ) ls494))])) - | cvtSTATEMENT (ClassBlock x513) = PrettyRep.Ctor ("ClassBlock", SOME (cvtCLASS_BLOCK x513)) - | cvtSTATEMENT (ForInStmt x516) = PrettyRep.Ctor ("ForInStmt", SOME (cvtFOR_ENUM_STATEMENT x516)) - | cvtSTATEMENT (ThrowStmt x519) = PrettyRep.Ctor ("ThrowStmt", SOME (cvtEXPRESSION x519)) - | cvtSTATEMENT (ReturnStmt x522) = PrettyRep.Ctor ("ReturnStmt", SOME (cvtEXPRESSION x522)) - | cvtSTATEMENT (BreakStmt opt526) = PrettyRep.Ctor ("BreakStmt", SOME - (case opt526 of + | SOME x784 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x784)) + ))])) + | cvtEXPRESSION (ObjectNameReference{object=x796, name=x797, loc=opt799}) = + PrettyRep.Ctor ("ObjectNameReference", SOME (PrettyRep.Rec [("object", + cvtEXPRESSION x796), ("name", cvtNAME_EXPRESSION x797), ("loc", + (case opt799 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x525 => PrettyRep.Ctor ("SOME", SOME (cvtIDENTIFIER x525)) - )) - | cvtSTATEMENT (ContinueStmt opt533) = PrettyRep.Ctor ("ContinueStmt", - SOME - (case opt533 of + | SOME x798 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x798)) + ))])) + | cvtEXPRESSION (ObjectIndexReference{object=x812, index=x813, loc=opt815}) = + PrettyRep.Ctor ("ObjectIndexReference", SOME (PrettyRep.Rec [("object", + cvtEXPRESSION x812), ("index", cvtEXPRESSION x813), ("loc", + (case opt815 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x532 => PrettyRep.Ctor ("SOME", SOME (cvtIDENTIFIER x532)) - )) - | cvtSTATEMENT (BlockStmt x539) = PrettyRep.Ctor ("BlockStmt", SOME (cvtBLOCK x539)) - | cvtSTATEMENT (LabeledStmt(x542, x543)) = PrettyRep.Ctor ("LabeledStmt", - SOME (PrettyRep.Tuple [cvtIDENTIFIER x542, cvtSTATEMENT x543])) - | cvtSTATEMENT (LetStmt x547) = PrettyRep.Ctor ("LetStmt", SOME (cvtBLOCK x547)) - | cvtSTATEMENT (WhileStmt x550) = PrettyRep.Ctor ("WhileStmt", SOME (cvtWHILE_STATEMENT x550)) - | cvtSTATEMENT (DoWhileStmt x553) = PrettyRep.Ctor ("DoWhileStmt", SOME (cvtWHILE_STATEMENT x553)) - | cvtSTATEMENT (ForStmt x556) = PrettyRep.Ctor ("ForStmt", SOME (cvtFOR_STATEMENT x556)) - | cvtSTATEMENT (IfStmt{cnd=x559, thn=x560, els=x561}) = PrettyRep.Ctor ("IfStmt", - SOME (PrettyRep.Rec [("cnd", cvtEXPRESSION x559), ("thn", cvtSTATEMENT x560), - ("els", cvtSTATEMENT x561)])) - | cvtSTATEMENT (WithStmt{obj=x571, ty=x572, body=x573}) = PrettyRep.Ctor ("WithStmt", - SOME (PrettyRep.Rec [("obj", cvtEXPRESSION x571), ("ty", cvtTYPE x572), - ("body", cvtSTATEMENT x573)])) - | cvtSTATEMENT (TryStmt{block=x583, catches=ls585, finally=opt590}) = - PrettyRep.Ctor ("TryStmt", SOME (PrettyRep.Rec [("block", cvtBLOCK x583), - ("catches", PrettyRep.List (List.map (fn x584 => cvtCATCH_CLAUSE x584 - ) ls585)), ("finally", - (case opt590 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x589 => PrettyRep.Ctor ("SOME", SOME (cvtBLOCK x589)) - ))])) - | cvtSTATEMENT (SwitchStmt{cond=x603, labels=ls605, cases=ls610}) = PrettyRep.Ctor ("SwitchStmt", - SOME (PrettyRep.Rec [("cond", cvtEXPRESSION x603), ("labels", PrettyRep.List (List.map (fn x604 => - cvtIDENTIFIER x604 - ) ls605)), - ("cases", PrettyRep.List (List.map (fn x609 => cvtCASE x609 - ) ls610))])) - | cvtSTATEMENT (SwitchTypeStmt{cond=x623, ty=x624, cases=ls626}) = PrettyRep.Ctor ("SwitchTypeStmt", - SOME (PrettyRep.Rec [("cond", cvtEXPRESSION x623), ("ty", cvtTYPE x624), - ("cases", PrettyRep.List (List.map (fn x625 => cvtCATCH_CLAUSE x625 - ) ls626))])) - | cvtSTATEMENT (DXNStmt{expr=x639}) = PrettyRep.Ctor ("DXNStmt", SOME (PrettyRep.Rec [("expr", - cvtEXPRESSION x639)])) - and cvtEXPRESSION (TernaryExpr(x645, x646, x647)) = PrettyRep.Ctor ("TernaryExpr", - SOME (PrettyRep.Tuple [cvtEXPRESSION x645, cvtEXPRESSION x646, cvtEXPRESSION x647])) - | cvtEXPRESSION (BinaryExpr(x651, x652, x653)) = PrettyRep.Ctor ("BinaryExpr", - SOME (PrettyRep.Tuple [cvtBINOP x651, cvtEXPRESSION x652, cvtEXPRESSION x653])) - | cvtEXPRESSION (BinaryTypeExpr(x657, x658, x659)) = PrettyRep.Ctor ("BinaryTypeExpr", - SOME (PrettyRep.Tuple [cvtBINTYPEOP x657, cvtEXPRESSION x658, cvtTYPE x659])) - | cvtEXPRESSION (UnaryExpr(x663, x664)) = PrettyRep.Ctor ("UnaryExpr", - SOME (PrettyRep.Tuple [cvtUNOP x663, cvtEXPRESSION x664])) - | cvtEXPRESSION (TypeExpr x668) = PrettyRep.Ctor ("TypeExpr", SOME (cvtTYPE x668)) - | cvtEXPRESSION (ThisExpr opt672) = PrettyRep.Ctor ("ThisExpr", SOME - (case opt672 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x671 => PrettyRep.Ctor ("SOME", SOME (cvtTHIS_KIND x671)) - )) - | cvtEXPRESSION (YieldExpr opt679) = PrettyRep.Ctor ("YieldExpr", SOME - (case opt679 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x678 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x678)) - )) - | cvtEXPRESSION (SuperExpr opt686) = PrettyRep.Ctor ("SuperExpr", SOME - (case opt686 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x685 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x685)) - )) - | cvtEXPRESSION (CallExpr{func=x692, actuals=ls694}) = PrettyRep.Ctor ("CallExpr", - SOME (PrettyRep.Rec [("func", cvtEXPRESSION x692), ("actuals", PrettyRep.List (List.map (fn x693 => - cvtEXPRESSION x693 - ) ls694))])) - | cvtEXPRESSION (ApplyTypeExpr{expr=x705, actuals=ls707}) = PrettyRep.Ctor ("ApplyTypeExpr", - SOME (PrettyRep.Rec [("expr", cvtEXPRESSION x705), ("actuals", PrettyRep.List (List.map (fn x706 => - cvtTYPE x706 - ) ls707))])) - | cvtEXPRESSION (LetExpr{defs=x718, body=x719, head=opt721}) = PrettyRep.Ctor ("LetExpr", - SOME (PrettyRep.Rec [("defs", cvtBINDINGS x718), ("body", cvtEXPRESSION x719), - ("head", - (case opt721 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x720 => PrettyRep.Ctor ("SOME", SOME (cvtHEAD x720)) - ))])) - | cvtEXPRESSION (NewExpr{obj=x734, actuals=ls736}) = PrettyRep.Ctor ("NewExpr", - SOME (PrettyRep.Rec [("obj", cvtEXPRESSION x734), ("actuals", PrettyRep.List (List.map (fn x735 => - cvtEXPRESSION x735 - ) ls736))])) - | cvtEXPRESSION (SetExpr(x747, x748, x749)) = PrettyRep.Ctor ("SetExpr", - SOME (PrettyRep.Tuple [cvtASSIGNOP x747, cvtEXPRESSION x748, cvtEXPRESSION x749])) - | cvtEXPRESSION (ListExpr ls754) = PrettyRep.Ctor ("ListExpr", SOME (PrettyRep.List (List.map (fn x753 => - cvtEXPRESSION x753 - ) ls754))) - | cvtEXPRESSION (InitExpr(x760, x761, x762)) = PrettyRep.Ctor ("InitExpr", - SOME (PrettyRep.Tuple [cvtINIT_TARGET x760, cvtHEAD x761, cvtINITS x762])) - | cvtEXPRESSION (GetTemp n766) = PrettyRep.Ctor ("GetTemp", SOME (PrettyRep.Int n766)) - | cvtEXPRESSION (GetParam n769) = PrettyRep.Ctor ("GetParam", SOME (PrettyRep.Int n769)) - | cvtEXPRESSION (Comprehension(x772, ls774, opt779)) = PrettyRep.Ctor ("Comprehension", - SOME (PrettyRep.Tuple [cvtEXPRESSION x772, PrettyRep.List (List.map (fn x773 => - cvtFOR_ENUM_HEAD x773 - ) ls774), - - (case opt779 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x778 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x778)) - )])) - | cvtEXPRESSION (LiteralExpr x786) = PrettyRep.Ctor ("LiteralExpr", SOME (cvtLITERAL x786)) - | cvtEXPRESSION (LexicalReference{name=x789, loc=opt791}) = PrettyRep.Ctor ("LexicalReference", - SOME (PrettyRep.Rec [("name", cvtNAME_EXPRESSION x789), ("loc", - (case opt791 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x790 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x790)) - ))])) - | cvtEXPRESSION (ObjectNameReference{object=x802, name=x803, loc=opt805}) = - PrettyRep.Ctor ("ObjectNameReference", SOME (PrettyRep.Rec [("object", - cvtEXPRESSION x802), ("name", cvtNAME_EXPRESSION x803), ("loc", - (case opt805 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x804 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x804)) - ))])) - | cvtEXPRESSION (ObjectIndexReference{object=x818, index=x819, loc=opt821}) = - PrettyRep.Ctor ("ObjectIndexReference", SOME (PrettyRep.Rec [("object", - cvtEXPRESSION x818), ("index", cvtEXPRESSION x819), ("loc", - (case opt821 of - NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x820 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x820)) + | SOME x814 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x814)) ))])) and cvtINIT_TARGET (Hoisted) = PrettyRep.Ctor ("Hoisted", NONE) | cvtINIT_TARGET (Local) = PrettyRep.Ctor ("Local", NONE) | cvtINIT_TARGET (Prototype) = PrettyRep.Ctor ("Prototype", NONE) and cvtTHIS_KIND (FunctionThis) = PrettyRep.Ctor ("FunctionThis", NONE) | cvtTHIS_KIND (GeneratorThis) = PrettyRep.Ctor ("GeneratorThis", NONE) - and cvtFIXTURE_NAME (TempName n839) = PrettyRep.Ctor ("TempName", SOME (PrettyRep.Int n839)) - | cvtFIXTURE_NAME (PropName x842) = PrettyRep.Ctor ("PropName", SOME (cvtNAME x842)) + and cvtFIXTURE_NAME (TempName n833) = PrettyRep.Ctor ("TempName", SOME (PrettyRep.Int n833)) + | cvtFIXTURE_NAME (PropName x836) = PrettyRep.Ctor ("PropName", SOME (cvtNAME x836)) and cvtLITERAL (LiteralNull) = PrettyRep.Ctor ("LiteralNull", NONE) | cvtLITERAL (LiteralUndefined) = PrettyRep.Ctor ("LiteralUndefined", NONE) - | cvtLITERAL (LiteralDouble r847) = PrettyRep.Ctor ("LiteralDouble", SOME (PrettyRep.Real64 r847)) - | cvtLITERAL (LiteralDecimal d850) = PrettyRep.Ctor ("LiteralDecimal", - SOME (PrettyRep.Dec d850)) - | cvtLITERAL (LiteralBoolean b853) = PrettyRep.Ctor ("LiteralBoolean", - SOME (PrettyRep.Bool b853)) - | cvtLITERAL (LiteralString s856) = PrettyRep.Ctor ("LiteralString", SOME (PrettyRep.UniStr s856)) - | cvtLITERAL (LiteralArray{exprs=x859, ty=opt861}) = PrettyRep.Ctor ("LiteralArray", - SOME (PrettyRep.Rec [("exprs", cvtEXPRESSION x859), ("ty", - (case opt861 of + | cvtLITERAL (LiteralDouble r841) = PrettyRep.Ctor ("LiteralDouble", SOME (PrettyRep.Real64 r841)) + | cvtLITERAL (LiteralDecimal d844) = PrettyRep.Ctor ("LiteralDecimal", + SOME (PrettyRep.Dec d844)) + | cvtLITERAL (LiteralBoolean b847) = PrettyRep.Ctor ("LiteralBoolean", + SOME (PrettyRep.Bool b847)) + | cvtLITERAL (LiteralString s850) = PrettyRep.Ctor ("LiteralString", SOME (PrettyRep.UniStr s850)) + | cvtLITERAL (LiteralArray{exprs=x853, ty=opt855}) = PrettyRep.Ctor ("LiteralArray", + SOME (PrettyRep.Rec [("exprs", cvtEXPRESSION x853), ("ty", + (case opt855 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x860 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x860)) + | SOME x854 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x854)) ))])) - | cvtLITERAL (LiteralXML ls873) = PrettyRep.Ctor ("LiteralXML", SOME (PrettyRep.List (List.map (fn x872 => - cvtEXPRESSION x872 - ) ls873))) - | cvtLITERAL (LiteralNamespace x879) = PrettyRep.Ctor ("LiteralNamespace", - SOME (cvtNAMESPACE x879)) - | cvtLITERAL (LiteralObject{expr=ls883, ty=opt888}) = PrettyRep.Ctor ("LiteralObject", - SOME (PrettyRep.Rec [("expr", PrettyRep.List (List.map (fn x882 => - cvtFIELD x882 - ) ls883)), + | cvtLITERAL (LiteralXML ls867) = PrettyRep.Ctor ("LiteralXML", SOME (PrettyRep.List (List.map (fn x866 => + cvtEXPRESSION x866 + ) ls867))) + | cvtLITERAL (LiteralNamespace x873) = PrettyRep.Ctor ("LiteralNamespace", + SOME (cvtNAMESPACE x873)) + | cvtLITERAL (LiteralObject{expr=ls877, ty=opt882}) = PrettyRep.Ctor ("LiteralObject", + SOME (PrettyRep.Rec [("expr", PrettyRep.List (List.map (fn x876 => + cvtFIELD x876 + ) ls877)), ("ty", - (case opt888 of + (case opt882 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x887 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x887)) + | SOME x881 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x881)) ))])) - | cvtLITERAL (LiteralFunction x899) = PrettyRep.Ctor ("LiteralFunction", - SOME (cvtFUNC x899)) - | cvtLITERAL (LiteralRegExp{str=s902}) = PrettyRep.Ctor ("LiteralRegExp", - SOME (PrettyRep.Rec [("str", PrettyRep.UniStr s902)])) - and cvtBLOCK (Block x908) = PrettyRep.Ctor ("Block", SOME (cvtDIRECTIVES x908)) - and cvtFIXTURE (NamespaceFixture x911) = PrettyRep.Ctor ("NamespaceFixture", - SOME (cvtNAMESPACE x911)) - | cvtFIXTURE (ClassFixture x914) = PrettyRep.Ctor ("ClassFixture", SOME (cvtCLS x914)) - | cvtFIXTURE (InterfaceFixture x917) = PrettyRep.Ctor ("InterfaceFixture", - SOME (cvtIFACE x917)) - | cvtFIXTURE (TypeVarFixture x920) = PrettyRep.Ctor ("TypeVarFixture", - SOME (cvtNONCE x920)) - | cvtFIXTURE (TypeFixture(ls924, x928)) = PrettyRep.Ctor ("TypeFixture", - SOME (PrettyRep.Tuple [PrettyRep.List (List.map (fn x923 => cvtIDENTIFIER x923 - ) ls924), cvtTYPE x928])) - | cvtFIXTURE (MethodFixture{func=x932, ty=x933, readOnly=b934, override=b935, - final=b936}) = PrettyRep.Ctor ("MethodFixture", SOME (PrettyRep.Rec [("func", - cvtFUNC x932), ("ty", cvtTYPE x933), ("readOnly", PrettyRep.Bool b934), - ("override", PrettyRep.Bool b935), ("final", PrettyRep.Bool b936)])) - | cvtFIXTURE (ValFixture{ty=x950, readOnly=b951}) = PrettyRep.Ctor ("ValFixture", - SOME (PrettyRep.Rec [("ty", cvtTYPE x950), ("readOnly", PrettyRep.Bool b951)])) - | cvtFIXTURE (VirtualValFixture{ty=x959, getter=opt961, setter=opt966}) = + | cvtLITERAL (LiteralFunction x893) = PrettyRep.Ctor ("LiteralFunction", + SOME (cvtFUNC x893)) + | cvtLITERAL (LiteralRegExp{str=s896}) = PrettyRep.Ctor ("LiteralRegExp", + SOME (PrettyRep.Rec [("str", PrettyRep.UniStr s896)])) + and cvtBLOCK (Block x902) = PrettyRep.Ctor ("Block", SOME (cvtDIRECTIVES x902)) + and cvtFIXTURE (NamespaceFixture x905) = PrettyRep.Ctor ("NamespaceFixture", + SOME (cvtNAMESPACE x905)) + | cvtFIXTURE (ClassFixture x908) = PrettyRep.Ctor ("ClassFixture", SOME (cvtCLS x908)) + | cvtFIXTURE (InterfaceFixture x911) = PrettyRep.Ctor ("InterfaceFixture", + SOME (cvtIFACE x911)) + | cvtFIXTURE (TypeVarFixture x914) = PrettyRep.Ctor ("TypeVarFixture", + SOME (cvtNONCE x914)) + | cvtFIXTURE (TypeFixture(ls918, x922)) = PrettyRep.Ctor ("TypeFixture", + SOME (PrettyRep.Tuple [PrettyRep.List (List.map (fn x917 => cvtIDENTIFIER x917 + ) ls918), cvtTYPE x922])) + | cvtFIXTURE (MethodFixture{func=x926, ty=x927, writable=b928, override=b929, + final=b930}) = PrettyRep.Ctor ("MethodFixture", SOME (PrettyRep.Rec [("func", + cvtFUNC x926), ("ty", cvtTYPE x927), ("writable", PrettyRep.Bool b928), + ("override", PrettyRep.Bool b929), ("final", PrettyRep.Bool b930)])) + | cvtFIXTURE (ValFixture{ty=x944, writable=b945}) = PrettyRep.Ctor ("ValFixture", + SOME (PrettyRep.Rec [("ty", cvtTYPE x944), ("writable", PrettyRep.Bool b945)])) + | cvtFIXTURE (VirtualValFixture{ty=x953, getter=opt955, setter=opt960}) = PrettyRep.Ctor ("VirtualValFixture", SOME (PrettyRep.Rec [("ty", - cvtTYPE x959), ("getter", - (case opt961 of + cvtTYPE x953), ("getter", + (case opt955 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x960 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x960)) + | SOME x954 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x954)) )), ("setter", - (case opt966 of + (case opt960 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x965 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x965)) + | SOME x959 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x959)) ))])) - and cvtHEAD (Head(x979, x980)) = PrettyRep.Ctor ("Head", SOME (PrettyRep.Tuple [cvtRIB x979, - cvtINITS x980])) - and cvtBINDINGS (ls985, ls990) = PrettyRep.Tuple [PrettyRep.List (List.map (fn x984 => - cvtBINDING x984 - ) ls985), - PrettyRep.List (List.map (fn x989 => cvtINIT_STEP x989 - ) ls990)] - and cvtRIB ls998 = PrettyRep.List (List.map (fn (x995, x996) => PrettyRep.Tuple [cvtFIXTURE_NAME x995, - cvtFIXTURE x996] - ) ls998) - and cvtRIBS ls1009 = PrettyRep.List (List.map (fn ls1005 => PrettyRep.List (List.map (fn (x1002, - x1003) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1002, - cvtFIXTURE x1003] - ) ls1005) - ) ls1009) - and cvtINITS ls1016 = PrettyRep.List (List.map (fn (x1013, x1014) => PrettyRep.Tuple [cvtFIXTURE_NAME x1013, - cvtEXPRESSION x1014] - ) ls1016) - and cvtINSTANCE_TYPE {name=x1020, typeArgs=ls1022, nonnullable=b1026, typeParams=ls1028, - superTypes=ls1033, ty=x1037, dynamic=b1038} = PrettyRep.Rec [("name", - cvtNAME x1020), ("typeArgs", PrettyRep.List (List.map (fn x1021 => - cvtTYPE x1021 - ) ls1022)), - ("nonnullable", PrettyRep.Bool b1026), ("typeParams", PrettyRep.List (List.map (fn x1027 => - cvtIDENTIFIER x1027 - ) ls1028)), - ("superTypes", PrettyRep.List (List.map (fn x1032 => cvtTYPE x1032 - ) ls1033)), ("ty", cvtTYPE x1037), - ("dynamic", PrettyRep.Bool b1038)] - and cvtFIELD {kind=x1054, name=x1055, init=x1056} = PrettyRep.Rec [("kind", - cvtVAR_DEFN_TAG x1054), ("name", cvtNAME_EXPRESSION x1055), ("init", - cvtEXPRESSION x1056)] - and cvtFIELD_TYPE {name=x1064, ty=x1065} = PrettyRep.Rec [("name", cvtNAME_EXPRESSION x1064), - ("ty", cvtTYPE x1065)] - and cvtFUNCTION_TYPE {typeParams=ls1072, thisType=x1076, params=ls1078, - minArgs=n1082, hasRest=b1083, result=opt1085} = PrettyRep.Rec [("typeParams", - PrettyRep.List (List.map (fn x1071 => cvtIDENTIFIER x1071 - ) ls1072)), ("thisType", cvtTYPE x1076), - ("params", PrettyRep.List (List.map (fn x1077 => cvtTYPE x1077 - ) ls1078)), ("minArgs", PrettyRep.Int n1082), - ("hasRest", PrettyRep.Bool b1083), ("result", - (case opt1085 of + and cvtHEAD (Head(x973, x974)) = PrettyRep.Ctor ("Head", SOME (PrettyRep.Tuple [cvtRIB x973, + cvtINITS x974])) + and cvtBINDINGS (ls979, ls984) = PrettyRep.Tuple [PrettyRep.List (List.map (fn x978 => + cvtBINDING x978 + ) ls979), + PrettyRep.List (List.map (fn x983 => cvtINIT_STEP x983 + ) ls984)] + and cvtRIB ls992 = PrettyRep.List (List.map (fn (x989, x990) => PrettyRep.Tuple [cvtFIXTURE_NAME x989, + cvtFIXTURE x990] + ) ls992) + and cvtRIBS ls1003 = PrettyRep.List (List.map (fn ls999 => PrettyRep.List (List.map (fn (x996, + x997) => + PrettyRep.Tuple [cvtFIXTURE_NAME x996, + cvtFIXTURE x997] + ) ls999) + ) ls1003) + and cvtINITS ls1010 = PrettyRep.List (List.map (fn (x1007, x1008) => PrettyRep.Tuple [cvtFIXTURE_NAME x1007, + cvtEXPRESSION x1008] + ) ls1010) + and cvtINSTANCE_TYPE {name=x1014, typeArgs=ls1016, nonnullable=b1020, typeParams=ls1022, + superTypes=ls1027, ty=x1031, dynamic=b1032} = PrettyRep.Rec [("name", + cvtNAME x1014), ("typeArgs", PrettyRep.List (List.map (fn x1015 => + cvtTYPE x1015 + ) ls1016)), + ("nonnullable", PrettyRep.Bool b1020), ("typeParams", PrettyRep.List (List.map (fn x1021 => + cvtIDENTIFIER x1021 + ) ls1022)), + ("superTypes", PrettyRep.List (List.map (fn x1026 => cvtTYPE x1026 + ) ls1027)), ("ty", cvtTYPE x1031), + ("dynamic", PrettyRep.Bool b1032)] + and cvtFIELD {kind=x1048, name=x1049, init=x1050} = PrettyRep.Rec [("kind", + cvtVAR_DEFN_TAG x1048), ("name", cvtNAME_EXPRESSION x1049), ("init", + cvtEXPRESSION x1050)] + and cvtFIELD_TYPE {name=x1058, ty=x1059} = PrettyRep.Rec [("name", cvtNAME_EXPRESSION x1058), + ("ty", cvtTYPE x1059)] + and cvtFUNCTION_TYPE {typeParams=ls1066, thisType=x1070, params=ls1072, + minArgs=n1076, hasRest=b1077, result=opt1079} = PrettyRep.Rec [("typeParams", + PrettyRep.List (List.map (fn x1065 => cvtIDENTIFIER x1065 + ) ls1066)), ("thisType", cvtTYPE x1070), + ("params", PrettyRep.List (List.map (fn x1071 => cvtTYPE x1071 + ) ls1072)), ("minArgs", PrettyRep.Int n1076), + ("hasRest", PrettyRep.Bool b1077), ("result", + (case opt1079 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1084 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x1084)) + | SOME x1078 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x1078)) ))] - and cvtFUNC_DEFN {kind=x1102, ns=opt1104, final=b1108, override=b1109, prototype=b1110, - static=b1111, func=x1112} = PrettyRep.Rec [("kind", cvtVAR_DEFN_TAG x1102), + and cvtFUNC_DEFN {kind=x1096, ns=opt1098, final=b1102, override=b1103, prototype=b1104, + static=b1105, func=x1106} = PrettyRep.Rec [("kind", cvtVAR_DEFN_TAG x1096), ("ns", - (case opt1104 of + (case opt1098 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1103 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1103)) - )), ("final", PrettyRep.Bool b1108), ("override", PrettyRep.Bool b1109), - ("prototype", PrettyRep.Bool b1110), ("static", PrettyRep.Bool b1111), - ("func", cvtFUNC x1112)] - and cvtCTOR_DEFN x1128 = cvtCTOR x1128 - and cvtVAR_DEFN {kind=x1129, ns=opt1131, static=b1135, prototype=b1136, - bindings=(ls1138, ls1143)} = PrettyRep.Rec [("kind", cvtVAR_DEFN_TAG x1129), + | SOME x1097 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1097)) + )), ("final", PrettyRep.Bool b1102), ("override", PrettyRep.Bool b1103), + ("prototype", PrettyRep.Bool b1104), ("static", PrettyRep.Bool b1105), + ("func", cvtFUNC x1106)] + and cvtCTOR_DEFN x1122 = cvtCTOR x1122 + and cvtVAR_DEFN {kind=x1123, ns=opt1125, static=b1129, prototype=b1130, + bindings=(ls1132, ls1137)} = PrettyRep.Rec [("kind", cvtVAR_DEFN_TAG x1123), ("ns", - (case opt1131 of + (case opt1125 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1130 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1130)) - )), ("static", PrettyRep.Bool b1135), ("prototype", PrettyRep.Bool b1136), - ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1137 => - cvtBINDING x1137 - ) ls1138), - PrettyRep.List (List.map (fn x1142 => cvtINIT_STEP x1142 - ) ls1143)])] - and cvtNAMESPACE_DEFN {ident=x1159, ns=opt1161, init=opt1166} = PrettyRep.Rec [("ident", - cvtIDENTIFIER x1159), ("ns", - (case opt1161 of + | SOME x1124 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1124)) + )), ("static", PrettyRep.Bool b1129), ("prototype", PrettyRep.Bool b1130), + ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1131 => + cvtBINDING x1131 + ) ls1132), + PrettyRep.List (List.map (fn x1136 => cvtINIT_STEP x1136 + ) ls1137)])] + and cvtNAMESPACE_DEFN {ident=x1153, ns=opt1155, init=opt1160} = PrettyRep.Rec [("ident", + cvtIDENTIFIER x1153), ("ns", + (case opt1155 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1160 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1160)) + | SOME x1154 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1154)) )), ("init", - (case opt1166 of + (case opt1160 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1165 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1165)) + | SOME x1159 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1159)) ))] - and cvtCLASS_DEFN {ns=opt1178, privateNS=x1182, protectedNS=x1183, ident=x1184, - nonnullable=b1185, dynamic=b1186, final=b1187, params=ls1189, extends=opt1194, - implements=ls1199, classDefns=ls1204, instanceDefns=ls1209, instanceStmts=ls1214, - ctorDefn=opt1219} = PrettyRep.Rec [("ns", - (case opt1178 of + and cvtCLASS_DEFN {ns=opt1172, privateNS=x1176, protectedNS=x1177, ident=x1178, + nonnullable=b1179, dynamic=b1180, final=b1181, params=ls1183, extends=opt1188, + implements=ls1193, classDefns=ls1198, instanceDefns=ls1203, instanceStmts=ls1208, + ctorDefn=opt1213} = PrettyRep.Rec [("ns", + (case opt1172 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1177 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1177)) - )), ("privateNS", cvtNAMESPACE x1182), ("protectedNS", cvtNAMESPACE x1183), - ("ident", cvtIDENTIFIER x1184), ("nonnullable", PrettyRep.Bool b1185), - ("dynamic", PrettyRep.Bool b1186), ("final", PrettyRep.Bool b1187), - ("params", PrettyRep.List (List.map (fn x1188 => cvtIDENTIFIER x1188 - ) ls1189)), ("extends", - (case opt1194 of + | SOME x1171 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1171)) + )), ("privateNS", cvtNAMESPACE x1176), ("protectedNS", cvtNAMESPACE x1177), + ("ident", cvtIDENTIFIER x1178), ("nonnullable", PrettyRep.Bool b1179), + ("dynamic", PrettyRep.Bool b1180), ("final", PrettyRep.Bool b1181), + ("params", PrettyRep.List (List.map (fn x1182 => cvtIDENTIFIER x1182 + ) ls1183)), ("extends", + (case opt1188 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1193 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x1193)) - )), ("implements", PrettyRep.List (List.map (fn x1198 => cvtTYPE x1198 - ) ls1199)), ("classDefns", - PrettyRep.List (List.map (fn x1203 => cvtDEFN x1203 - ) ls1204)), ("instanceDefns", PrettyRep.List (List.map (fn x1208 => - cvtDEFN x1208 - ) ls1209)), - ("instanceStmts", PrettyRep.List (List.map (fn x1213 => cvtSTATEMENT x1213 - ) ls1214)), ("ctorDefn", + | SOME x1187 => PrettyRep.Ctor ("SOME", SOME (cvtTYPE x1187)) + )), ("implements", PrettyRep.List (List.map (fn x1192 => cvtTYPE x1192 + ) ls1193)), ("classDefns", + PrettyRep.List (List.map (fn x1197 => cvtDEFN x1197 + ) ls1198)), ("instanceDefns", PrettyRep.List (List.map (fn x1202 => + cvtDEFN x1202 + ) ls1203)), + ("instanceStmts", PrettyRep.List (List.map (fn x1207 => cvtSTATEMENT x1207 + ) ls1208)), ("ctorDefn", - (case opt1219 of + (case opt1213 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1218 => PrettyRep.Ctor ("SOME", SOME (cvtCTOR x1218)) + | SOME x1212 => PrettyRep.Ctor ("SOME", SOME (cvtCTOR x1212)) ))] - and cvtINTERFACE_DEFN {ident=x1252, ns=opt1254, nonnullable=b1258, params=ls1260, - extends=ls1265, instanceDefns=ls1270} = PrettyRep.Rec [("ident", - cvtIDENTIFIER x1252), ("ns", - (case opt1254 of + and cvtINTERFACE_DEFN {ident=x1246, ns=opt1248, nonnullable=b1252, params=ls1254, + extends=ls1259, instanceDefns=ls1264} = PrettyRep.Rec [("ident", + cvtIDENTIFIER x1246), ("ns", + (case opt1248 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1253 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1253)) - )), ("nonnullable", PrettyRep.Bool b1258), ("params", PrettyRep.List (List.map (fn x1259 => - cvtIDENTIFIER x1259 - ) ls1260)), - ("extends", PrettyRep.List (List.map (fn x1264 => cvtTYPE x1264 - ) ls1265)), ("instanceDefns", - PrettyRep.List (List.map (fn x1269 => cvtDEFN x1269 - ) ls1270))] - and cvtTYPE_DEFN {ident=x1287, ns=opt1289, typeParams=ls1294, init=x1298} = - PrettyRep.Rec [("ident", cvtIDENTIFIER x1287), ("ns", - (case opt1289 of + | SOME x1247 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1247)) + )), ("nonnullable", PrettyRep.Bool b1252), ("params", PrettyRep.List (List.map (fn x1253 => + cvtIDENTIFIER x1253 + ) ls1254)), + ("extends", PrettyRep.List (List.map (fn x1258 => cvtTYPE x1258 + ) ls1259)), ("instanceDefns", + PrettyRep.List (List.map (fn x1263 => cvtDEFN x1263 + ) ls1264))] + and cvtTYPE_DEFN {ident=x1281, ns=opt1283, typeParams=ls1288, init=x1292} = + PrettyRep.Rec [("ident", cvtIDENTIFIER x1281), ("ns", + (case opt1283 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1288 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1288)) - )), ("typeParams", PrettyRep.List (List.map (fn x1293 => cvtIDENTIFIER x1293 - ) ls1294)), ("init", cvtTYPE x1298)] - and cvtCLASS_BLOCK {ns=opt1309, protectedNS=x1313, privateNS=x1314, ident=x1315, - name=opt1317, block=x1321} = PrettyRep.Rec [("ns", - (case opt1309 of + | SOME x1282 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1282)) + )), ("typeParams", PrettyRep.List (List.map (fn x1287 => cvtIDENTIFIER x1287 + ) ls1288)), ("init", cvtTYPE x1292)] + and cvtCLASS_BLOCK {ns=opt1303, protectedNS=x1307, privateNS=x1308, ident=x1309, + name=opt1311, block=x1315} = PrettyRep.Rec [("ns", + (case opt1303 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1308 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1308)) - )), ("protectedNS", cvtNAMESPACE x1313), ("privateNS", cvtNAMESPACE x1314), - ("ident", cvtIDENTIFIER x1315), ("name", - (case opt1317 of + | SOME x1302 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1302)) + )), ("protectedNS", cvtNAMESPACE x1307), ("privateNS", cvtNAMESPACE x1308), + ("ident", cvtIDENTIFIER x1309), ("name", + (case opt1311 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1316 => PrettyRep.Ctor ("SOME", SOME (cvtNAME x1316)) - )), ("block", cvtBLOCK x1321)] - and cvtFOR_ENUM_HEAD {isEach=b1335, bindings=(ls1337, ls1342), expr=x1347} = - PrettyRep.Rec [("isEach", PrettyRep.Bool b1335), ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1336 => - cvtBINDING x1336 - ) ls1337), - PrettyRep.List (List.map (fn x1341 => cvtINIT_STEP x1341 - ) ls1342)]), ("expr", cvtEXPRESSION x1347)] - and cvtFOR_ENUM_STATEMENT {isEach=b1355, defn=opt1386, obj=x1390, rib=opt1398, - next=x1402, labels=ls1404, body=x1408} = PrettyRep.Rec [("isEach", - PrettyRep.Bool b1355), ("defn", - (case opt1386 of + | SOME x1310 => PrettyRep.Ctor ("SOME", SOME (cvtNAME x1310)) + )), ("block", cvtBLOCK x1315)] + and cvtFOR_ENUM_HEAD {isEach=b1329, bindings=(ls1331, ls1336), expr=x1341} = + PrettyRep.Rec [("isEach", PrettyRep.Bool b1329), ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1330 => + cvtBINDING x1330 + ) ls1331), + PrettyRep.List (List.map (fn x1335 => cvtINIT_STEP x1335 + ) ls1336)]), ("expr", cvtEXPRESSION x1341)] + and cvtFOR_ENUM_STATEMENT {isEach=b1349, defn=opt1380, obj=x1384, rib=opt1392, + next=x1396, labels=ls1398, body=x1402} = PrettyRep.Rec [("isEach", + PrettyRep.Bool b1349), ("defn", + (case opt1380 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME{kind=x1356, ns=opt1358, static=b1362, prototype=b1363, bindings=(ls1365, - ls1370)} => PrettyRep.Ctor ("SOME", SOME (PrettyRep.Rec [("kind", - cvtVAR_DEFN_TAG x1356), ("ns", - (case opt1358 of + | SOME{kind=x1350, ns=opt1352, static=b1356, prototype=b1357, bindings=(ls1359, + ls1364)} => PrettyRep.Ctor ("SOME", SOME (PrettyRep.Rec [("kind", + cvtVAR_DEFN_TAG x1350), ("ns", + (case opt1352 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1357 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1357)) - )), ("static", PrettyRep.Bool b1362), ("prototype", PrettyRep.Bool b1363), - ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1364 => - cvtBINDING x1364 - ) ls1365), - PrettyRep.List (List.map (fn x1369 => cvtINIT_STEP x1369 - ) ls1370)])])) - )), ("obj", cvtEXPRESSION x1390), ("rib", - (case opt1398 of + | SOME x1351 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1351)) + )), ("static", PrettyRep.Bool b1356), ("prototype", PrettyRep.Bool b1357), + ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1358 => + cvtBINDING x1358 + ) ls1359), + PrettyRep.List (List.map (fn x1363 => cvtINIT_STEP x1363 + ) ls1364)])])) + )), ("obj", cvtEXPRESSION x1384), ("rib", + (case opt1392 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1394 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1391, - x1392) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1391, - cvtFIXTURE x1392] - ) ls1394))) - )), ("next", cvtSTATEMENT x1402), ("labels", PrettyRep.List (List.map (fn x1403 => - cvtIDENTIFIER x1403 - ) ls1404)), - ("body", cvtSTATEMENT x1408)] - and cvtFOR_STATEMENT {rib=opt1431, defn=opt1465, init=ls1470, cond=x1474, - update=x1475, labels=ls1477, body=x1481} = PrettyRep.Rec [("rib", + | SOME ls1388 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1385, + x1386) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1385, + cvtFIXTURE x1386] + ) ls1388))) + )), ("next", cvtSTATEMENT x1396), ("labels", PrettyRep.List (List.map (fn x1397 => + cvtIDENTIFIER x1397 + ) ls1398)), + ("body", cvtSTATEMENT x1402)] + and cvtFOR_STATEMENT {rib=opt1425, defn=opt1459, init=ls1464, cond=x1468, + update=x1469, labels=ls1471, body=x1475} = PrettyRep.Rec [("rib", - (case opt1431 of + (case opt1425 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1427 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1424, - x1425) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1424, - cvtFIXTURE x1425] - ) ls1427))) + | SOME ls1421 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1418, + x1419) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1418, + cvtFIXTURE x1419] + ) ls1421))) )), ("defn", - (case opt1465 of + (case opt1459 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME{kind=x1435, ns=opt1437, static=b1441, prototype=b1442, bindings=(ls1444, - ls1449)} => PrettyRep.Ctor ("SOME", SOME (PrettyRep.Rec [("kind", - cvtVAR_DEFN_TAG x1435), ("ns", - (case opt1437 of + | SOME{kind=x1429, ns=opt1431, static=b1435, prototype=b1436, bindings=(ls1438, + ls1443)} => PrettyRep.Ctor ("SOME", SOME (PrettyRep.Rec [("kind", + cvtVAR_DEFN_TAG x1429), ("ns", + (case opt1431 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1436 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1436)) - )), ("static", PrettyRep.Bool b1441), ("prototype", PrettyRep.Bool b1442), - ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1443 => - cvtBINDING x1443 - ) ls1444), - PrettyRep.List (List.map (fn x1448 => cvtINIT_STEP x1448 - ) ls1449)])])) - )), ("init", PrettyRep.List (List.map (fn x1469 => cvtSTATEMENT x1469 - ) ls1470)), ("cond", cvtEXPRESSION x1474), - ("update", cvtEXPRESSION x1475), ("labels", PrettyRep.List (List.map (fn x1476 => - cvtIDENTIFIER x1476 - ) ls1477)), - ("body", cvtSTATEMENT x1481)] - and cvtWHILE_STATEMENT {cond=x1497, rib=opt1505, body=x1509, labels=ls1511} = - PrettyRep.Rec [("cond", cvtEXPRESSION x1497), ("rib", - (case opt1505 of + | SOME x1430 => PrettyRep.Ctor ("SOME", SOME (cvtNAMESPACE_EXPRESSION x1430)) + )), ("static", PrettyRep.Bool b1435), ("prototype", PrettyRep.Bool b1436), + ("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1437 => + cvtBINDING x1437 + ) ls1438), + PrettyRep.List (List.map (fn x1442 => cvtINIT_STEP x1442 + ) ls1443)])])) + )), ("init", PrettyRep.List (List.map (fn x1463 => cvtSTATEMENT x1463 + ) ls1464)), ("cond", cvtEXPRESSION x1468), + ("update", cvtEXPRESSION x1469), ("labels", PrettyRep.List (List.map (fn x1470 => + cvtIDENTIFIER x1470 + ) ls1471)), + ("body", cvtSTATEMENT x1475)] + and cvtWHILE_STATEMENT {cond=x1491, rib=opt1499, body=x1503, labels=ls1505} = + PrettyRep.Rec [("cond", cvtEXPRESSION x1491), ("rib", + (case opt1499 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1501 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1498, - x1499) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1498, - cvtFIXTURE x1499] - ) ls1501))) - )), ("body", cvtSTATEMENT x1509), ("labels", PrettyRep.List (List.map (fn x1510 => - cvtIDENTIFIER x1510 - ) ls1511))] - and cvtDIRECTIVES {pragmas=ls1525, defns=ls1530, head=opt1535, body=ls1540, - loc=opt1545} = PrettyRep.Rec [("pragmas", PrettyRep.List (List.map (fn x1524 => - cvtPRAGMA x1524 - ) ls1525)), - ("defns", PrettyRep.List (List.map (fn x1529 => cvtDEFN x1529 - ) ls1530)), ("head", - (case opt1535 of + | SOME ls1495 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1492, + x1493) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1492, + cvtFIXTURE x1493] + ) ls1495))) + )), ("body", cvtSTATEMENT x1503), ("labels", PrettyRep.List (List.map (fn x1504 => + cvtIDENTIFIER x1504 + ) ls1505))] + and cvtDIRECTIVES {pragmas=ls1519, defns=ls1524, head=opt1529, body=ls1534, + loc=opt1539} = PrettyRep.Rec [("pragmas", PrettyRep.List (List.map (fn x1518 => + cvtPRAGMA x1518 + ) ls1519)), + ("defns", PrettyRep.List (List.map (fn x1523 => cvtDEFN x1523 + ) ls1524)), ("head", + (case opt1529 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1534 => PrettyRep.Ctor ("SOME", SOME (cvtHEAD x1534)) - )), ("body", PrettyRep.List (List.map (fn x1539 => cvtSTATEMENT x1539 - ) ls1540)), ("loc", - (case opt1545 of + | SOME x1528 => PrettyRep.Ctor ("SOME", SOME (cvtHEAD x1528)) + )), ("body", PrettyRep.List (List.map (fn x1533 => cvtSTATEMENT x1533 + ) ls1534)), ("loc", + (case opt1539 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1544 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x1544)) + | SOME x1538 => PrettyRep.Ctor ("SOME", SOME (cvtLOC x1538)) ))] - and cvtCASE {label=opt1561, inits=opt1572, body=x1576} = PrettyRep.Rec [("label", + and cvtCASE {label=opt1555, inits=opt1566, body=x1570} = PrettyRep.Rec [("label", - (case opt1561 of + (case opt1555 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1560 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x1560)) + | SOME x1554 => PrettyRep.Ctor ("SOME", SOME (cvtEXPRESSION x1554)) )), ("inits", - (case opt1572 of + (case opt1566 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1568 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1565, - x1566) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1565, - cvtEXPRESSION x1566] - ) ls1568))) - )), ("body", cvtBLOCK x1576)] - and cvtCATCH_CLAUSE {bindings=(ls1585, ls1590), ty=x1595, rib=opt1603, inits=opt1614, - block=x1618} = PrettyRep.Rec [("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1584 => - cvtBINDING x1584 - ) ls1585), - PrettyRep.List (List.map (fn x1589 => cvtINIT_STEP x1589 - ) ls1590)]), ("ty", cvtTYPE x1595), ("rib", + | SOME ls1562 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1559, + x1560) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1559, + cvtEXPRESSION x1560] + ) ls1562))) + )), ("body", cvtBLOCK x1570)] + and cvtCATCH_CLAUSE {bindings=(ls1579, ls1584), ty=x1589, rib=opt1597, inits=opt1608, + block=x1612} = PrettyRep.Rec [("bindings", PrettyRep.Tuple [PrettyRep.List (List.map (fn x1578 => + cvtBINDING x1578 + ) ls1579), + PrettyRep.List (List.map (fn x1583 => cvtINIT_STEP x1583 + ) ls1584)]), ("ty", cvtTYPE x1589), ("rib", - (case opt1603 of + (case opt1597 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1599 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1596, - x1597) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1596, - cvtFIXTURE x1597] - ) ls1599))) + | SOME ls1593 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1590, + x1591) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1590, + cvtFIXTURE x1591] + ) ls1593))) )), ("inits", - (case opt1614 of + (case opt1608 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME ls1610 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1607, - x1608) => - PrettyRep.Tuple [cvtFIXTURE_NAME x1607, - cvtEXPRESSION x1608] - ) ls1610))) - )), ("block", cvtBLOCK x1618)] - and cvtFUNC_NAME {kind=x1630, ident=x1631} = PrettyRep.Rec [("kind", cvtFUNC_NAME_KIND x1630), - ("ident", cvtIDENTIFIER x1631)] - and cvtVIRTUAL_VAL_FIXTURE {ty=x1637, getter=opt1639, setter=opt1644} = - PrettyRep.Rec [("ty", cvtTYPE x1637), ("getter", - (case opt1639 of + | SOME ls1604 => PrettyRep.Ctor ("SOME", SOME (PrettyRep.List (List.map (fn (x1601, + x1602) => + PrettyRep.Tuple [cvtFIXTURE_NAME x1601, + cvtEXPRESSION x1602] + ) ls1604))) + )), ("block", cvtBLOCK x1612)] + and cvtFUNC_NAME {kind=x1624, ident=x1625} = PrettyRep.Rec [("kind", cvtFUNC_NAME_KIND x1624), + ("ident", cvtIDENTIFIER x1625)] + and cvtVIRTUAL_VAL_FIXTURE {ty=x1631, getter=opt1633, setter=opt1638} = + PrettyRep.Rec [("ty", cvtTYPE x1631), ("getter", + (case opt1633 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1638 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x1638)) + | SOME x1632 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x1632)) )), ("setter", - (case opt1644 of + (case opt1638 of NONE => PrettyRep.Ctor ("NONE", NONE) - | SOME x1643 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x1643)) + | SOME x1637 => PrettyRep.Ctor ("SOME", SOME (cvtFUNC x1637)) ))] - and cvtFRAGMENT (Anon x1655) = PrettyRep.Ctor ("Anon", SOME (cvtBLOCK x1655)) + and cvtFRAGMENT (Anon x1649) = PrettyRep.Ctor ("Anon", SOME (cvtBLOCK x1649)) end diff --git a/spec/grammar.pdf b/spec/grammar.pdf index f6721fcb42ca6c4c213efbe2ce600d77231c86c5..7c5e9f265a96cde9209e9abd3ba4b898d037674e GIT binary patch literal 144304 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 z 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 K{qKJ>{{I7oosvQT diff --git a/spec/language/names.html b/spec/language/names.html --- a/spec/language/names.html +++ b/spec/language/names.html @@ -1,14 +1,14 @@ = Names =
 FILE:                       spec/language/names.html
-DRAFT STATUS:               DRAFT 5 - UNREVIEWED - 2008-05-02
+DRAFT STATUS:               DRAFT 6 - UNREVIEWED - 2008-05-08
 AUTHORS:                    Jeff, Graydon
 REVIEWED AGAINST ES3:       NO
 REVIEWED AGAINST ERRATA:    NO
 REVIEWED AGAINST BASE DOC:  NO
 REVIEWED AGAINST PROPOSALS: NO
 REVIEWED AGAINST CODE:      YES, code is basis of RI
 SCOPE:                      The structure and resolution of names
 
@@ -34,203 +34,78 @@ other words if you can name a property, organize and manage groups of identifiers. In this sense, a namespace is a kind of name //parameter// that can be used to control the meaning of a name.

Namespaces may be transparent or opaque. Transparent namespaces are represented by strings and their equality is defined by the equality of the underlying strings. Opaque namespaces do not have an underlying string value. In the implementation code, each opaque namespace is given a unique, system-assigned identifier. - +===== Semantics =====

Any two transparent namespaces with the same identifier string are considered equal. An opaque namespace is specified to be equal only to itself. This is also true in the SML implementation as no two opaque namespaces are ever given the same system-assigned identifier. - +===== Semantics ===== -=== The Public and 4th Edition Namespaces === +=== The Public Namespace === -

Two important namespaces serve as roots for binding further names in this spec: the public -namespace and the 4th edition namespace. +

The public namespace is defined as the trasparent namespace containing only the empty string. +It is only member of the initial open namespace set, and is the initial default binding namespace +for new unqualified bindings. -

The public namespace is defined as the transparent namespace containing only the empty string. It -is a member of the initial open namespace set when running in either 3rd edition or 4th edition -mode, and is the initial default binding namespace for new unqualified bindings. +

Namespace attributes are not allowed on local definitions. The names of local definitions are +always qualified by the public namespace. -

Therefore in practice, code written for the 3rd edition or earlier -- by definition, ignorant of -any means for namespace qualification -- sees and creates only bindings qualified by the public -namespace. +

Code written for the 3rd edition or earlier -- by definition, ignorant of any means for namespace +qualification -- sees and creates only bindings qualified by the public namespace. +===== Semantics ===== + + + -Namespace attributes are not allowed on local definitions. The names of local definitions are -always qualified by the public namespace. +== Prototype Chains == - - - +

A prototype chain contains a list of objects that are searched when resolving a name on the +first object in the list. +== Scope Chains and Scope Objects == -== Name Expressions == +

A scope chain contains a list of scope objects that are searched when resolving a lexical +reference. -

A name expression describes a name that is computed from either a namespace //qualified name// or -an //unqualified name//. +

A scope chain may include a class object (with class ''static'' properties), an instance +object and one or more local scope objects in addition to the global, activation and with objects of +edition 3. - - +=== Scope Objects === -

Name expressions occur in several contexts, to qualify declarations, identify types, and also in -three special expression forms called //reference expressions//, defined in a section that follows. - -=== Qualified Name === - -

A //qualified name// expression consists of a namespace expression and an identifier. A name -value is constructed at runtime using the values of these components. - -=== Unqualified Name === - -

An //unqualified name// expression consists of an single identifier and some contextual -information -- an open namespaces list and a global name set -- that describes the name's static -environment. A name value is constructed at runtime by using the contextual information to search -for a property name that has an identifier that matches that string value and a namespace drawn from -the open namespaces. The algorithm for resolving an unqualified name to a name is presented in -sections that follow. - -==== Open Namespaces List ==== - -

An //open namespaces list// is a list of sets of namespace values. Each execution context -extends this list of sets with a new set of namespace values representing namespaces that are opened -in that execution context. We represent the innermost set in the SML implementation using a -''NAMESPACE list'', but refer to it throughout the accompanying description as a "set" to emphasize -its unordered meaning. - - - - - -

The ordering of the outer list is used to to prioritize the search for a matching name. The inner -set is effectively unordered; all namespaces opened in the same execution context are given the same -priority, and all operations on it are order-independent set operations. - -

An open namespaces list is captured in every unqualified name expression. - -==== Global Name Set ==== - -

The //global name set// is a set of all the names of declared top-level (global) fixtures that -occur or have occurred in all compilations units before and including the current compilation unit. - -

A global name set is captured in every unqualified name expression. - -=== Namespace Expressions === - -

A //namespace expression// consists of either a namespace value or a name expression that must -itself resolve to a namespace value. - - - - -== Name Bindings == - -=== Forms that introduce names === - -

//Names// are //bound// in //scopes// by //defining forms// and -//binding forms//. - - -==== Defined and bound names ==== - -

The defining forms are //VariableDefinition//, -//FunctionDefinition//, //ClassDefinition//, //InterfaceDefinition//, -//TypeDefinition//, and //NamespaceDefinition//. Except in block -scopes (see below) a defining form permits the name to be qualified by -a namespace. The current default namespace is used if no qualifier is -present. - -

(The initial default namespace in any block scope is ''public'', and it is -not legal to set a different default namespace in a block scope. -Therefore all names bound in block scopes are in the ''public'' -namespace.) - -

The binding forms are //FunctionExpression//, //LetExpression//, -//CatchClause//, //TypeCaseElement//, //LetStatement//, -//LetBlockStatement//, //ForStatement//, and //ArrayComprehension//. -The binding forms do not permit names to be qualified by namespaces; -all names bound by these forms are in the ''public'' namespace. - -

Names that are introduced by defining forms and binding forms are -//fixtures//: they are guaranteed always to be present at run-time. - - -==== Created and introduced names ==== - -

Names can be //created// dynamically (at run-time) in the global -scope by means of assignment and by the pre-defined global ''eval'' -function. Names can also be created dynamically in the global scope -and in any function scope by the ''eval'' operator evaluating a -program text that contains a top-level ''var'' or ''function'' -definition, - -

Names can be created dynamically in class static and class -instance scopes by creating a new property on the class object or the -instance object. (Dynamic name creation is only possible on instances -of classes that are declared ''dynamic''.) - -

Dynamic creation of names is not possible in strict code. -Top-level created names can have non-''public'' namespace -qualifiers. - -

Names that are created dynamically can be removed by means of the -''delete'' operator. - -

Names are also //introduced// in scopes by the //WithStatement//. -(The //WithStatement// is disallowed in strict code.) - -

Names that created dynamically are never fixtures. Names that are -introduced by a //WithStatement// are as a rule not fixtures. Created -and introduced names can as a rule appear and disappear at -unpredictable times during program evaluation. - - -==== Visibility ==== - - More here. - -

Bound, created, and introduced names are visible in the entire -scope of the binding. However, the scope of a binding is "static" (it -is determined by the source text) and bindings in inner scopes can -//shadow// bindings in outer scopes. - -

"use namespace" controls the shadowing, to an extent. - -

A shadowed identifier in a base class may sometimes be made -visible in a subclass by means of a //SuperExpression//. - - -=== Scopes === - -

The following are the kinds of scopes and the forms that introduce +

The following are the kinds of scope objects and the forms that introduce names in those scopes:

  • The //global scope// is shared between multiple //Programs//. It contains pre-defined bindings (the language-defined libraries and any host-defined extensions) and is extended when definitions have an effect on it. A possibly unbounded sequence of //Programs// is evaluted in the global scope in a linear order. A definition @@ -299,17 +174,16 @@ names in those scopes: curly brace of the initializer block through the closing right curly brace.

    The forms that introduce names into a function scope are the function form itself -- the parameter names are bound in the function scope -- as well as instances of //VariableDefinition// and //FunctionDefinition// that occur in the body. -

  • The //block scope// is introduced by the left curly brace of certain source phrases (//Block//, //SwitchStatement//, //CatchClause//, //TypeCaseElement//, and //LetBlockStatement//) and extends to the matching right curly brace.

    A block scope is also introduced by a binding //ForStatement// and extends through the end of that statement's //SubStatement//. @@ -375,65 +249,206 @@ order to preserve compatibility with the also bound as parameters. Again, annotations must be the same in all bindings of a particular name.

  • Multiple ''var'' and ''function'' forms may bind the same name, provided the bindings are all unannotated.
-=== Scope Chain === +=== Visibility === -

A scope chain contains a list of objects that are searched when resolving an identifier. The -exact specification of how scope chains are constructed is described in //section ..: -Execution//. For the purpose of specifying how names are resolved, it is sufficient to know that a -scope chain yields a sequence of objects to be searched. + More here. -A scope chain may include a class object (with class ''static'' properties), an instance -object and one or more local scope objects in addition to the global, activation and with objects of -edition 3. +

Bound, created, and introduced names are visible in the entire +scope of the binding. However, the scope of a binding is "static" (it +is determined by the source text) and bindings in inner scopes can +//shadow// bindings in outer scopes. + +

"use namespace" controls the shadowing, to an extent. + +

A shadowed identifier in a base class may sometimes be made +visible in a subclass by means of a //SuperExpression//. + + + +== Name Expressions == + +

A name expression describes a name that is computed from either a namespace //qualified name// or +an //unqualified name//. + +===== Semantics ===== + + +

Name expressions occur in several contexts, to qualify declarations, identify types, and also in +three special expression forms called //reference expressions//, defined in a section that follows. + +=== Qualified Name === + +

A //qualified name// expression consists of a namespace expression and an identifier. A name +value is constructed at runtime using the values of these components. + +Every qualfied name expression terminates with a ''NAMESPACE_EXPRESSION'' that is either a literal +namespace (''Namespace'') value or an unqualfied name (''UnqualifiedName''). + +==== Namespace Expressions ==== + +

A //namespace expression// consists of either a namespace value or a name expression that must +itself resolve to a namespace value. + +===== Semantics ===== + + +=== Unqualified Name === + +

An //unqualified name// expression consists of an single identifier and some contextual +information -- an open namespaces list and a global name set -- that describes the name's static +environment. A name value is constructed at runtime by using the contextual information to search +for a property name that has an identifier that matches that string value and a namespace drawn from +the open namespaces. The algorithm for resolving an unqualified name to a name is presented in +sections that follow. + +==== Open Namespaces List ==== + +

An //open namespaces list// is a list of sets of namespace values. Each execution context +extends this list of sets with a new set of namespace values representing namespaces that are opened +in that execution context. We represent the innermost set in the SML implementation using a +''NAMESPACE list'', but refer to it throughout the accompanying description as a "set" to emphasize +its unordered meaning. + +

Each namespace set contains the namespaces opened in the same scope which are given the same +priority during disambiguation. The lowest priority set consists of only the public namespace. + +===== Semantics ===== + + + +

The ordering of the outer list is used to to prioritize the search for a matching name. The inner +set is effectively unordered; all namespaces opened in the same execution context are given the same +priority, and all operations on it are order-independent set operations. + +

An open namespaces list is captured in every unqualified name expression. == Reference Expressions ==

A //reference expression// is one of three forms of expression that simulatneously describe a name //and an object//. Reference expressions are used to locate property bindings. - +===== Semantics ===== {{{ - | LexicalReference of { name: NAME_EXPRESSION } +datatype EXPRESSION = + LexicalReference of { name: NAME_EXPRESSION } | ObjectNameReference of { object: EXPRESSION, name: NAME_EXPRESSION } | ObjectIndexReference of { object: EXPRESSION, index: EXPRESSION } + }}}

Of these three forms, ''LexicalReference'' expressions evaluate their name expression using the scope chain, described in the following section, whereas ''ObjectNameReference'' and ''ObjectIndexReference'' expressions evaluate their name expressions using their ''object'' operand. -The third form, ''ObjectIndexReference'', is a degenerate form of ''ObjectNameReference''. It -is evaluated by evaluating its ''index'' operand to a string value, and then behaving as if it were -an ''ObjectNameReference'' on a qualified name expression formed from the evaluated string and -qualified by the public namespace. +The third form, ''ObjectIndexReference'', is evaluated by evaluating its ''index'' operand +to a string value, and then behaving as if it were an ''ObjectNameReference'' on a qualified name +expression formed from the evaluated string and qualified by the public namespace. -=== Reference Expression Resolution === +== Name Resolution == -

Reference expressions are resolved to an object and a property name using the following algorithms. +

Name resolution normalizes the various combinations of reference expressions and name expressions +to an object and a name. There are four possible combinations. -Reference expressions in which the target object is provided (''ObjectNameReference'' and -''ObjectIndexReference'') are degenerate cases of a search over a //list// of objects, where the -list has only a single object. Reference expressions to lexical bindings (''LexicalReference'') -imply that the list of objects searched is the list of scope objects that constitute the scope -chain. Likewise, reference expressions using a qualified name expression (''QualifiedName'') are -degenerate forms of reference expressions to unqualified names (''UnqualifiedName'') where the open -namespaces list is contains a single set, itself containing the single namespace of the -''QualifiedName'', and the global name list is the empty list. The algorithms here are used to -specify the meaning of both kinds of reference expression and name expression. +=== Lexical References === -==== Name Resolution ==== +

Here we describe how a target object and a name are computed from a lexical reference. + +

For each scope object in the scope chain, search for a matching name in that object. If a match +is found, return the scope object and the matching name. + +

Scope objects contain fixed and dynamic bindings. Fixed names in outer scopes may shadow +dynamic names in inner scopes. For example, a fixed class static name might shadow a dynamic +instance name. This is necessary to allow early resolution of names. + +

If a static name (in a namespace or type expression) resolves to a global name, we reserve +the set of names that consist of the open namespaces with priority equal or higher than the +matched name and the matched names identifier. + +=== Object References === + +

Here we describe how a name is computed from an object reference. + +

Evaluate the ''object'' expression and search the resutling object value for the name specified +by the name expression called ''name''. + +=== Common Algorithms === + + +==== Name Resolution ====

Given an object list, an identifier, a list of open namespace sets and a global name set, this algorithm searches for an object in the list and a property name on the object that matches identifier and namespaces.

**Informal description** Initially, consider all currently open namespaces at once -- the union of all open namespaces -- regardless of the nesting structure of the open namespaces. Perform object list search either once or twice with the flattened namespace set, as follows. @@ -460,61 +475,64 @@ identifier and that namespace.

If multiple namespaces still match, select a further subset using class based namespace selection, considering the classes inherited by the object.

If multiple namespaces still match, select a further subset using global name set based namespace selection, considering the global name set intially provided. This is the final attempt: exactly one namespace must match. If any other number of namespaces match, signal an error. - +===== Semantics ===== + ==== Object list search ====

Given an object list, a set of namespaces and an identifier, this algorithm searches for a nonempty matching namespace set in the objects of the list.

**Informal description**: perform object search on the object in the head of the list. If the set of matching namespaces returned by object search is not empty, return the object and the nonempty matching namespace set. Otherwise repeat the process with the tail of the list, and its tail, and so forth along the list. If all objects in the list are searched and no matching namespaces are found, return no value. - +===== Semantics ===== + ==== Object Search ====

Given an object, a set of namespaces and an identifier, this algorithm searches for a matching property name.

**Informal description**: search the provided object for property name bindings that are named by the provided identifier and any of the namespaces in the provided set. Collect the set of matching namespaces used in all such bindings. If the set of matching namespaces is nonempty, return it. Otherwise repeat the process on the prototype of the object, and its prototype, and so forth along the prototype chain. If the end of the prototype chain is reached without producing a matching name, return no value. - +===== Semantics ===== + ==== Open Namespace Based Namespace Selection ====

Given a list of sets of open namespaces (ordered from most recently opened to least recently opened) and a set of matching namespaces, this algorithm returns a subset of the matching set that occurs entirely within a single open namespace set.

**Informal description**: intersect the head of the provided open namespace list with the provided set of namespaces. If that intersection is nonempty, return it. Otherwise repeat the process with the tail of the open namespace list, and its tail, and so forth up through the list of open namespace sets. If the end of the list of open namespace sets is reached without producing a nonempty intersection, return an empty set. - +===== Semantics ===== ==== Class Based Namespace Selection ====

Given a list of classes, an identifier and a set of namespaces, this algorithm selects the namespaces used on the most generic class of that list. This step is necessary to avoid object integrity issues that arise when a derived class introduces a binding with the same identifier and a different namespace in the open namespaces. @@ -522,31 +540,31 @@ different namespace in the open namespac

**Informal description**: given the list of classes inherited by an object, ordered from most generic to most derived, consider the class that is the head of this list. Search this class for any instance fixture name bindings that are named by the provided identifier and any of the namespaces in the provided set. Collect the set of matching namespaces used in all such bindings. If the set of matching namespaces is nonempty, return it. Otherwise repeat the process on the tail of the list, and its tail, and so forth down the list. If all the classes in the list are searched and no matching namespaces are found, return the empty set. - +===== Semantics ===== ==== Global Name Based Namespace Selection ====

Given a set of global names, an identifier and a set of namespaces, this algorithm selects any namespace in the namespace set for which a name formed from the namespace and the identifier is present in the global name set. - +===== Semantics =====

**Helper functions** - +===== Semantics ===== {{{ fun head x = hd x (* return the first element of a list *) fun tail x = tl x (* return all but the first element of a list *) fun matchNamespaces (ns1: NAMESPACE list, ns2: NAMESPACE list) : NAMESPACE list = (* compute the intersection of two NAMESPACE lists *) diff --git a/spec/language/values.html b/spec/language/values.html --- a/spec/language/values.html +++ b/spec/language/values.html @@ -147,86 +147,86 @@ must be comparable with one another for associated with the object.

The ''ObjectTag'' and ''ArrayTag'' tags are present on objects of structural types ''ObjectType'' and ''ArrayType'', respectively. -

The ''MagicTag'' tag is present on objects that are instances of a small number of classes, +

The ''PrimitiveTag'' tag is present on objects that are instances of a small number of classes, described in the following section.

The ''InstanceTag'' tag is present on any object that is an instance of an ES4 class but does -//not// have an ''ObjectTag'', ''ArrayTag'' or ''MagicTag''. +//not// have an ''ObjectTag'', ''ArrayTag'' or ''PrimitiveTag''.

The ''NoTag'' tag is present only on un-named objects that implement scopes. -==== Magic Tag ==== +==== Primitive Tag ====

Some objects have additional a semantic value associated with them. Such objects are called -//magic objects// and have a //magic tag//. The semantic value is held in the tag, and is only +//primitive objects// and have a //primitive tag//. The semantic value is held in the tag, and is only directly accessible in semantic code. -

ES4 code can determine if an object is magic through a correspondence between magic tags and a +

ES4 code can determine if an object is primitive through a correspondence between primitive tags and a set of 10 specific ES4 instance types. The correspondence is a bijection: any instance of these -types has the corresponding magic tag, and any object with a magic tag is an instance of the +types has the corresponding primitive tag, and any object with a primitive tag is an instance of the corresponding type. -

The allocated type of a magic object may be more specific than the corresponding instance +

The allocated type of a primitive object may be more specific than the corresponding instance type. In particular, function objects may have more specific subtypes of the ES4 class **public::Function**. In such cases, the allocated type of the object is present in the semantic -value held by the magic tag. +value held by the primitive tag. -

The correspondence between magic tags and classes is the following: +

The correspondence between primitive tags and classes is the following:

    -
  • The magic tag ''Boolean'' corresponds to the ES4 class **__ES4__::boolean**. -
  • The magic tag ''Double'' corresponds to the ES4 class **__ES4__::double**. -
  • The magic tag ''Decimal'' corresponds to the ES4 class **__ES4__::decimal**. -
  • The magic tag ''String'' corresponds to the ES4 class **__ES4__::string**. -
  • The magic tag ''Namespace'' corresponds to the ES4 class **__ES4__::Namespace**. -
  • The magic tag ''Class'' corresponds to the ES4 class **__ES4__::Class**. -
  • The magic tag ''Interface'' corresponds to the ES4 class **__ES4__::Interface**. -
  • The magic tag ''Function'' corresponds to the ES4 class **public::Function**. -
  • The magic tag ''Type'' corresponds to the ES4 class **__ES4__::Type**. -
  • The magic tag ''Generator'' corresponds to the ES4 class **helper::GeneratorImpl**. +
  • The primitive tag ''Boolean'' corresponds to the ES4 class **__ES4__::boolean**. +
  • The primitive tag ''Double'' corresponds to the ES4 class **__ES4__::double**. +
  • The primitive tag ''Decimal'' corresponds to the ES4 class **__ES4__::decimal**. +
  • The primitive tag ''String'' corresponds to the ES4 class **__ES4__::string**. +
  • The primitive tag ''Namespace'' corresponds to the ES4 class **__ES4__::Namespace**. +
  • The primitive tag ''Class'' corresponds to the ES4 class **__ES4__::Class**. +
  • The primitive tag ''Interface'' corresponds to the ES4 class **__ES4__::Interface**. +
  • The primitive tag ''Function'' corresponds to the ES4 class **public::Function**. +
  • The primitive tag ''Type'' corresponds to the ES4 class **__ES4__::Type**. +
  • The primitive tag ''Generator'' corresponds to the ES4 class **helper::GeneratorImpl**.
- + == Semantic Values == -

Many aspects of the language depend on the semantic values associated with magic objects. The +

Many aspects of the language depend on the semantic values associated with primitive objects. The following sections describe the semantic values, and highlights various details of the correspondences that exist between particular semantic values and the ES4 values they are present on. === Special Constructors === -

While much of the behavior of magic objects is defined //inside// the ES4 language (in the -section ...library), the means of //constructing// magic objects and associating semantic values +

While much of the behavior of primitive objects is defined //inside// the ES4 language (in the +section ...library), the means of //constructing// primitive objects and associating semantic values with them is (at least partially) defined //outside// the ES4 language, in semantic code. -

Therefore the construction of any magic object is described by a //special constructor// defined +

Therefore the construction of any primitive object is described by a //special constructor// defined in semantic code, rather than a //standard constructor// defined in ES4. The behavior of each special constructor is described in the following sections. === Boolean Values ===

A boolean value is either of two semantic values called ''true'' and ''false''. These correspond to the ES4 boolean literal values **true** and **false**, which denote the two sole instances of the ES4 class **__ES4__::boolean**.

No instances of the ES4 class **__ES4__::boolean** can be constructed aside from the two values **true** and **false**: the **__ES4__::boolean** constructor is a special constructor that always evaluates to one of the two boolean values.

A "wrapper class" called **public::Boolean** exists. Instances of **public::Boolean** contain a -single **__ES4__::boolean** magic object, and delegate most of their functionality to this inner +single **__ES4__::boolean** primitive object, and delegate most of their functionality to this inner "wrapped" value.

The value of **public::Boolean.prototype** is identical to **__ES4__::boolean.prototype**. This value is refered to without distinction as //the boolean prototype//, since it is shared between both classes. === Double Values === @@ -290,17 +290,17 @@ they are very awkward-reading, and would

The equality of **__ES4__::string** objects -- in both the **==** and **===** sense -- is defined as the equality of the underlying string values. This in turn is established by the identities of the string elements, considered pairwise and in sequence. Inequalities and relational operations of strings are similarly defined in terms of sequence comparisons on string elements. No other forms of textual equality or collation are defined.

A "wrapper class" called **public::String** exists. Instances of **public::String** contain a -single **__ES4__::string** magic object, and delegate most of their functionality to this inner +single **__ES4__::string** primitive object, and delegate most of their functionality to this inner "wrapped" value.

The value of **public::String.prototype** is identical to **__ES4__::string.prototype**. This value is refered to without distinction as //the string prototype//, since it is shared between both classes. === Namespace Values === diff --git a/unicode/casemapping.as b/unicode/casemapping.as --- a/unicode/casemapping.as +++ b/unicode/casemapping.as @@ -105,17 +105,17 @@ package if (item[2] == "Ll" || item[2] == "Lt") toupper[cc] = fixup(spcl[3]); if (item[2] == "Lu" || item[2] == "Lt") tolower[cc] = fixup(spcl[1]); } print("/* Generated by ../unicode/casemapping.as */"); - print(" use namespace ECMAScript4_Internal;"); + print(" use namespace helper;"); print(" use default namespace Unicode;"); print(" var upperTbl = [];"); print(" var lowerTbl = [];"); print(" function initUpperTbl() {"); print(" let u : [] = upperTbl;"); print(" if (u.length > 0) return;"); for ( i=0 ; i < toupper.length ; i++ ) { diff --git a/ustring.sml b/ustring.sml --- a/ustring.sml +++ b/ustring.sml @@ -382,19 +382,19 @@ val charCodeAt_ = fromStrin val fnLength_ = fromString "fnLength" val genSend_ = fromString "genSend" val genThrow_ = fromString "genThrow" val genClose_ = fromString "genClose" val apply_ = fromString "apply" val toPrimitive_ = fromString "toPrimitive" val isPrimitive_ = fromString "isPrimitive" val defaultValue_ = fromString "defaultValue" -val setPropertyIsDontEnum_ = fromString "setPropertyIsDontEnum" -val getPropertyIsDontDelete_ = fromString "getPropertyIsDontDelete" -val getPropertyIsDontEnum_ = fromString "getPropertyIsDontEnum" +val setPropertyIsEnumerable_ = fromString "setPropertyIsEnumerable" +val getPropertyIsRemovable_ = fromString "getPropertyIsRemovable" +val getPropertyIsEnumerable_ = fromString "getPropertyIsEnumerable" val hasOwnProperty_ = fromString "hasOwnProperty" val getPrototype_ = fromString "getPrototype" val getClassName_ = fromString "getClassName" val getClassOfObject_ = fromString "getClassOfObject" val getSuperClass_ = fromString "getSuperClass" val getImplementedInterface_ = fromString "getImplementedInterface" val getSuperInterface_ = fromString "getSuperInterface" val getEnumerableIds_ = fromString "getEnumerableIds" diff --git a/verify.sml b/verify.sml --- a/verify.sml +++ b/verify.sml @@ -960,17 +960,17 @@ and verifyFixture (env:ENV) verifyFunc instanceEnv func; () end end (* FIXME: verify interfaces *) | Ast.TypeFixture (typeParams,ty) => (verifyType env ty; ()) (* FIXME: extend env with typeParams *) - | Ast.ValFixture { ty, readOnly } => (verifyType env ty; ()) + | Ast.ValFixture { ty, writable } => (verifyType env ty; ()) | Ast.MethodFixture { func, ty, ... } => let in verifyFunc env func; verifyType env ty; () end