| Index: src/contexts.h
|
| diff --git a/src/contexts.h b/src/contexts.h
|
| index 3d9e7f4bfe06b481071d7f571a8240c756716980..505f86c8ca5bb70bebfa050e6270457d05ba3a6d 100644
|
| --- a/src/contexts.h
|
| +++ b/src/contexts.h
|
| @@ -44,6 +44,30 @@ enum ContextLookupFlags {
|
| };
|
|
|
|
|
| +// 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.
|
| +//
|
| +// 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.
|
| +enum BindingFlags {
|
| + MUTABLE_IS_INITIALIZED,
|
| + MUTABLE_CHECK_INITIALIZED,
|
| + IMMUTABLE_IS_INITIALIZED,
|
| + IMMUTABLE_CHECK_INITIALIZED,
|
| + MISSING_BINDING
|
| +};
|
| +
|
| +
|
| // Heap-allocated activation contexts.
|
| //
|
| // Contexts are implemented as FixedArray objects; the Context
|
| @@ -351,8 +375,11 @@ class Context: public FixedArray {
|
| // 4) index_ < 0 && result.is_null():
|
| // there was no context found with the corresponding property.
|
| // attributes == ABSENT.
|
| - Handle<Object> Lookup(Handle<String> name, ContextLookupFlags flags,
|
| - int* index_, PropertyAttributes* attributes);
|
| + Handle<Object> Lookup(Handle<String> name,
|
| + ContextLookupFlags flags,
|
| + int* index_,
|
| + PropertyAttributes* attributes,
|
| + BindingFlags* binding_flags);
|
|
|
| // Determine if a local variable with the given name exists in a
|
| // context. Do not consider context extension objects. This is
|
|
|