| Index: src/contexts.h
|
| ===================================================================
|
| --- src/contexts.h (revision 9808)
|
| +++ src/contexts.h (working copy)
|
| @@ -46,24 +46,43 @@
|
|
|
| // ES5 10.2 defines lexical environments with mutable and immutable bindings.
|
| // Immutable bindings have two states, initialized and uninitialized, and
|
| -// their state is changed by the InitializeImmutableBinding method.
|
| +// their state is changed by the InitializeImmutableBinding method. The
|
| +// BindingFlags enum represents information if a binding has definitely been
|
| +// initialized. A mutable binding does not need to be checked and thus has
|
| +// the BindingFlag MUTABLE_IS_INITIALIZED.
|
| //
|
| +// There are two possibilities for immutable bindings
|
| +// * 'const' declared variables. They are initialized when evaluating the
|
| +// corresponding declaration statement. They need to be checked for being
|
| +// initialized and thus get the flag IMMUTABLE_CHECK_INITIALIZED.
|
| +// * The function name of a named function literal. The binding is immediately
|
| +// initialized when entering the function and thus does not need to be
|
| +// checked. it gets the BindingFlag IMMUTABLE_IS_INITIALIZED.
|
| +// Accessing an uninitialized binding produces the undefined value.
|
| +//
|
| // The harmony proposal for block scoped bindings also introduces the
|
| -// uninitialized state for mutable bindings. A 'let' declared variable
|
| -// is a mutable binding that is created uninitalized upon activation of its
|
| -// lexical environment and it is initialized when evaluating its declaration
|
| -// statement. Var declared variables are mutable bindings that are
|
| -// immediately initialized upon creation. The BindingFlags enum represents
|
| -// information if a binding has definitely been initialized. 'const' declared
|
| -// variables are created as uninitialized immutable bindings.
|
| -
|
| -// In harmony mode accessing an uninitialized binding produces a reference
|
| -// error.
|
| +// uninitialized state for mutable bindings.
|
| +// * A 'let' declared variable. They are initialized when evaluating the
|
| +// corresponding declaration statement. They need to be checked for being
|
| +// initialized and thus get the flag MUTABLE_CHECK_INITIALIZED.
|
| +// * A 'var' declared variable. It is initialized immediately upon creation
|
| +// and thus doesn't need to be checked. It gets the flag
|
| +// MUTABLE_IS_INITIALIZED.
|
| +// * Catch bound variables, function parameters and variables introduced by
|
| +// function declarations are initialized immediately and do not need to be
|
| +// checked. Thus they get the flag MUTABLE_IS_INITIALIZED.
|
| +// Immutable bindings in harmony mode get the _HARMONY flag variants. Accessing
|
| +// an uninitialized binding produces a reference error.
|
| +//
|
| +// In V8 uninitialized bindings are set to the hole value upon creation and set
|
| +// to a different value upon initialization.
|
| enum BindingFlags {
|
| MUTABLE_IS_INITIALIZED,
|
| MUTABLE_CHECK_INITIALIZED,
|
| IMMUTABLE_IS_INITIALIZED,
|
| IMMUTABLE_CHECK_INITIALIZED,
|
| + IMMUTABLE_IS_INITIALIZED_HARMONY,
|
| + IMMUTABLE_CHECK_INITIALIZED_HARMONY,
|
| MISSING_BINDING
|
| };
|
|
|
| @@ -138,7 +157,9 @@
|
| to_complete_property_descriptor) \
|
| V(DERIVED_HAS_TRAP_INDEX, JSFunction, derived_has_trap) \
|
| V(DERIVED_GET_TRAP_INDEX, JSFunction, derived_get_trap) \
|
| - V(DERIVED_SET_TRAP_INDEX, JSFunction, derived_set_trap)
|
| + V(DERIVED_SET_TRAP_INDEX, JSFunction, derived_set_trap) \
|
| + V(PROXY_ENUMERATE, JSFunction, proxy_enumerate) \
|
| + V(RANDOM_SEED_INDEX, ByteArray, random_seed)
|
|
|
| // JSFunctions are pairs (context, function code), sometimes also called
|
| // closures. A Context object is used to represent function contexts and
|
| @@ -194,7 +215,8 @@
|
| PREVIOUS_INDEX,
|
| // The extension slot is used for either the global object (in global
|
| // contexts), eval extension object (function contexts), subject of with
|
| - // (with contexts), or the variable name (catch contexts).
|
| + // (with contexts), or the variable name (catch contexts), the serialized
|
| + // scope info (block contexts).
|
| EXTENSION_INDEX,
|
| GLOBAL_INDEX,
|
| MIN_CONTEXT_SLOTS,
|
| @@ -258,6 +280,8 @@
|
| DERIVED_HAS_TRAP_INDEX,
|
| DERIVED_GET_TRAP_INDEX,
|
| DERIVED_SET_TRAP_INDEX,
|
| + PROXY_ENUMERATE,
|
| + RANDOM_SEED_INDEX,
|
|
|
| // Properties from here are treated as weak references by the full GC.
|
| // Scavenge treats them as strong references.
|
| @@ -385,8 +409,7 @@
|
|
|
| // Determine if any function scope in the context call eval and if
|
| // any of those calls are in non-strict mode.
|
| - void ComputeEvalScopeInfo(bool* outer_scope_calls_eval,
|
| - bool* outer_scope_calls_non_strict_eval);
|
| + void ComputeEvalScopeInfo(bool* outer_scope_calls_non_strict_eval);
|
|
|
| // Code generation support.
|
| static int SlotOffset(int index) {
|
|
|