Search in sources :

Example 71 with OrdinaryObject

use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.

the class Realm method initializeStandardObjects.

/**
     * <h1>19.3, 19.4, 19.5, 20, 21, 22.1, 24.3</h1>
     * 
     * Standard built-in objects
     * 
     * @param realm
     *            the realm instance
     */
private static void initializeStandardObjects(Realm realm) {
    EnumMap<Intrinsics, OrdinaryObject> intrinsics = realm.intrinsics;
    // allocation phase
    ArrayConstructor arrayConstructor = new ArrayConstructor(realm);
    ArrayPrototype arrayPrototype = new ArrayPrototype(realm);
    ArrayIteratorPrototype arrayIteratorPrototype = new ArrayIteratorPrototype(realm);
    StringConstructor stringConstructor = new StringConstructor(realm);
    StringPrototype stringPrototype = new StringPrototype(realm);
    StringIteratorPrototype stringIteratorPrototype = new StringIteratorPrototype(realm);
    SymbolConstructor symbolConstructor = new SymbolConstructor(realm);
    SymbolPrototype symbolPrototype = new SymbolPrototype(realm);
    BooleanConstructor booleanConstructor = new BooleanConstructor(realm);
    BooleanPrototype booleanPrototype = new BooleanPrototype(realm);
    NumberConstructor numberConstructor = new NumberConstructor(realm);
    NumberPrototype numberPrototype = new NumberPrototype(realm);
    MathObject mathObject = new MathObject(realm);
    DateConstructor dateConstructor = new DateConstructor(realm);
    DatePrototype datePrototype = new DatePrototype(realm);
    RegExpConstructor regExpConstructor = new RegExpConstructor(realm);
    RegExpPrototype regExpPrototype = new RegExpPrototype(realm);
    ErrorConstructor errorConstructor = new ErrorConstructor(realm);
    ErrorPrototype errorPrototype = new ErrorPrototype(realm);
    JSONObject jsonObject = new JSONObject(realm);
    IteratorPrototype iteratorPrototype = new IteratorPrototype(realm);
    // registration phase
    intrinsics.put(Intrinsics.Array, arrayConstructor);
    intrinsics.put(Intrinsics.ArrayPrototype, arrayPrototype);
    intrinsics.put(Intrinsics.ArrayIteratorPrototype, arrayIteratorPrototype);
    intrinsics.put(Intrinsics.String, stringConstructor);
    intrinsics.put(Intrinsics.StringPrototype, stringPrototype);
    intrinsics.put(Intrinsics.StringIteratorPrototype, stringIteratorPrototype);
    intrinsics.put(Intrinsics.Symbol, symbolConstructor);
    intrinsics.put(Intrinsics.SymbolPrototype, symbolPrototype);
    intrinsics.put(Intrinsics.Boolean, booleanConstructor);
    intrinsics.put(Intrinsics.BooleanPrototype, booleanPrototype);
    intrinsics.put(Intrinsics.Number, numberConstructor);
    intrinsics.put(Intrinsics.NumberPrototype, numberPrototype);
    intrinsics.put(Intrinsics.Math, mathObject);
    intrinsics.put(Intrinsics.Date, dateConstructor);
    intrinsics.put(Intrinsics.DatePrototype, datePrototype);
    intrinsics.put(Intrinsics.RegExp, regExpConstructor);
    intrinsics.put(Intrinsics.RegExpPrototype, regExpPrototype);
    intrinsics.put(Intrinsics.Error, errorConstructor);
    intrinsics.put(Intrinsics.ErrorPrototype, errorPrototype);
    intrinsics.put(Intrinsics.JSON, jsonObject);
    intrinsics.put(Intrinsics.IteratorPrototype, iteratorPrototype);
    // initialization phase
    arrayConstructor.initialize(realm);
    arrayPrototype.initialize(realm);
    arrayIteratorPrototype.initialize(realm);
    stringConstructor.initialize(realm);
    stringPrototype.initialize(realm);
    stringIteratorPrototype.initialize(realm);
    symbolConstructor.initialize(realm);
    symbolPrototype.initialize(realm);
    booleanConstructor.initialize(realm);
    booleanPrototype.initialize(realm);
    numberConstructor.initialize(realm);
    numberPrototype.initialize(realm);
    mathObject.initialize(realm);
    dateConstructor.initialize(realm);
    datePrototype.initialize(realm);
    regExpConstructor.initialize(realm);
    regExpPrototype.initialize(realm);
    errorConstructor.initialize(realm);
    errorPrototype.initialize(realm);
    jsonObject.initialize(realm);
    iteratorPrototype.initialize(realm);
    // Array.prototype.values is also an intrinsic
    Object arrayPrototypeValues = arrayPrototype.lookupOwnProperty("values").getValue();
    intrinsics.put(Intrinsics.ArrayProto_values, (OrdinaryObject) arrayPrototypeValues);
    if (realm.isEnabled(CompatibilityOption.StringMatchAll)) {
        RegExpStringIteratorPrototype regExpStringIteratorPrototype = new RegExpStringIteratorPrototype(realm);
        intrinsics.put(Intrinsics.RegExpStringIteratorPrototype, regExpStringIteratorPrototype);
        regExpStringIteratorPrototype.initialize(realm);
    }
}
Also used : NumberPrototype(com.github.anba.es6draft.runtime.objects.number.NumberPrototype) TypedArrayPrototype(com.github.anba.es6draft.runtime.objects.binary.TypedArrayPrototype) DatePrototype(com.github.anba.es6draft.runtime.objects.date.DatePrototype) DateConstructor(com.github.anba.es6draft.runtime.objects.date.DateConstructor) StringConstructor(com.github.anba.es6draft.runtime.objects.text.StringConstructor) RegExpConstructor(com.github.anba.es6draft.runtime.objects.text.RegExpConstructor) StringIteratorPrototype(com.github.anba.es6draft.runtime.objects.text.StringIteratorPrototype) AsyncIteratorPrototype(com.github.anba.es6draft.runtime.objects.async.iteration.AsyncIteratorPrototype) RegExpStringIteratorPrototype(com.github.anba.es6draft.runtime.objects.text.RegExpStringIteratorPrototype) IteratorPrototype(com.github.anba.es6draft.runtime.objects.iteration.IteratorPrototype) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject) StringIteratorPrototype(com.github.anba.es6draft.runtime.objects.text.StringIteratorPrototype) RegExpStringIteratorPrototype(com.github.anba.es6draft.runtime.objects.text.RegExpStringIteratorPrototype) NumberConstructor(com.github.anba.es6draft.runtime.objects.number.NumberConstructor) TypedArrayConstructor(com.github.anba.es6draft.runtime.objects.binary.TypedArrayConstructor) StringPrototype(com.github.anba.es6draft.runtime.objects.text.StringPrototype) RegExpPrototype(com.github.anba.es6draft.runtime.objects.text.RegExpPrototype) Intrinsics(com.github.anba.es6draft.runtime.types.Intrinsics) ScriptObject(com.github.anba.es6draft.runtime.types.ScriptObject) SystemObject(com.github.anba.es6draft.runtime.objects.reflect.SystemObject) AtomicsObject(com.github.anba.es6draft.runtime.objects.atomics.AtomicsObject) MathObject(com.github.anba.es6draft.runtime.objects.number.MathObject) ReflectObject(com.github.anba.es6draft.runtime.objects.reflect.ReflectObject) IntlObject(com.github.anba.es6draft.runtime.objects.intl.IntlObject) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject) ArrayObject(com.github.anba.es6draft.runtime.types.builtins.ArrayObject) RealmObject(com.github.anba.es6draft.runtime.objects.reflect.RealmObject) MathObject(com.github.anba.es6draft.runtime.objects.number.MathObject) RegExpStringIteratorPrototype(com.github.anba.es6draft.runtime.objects.text.RegExpStringIteratorPrototype)

