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) { |