Example 72 with OrdinaryObject

use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.

the class Realm method initializeIterationModule.

/**
     * <h1>25 Control Abstraction Objects</h1>
     * 
     * @param realm
     *            the realm instance
     */
private static void initializeIterationModule(Realm realm) {
    EnumMap<Intrinsics, OrdinaryObject> intrinsics = realm.intrinsics;
    // allocation phase
    GeneratorFunctionConstructor generatorFunctionConstructor = new GeneratorFunctionConstructor(realm);
    GeneratorPrototype generatorPrototype = new GeneratorPrototype(realm);
    GeneratorFunctionPrototype generator = new GeneratorFunctionPrototype(realm);
    // registration phase
    intrinsics.put(Intrinsics.GeneratorFunction, generatorFunctionConstructor);
    intrinsics.put(Intrinsics.GeneratorPrototype, generatorPrototype);
    intrinsics.put(Intrinsics.Generator, generator);
    // initialization phase
    generatorFunctionConstructor.initialize(realm);
    generatorPrototype.initialize(realm);
    generator.initialize(realm);
    if (realm.isEnabled(CompatibilityOption.LegacyGenerator)) {
        OrdinaryObject legacyGeneratorPrototype = ObjectCreate(realm, Intrinsics.ObjectPrototype);
        intrinsics.put(Intrinsics.LegacyGeneratorPrototype, legacyGeneratorPrototype);
    }
}
Also used : AsyncGeneratorPrototype(com.github.anba.es6draft.runtime.objects.async.iteration.AsyncGeneratorPrototype) GeneratorPrototype(com.github.anba.es6draft.runtime.objects.iteration.GeneratorPrototype) AsyncGeneratorFunctionConstructor(com.github.anba.es6draft.runtime.objects.async.iteration.AsyncGeneratorFunctionConstructor) GeneratorFunctionConstructor(com.github.anba.es6draft.runtime.objects.iteration.GeneratorFunctionConstructor) Intrinsics(com.github.anba.es6draft.runtime.types.Intrinsics) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject) GeneratorFunctionPrototype(com.github.anba.es6draft.runtime.objects.iteration.GeneratorFunctionPrototype) AsyncGeneratorFunctionPrototype(com.github.anba.es6draft.runtime.objects.async.iteration.AsyncGeneratorFunctionPrototype)

Example 73 with OrdinaryObject

use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.

the class Realm method initializeAtomicsModule.

/**
     * <h1>Extension: Shared Memory and Atomics</h1>
     * 
     * @param realm
     *            the realm instance
     */
private static void initializeAtomicsModule(Realm realm) {
    EnumMap<Intrinsics, OrdinaryObject> intrinsics = realm.intrinsics;
    // allocation phase
    AtomicsObject atomicsObject = new AtomicsObject(realm);
    SharedArrayBufferConstructor sharedArrayBufferConstructor = new SharedArrayBufferConstructor(realm);
    SharedArrayBufferPrototype sharedArrayBufferPrototype = new SharedArrayBufferPrototype(realm);
    // registration phase
    intrinsics.put(Intrinsics.Atomics, atomicsObject);
    intrinsics.put(Intrinsics.SharedArrayBuffer, sharedArrayBufferConstructor);
    intrinsics.put(Intrinsics.SharedArrayBufferPrototype, sharedArrayBufferPrototype);
    // initialization phase
    atomicsObject.initialize(realm);
    sharedArrayBufferConstructor.initialize(realm);
    sharedArrayBufferPrototype.initialize(realm);
}
Also used : SharedArrayBufferPrototype(com.github.anba.es6draft.runtime.objects.atomics.SharedArrayBufferPrototype) Intrinsics(com.github.anba.es6draft.runtime.types.Intrinsics) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject) SharedArrayBufferConstructor(com.github.anba.es6draft.runtime.objects.atomics.SharedArrayBufferConstructor) AtomicsObject(com.github.anba.es6draft.runtime.objects.atomics.AtomicsObject)

Example 74 with OrdinaryObject

use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.

the class Properties method createExternalClass.

private static Constructor createExternalClass(ExecutionContext cx, String className, Class<?> constructorProperties, Class<?> prototypeProperties) {
    ObjectLayout ctorLayout = externalClassLayouts.get(constructorProperties);
    ObjectLayout protoLayout = externalClassLayouts.get(prototypeProperties);
    Converter converter = new Converter(cx);
    ScriptObject[] objects = ScriptRuntime.getDefaultClassProto(cx);
    ScriptObject constructorParent = objects[0];
    OrdinaryObject proto = (OrdinaryObject) objects[1];
    assert constructorParent == cx.getIntrinsic(Intrinsics.FunctionPrototype);
    OrdinaryObject constructor = createConstructor(cx, className, proto, converter, protoLayout);
    assert constructor instanceof Constructor;
    if (ctorLayout.functions != null) {
        createExternalFunctions(cx, constructor, ctorLayout, converter);
    }
    if (ctorLayout.accessors != null) {
        createExternalAccessors(cx, constructor, ctorLayout, converter);
    }
    if (protoLayout.functions != null) {
        createExternalFunctions(cx, proto, protoLayout, converter);
    }
    if (protoLayout.accessors != null) {
        createExternalAccessors(cx, proto, protoLayout, converter);
    }
    return (Constructor) constructor;
}
Also used : ScriptObject(com.github.anba.es6draft.runtime.types.ScriptObject) Constructor(com.github.anba.es6draft.runtime.types.Constructor) NativeConstructor(com.github.anba.es6draft.runtime.types.builtins.NativeConstructor) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject)

Example 75 with OrdinaryObject

use of com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject in project es6draft by anba.

the class ArrayPrototype method inheritedKeys.

private static long[] inheritedKeys(OrdinaryObject array, long from, long to) {
    long[] indices = array.indices(from, to);
    for (ScriptObject prototype = array.getPrototype(); prototype != null; ) {
        assert prototype instanceof OrdinaryObject : "Wrong class " + prototype.getClass();
        OrdinaryObject proto = (OrdinaryObject) prototype;
        if (proto.hasIndexedProperties()) {
            long[] protoIndices = proto.indices(from, to);
            long[] newIndices = new long[indices.length + protoIndices.length];
            System.arraycopy(indices, 0, newIndices, 0, indices.length);
            System.arraycopy(protoIndices, 0, newIndices, indices.length, protoIndices.length);
            indices = newIndices;
        }
        prototype = proto.getPrototype();
    }
    Arrays.sort(indices);
    return indices;
}
Also used : ScriptObject(com.github.anba.es6draft.runtime.types.ScriptObject) OrdinaryObject(com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject)

Aggregations

OrdinaryObject (com.github.anba.es6draft.runtime.types.builtins.OrdinaryObject)141 ArrayObject (com.github.anba.es6draft.runtime.types.builtins.ArrayObject)102 ScriptObject (com.github.anba.es6draft.runtime.types.ScriptObject)98 RegExpObject (com.github.anba.es6draft.runtime.objects.text.RegExpObject)84 Intrinsics (com.github.anba.es6draft.runtime.types.Intrinsics)14 Property (com.github.anba.es6draft.runtime.types.Property)5 CompilationException (com.github.anba.es6draft.compiler.CompilationException)3 ParserException (com.github.anba.es6draft.parser.ParserException)3 GlobalEnvironmentRecord (com.github.anba.es6draft.runtime.GlobalEnvironmentRecord)3 RuntimeInfo (com.github.anba.es6draft.runtime.internal.RuntimeInfo)3 ScriptLoader (com.github.anba.es6draft.runtime.internal.ScriptLoader)3 Source (com.github.anba.es6draft.runtime.internal.Source)3 FunctionConstructor.functionSource (com.github.anba.es6draft.runtime.objects.FunctionConstructor.functionSource)3 AsyncGeneratorFunctionConstructor (com.github.anba.es6draft.runtime.objects.async.iteration.AsyncGeneratorFunctionConstructor)3 AsyncGeneratorFunctionPrototype (com.github.anba.es6draft.runtime.objects.async.iteration.AsyncGeneratorFunctionPrototype)3 AtomicsObject (com.github.anba.es6draft.runtime.objects.atomics.AtomicsObject)3 IntlObject (com.github.anba.es6draft.runtime.objects.intl.IntlObject)3 ArrayList (java.util.ArrayList)3 MethodCode (com.github.anba.es6draft.compiler.assembler.Code.MethodCode)2 MethodName (com.github.anba.es6draft.compiler.assembler.MethodName)2