| Index: src/objects.h
|
| diff --git a/src/objects.h b/src/objects.h
|
| index a592a33694867791194516be5f9c6ef1551e58d7..cab3dd10922a4b64772dbf8206b0f919a6c5ca24 100644
|
| --- a/src/objects.h
|
| +++ b/src/objects.h
|
| @@ -3041,12 +3041,12 @@ class ScopeInfo : public FixedArray {
|
| // Does this scope call eval?
|
| bool CallsEval();
|
|
|
| - // Is this scope a strict mode scope?
|
| - bool IsStrictMode();
|
| + // Return the language mode of this scope.
|
| + LanguageMode language_mode();
|
|
|
| // Does this scope make a non-strict eval call?
|
| bool CallsNonStrictEval() {
|
| - return CallsEval() && !IsStrictMode();
|
| + return CallsEval() && (language_mode() == CLASSIC_MODE);
|
| }
|
|
|
| // Return the total number of locals allocated on the stack and in the
|
| @@ -3214,9 +3214,9 @@ class ScopeInfo : public FixedArray {
|
| // Properties of scopes.
|
| class TypeField: public BitField<ScopeType, 0, 3> {};
|
| class CallsEvalField: public BitField<bool, 3, 1> {};
|
| - class StrictModeField: public BitField<bool, 4, 1> {};
|
| - class FunctionVariableField: public BitField<FunctionVariableInfo, 5, 2> {};
|
| - class FunctionVariableMode: public BitField<VariableMode, 7, 3> {};
|
| + class LanguageModeField: public BitField<LanguageMode, 4, 2> {};
|
| + class FunctionVariableField: public BitField<FunctionVariableInfo, 6, 2> {};
|
| + class FunctionVariableMode: public BitField<VariableMode, 8, 3> {};
|
|
|
| // BitFields representing the encoded information for context locals in the
|
| // ContextLocalInfoEntries part.
|
| @@ -4970,12 +4970,20 @@ class SharedFunctionInfo: public HeapObject {
|
| // spending time attempting to optimize it again.
|
| DECL_BOOLEAN_ACCESSORS(optimization_disabled)
|
|
|
| - // Indicates whether the function is a strict mode function.
|
| - inline bool strict_mode();
|
| + // Indicates the language mode of the function's code as defined by the
|
| + // current harmony drafts for the next ES language standard. Possible
|
| + // values are:
|
| + // 1. CLASSIC_MODE - Unrestricted syntax and semantics, same as in ES5.
|
| + // 2. STRICT_MODE - Restricted syntax and semantics, same as in ES5.
|
| + // 3. EXTENDED_MODE - Only available under the harmony flag, not part of ES5.
|
| + inline LanguageMode language_mode();
|
| + inline void set_language_mode(LanguageMode language_mode);
|
|
|
| - // Indicates the mode of the function.
|
| - inline StrictModeFlag strict_mode_flag();
|
| - inline void set_strict_mode_flag(StrictModeFlag strict_mode_flag);
|
| + // Indicates whether the language mode of this function is CLASSIC_MODE.
|
| + inline bool is_classic_mode();
|
| +
|
| + // Indicates whether the language mode of this function is EXTENDED_MODE.
|
| + inline bool is_extended_mode();
|
|
|
| // False if the function definitely does not allocate an arguments object.
|
| DECL_BOOLEAN_ACCESSORS(uses_arguments)
|
| @@ -5198,6 +5206,7 @@ class SharedFunctionInfo: public HeapObject {
|
| kCodeAgeShift,
|
| kOptimizationDisabled = kCodeAgeShift + kCodeAgeSize,
|
| kStrictModeFunction,
|
| + kExtendedModeFunction,
|
| kUsesArguments,
|
| kHasDuplicateParameters,
|
| kNative,
|
| @@ -5228,18 +5237,26 @@ class SharedFunctionInfo: public HeapObject {
|
| static const int kStrictModeBitWithinByte =
|
| (kStrictModeFunction + kCompilerHintsSmiTagSize) % kBitsPerByte;
|
|
|
| + static const int kExtendedModeBitWithinByte =
|
| + (kExtendedModeFunction + kCompilerHintsSmiTagSize) % kBitsPerByte;
|
| +
|
| static const int kNativeBitWithinByte =
|
| (kNative + kCompilerHintsSmiTagSize) % kBitsPerByte;
|
|
|
| #if __BYTE_ORDER == __LITTLE_ENDIAN
|
| static const int kStrictModeByteOffset = kCompilerHintsOffset +
|
| (kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte;
|
| + static const int kExtendedModeByteOffset = kCompilerHintsOffset +
|
| + (kExtendedModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte;
|
| static const int kNativeByteOffset = kCompilerHintsOffset +
|
| (kNative + kCompilerHintsSmiTagSize) / kBitsPerByte;
|
| #elif __BYTE_ORDER == __BIG_ENDIAN
|
| static const int kStrictModeByteOffset = kCompilerHintsOffset +
|
| (kCompilerHintsSize - 1) -
|
| ((kStrictModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte);
|
| + static const int kExtendedModeByteOffset = kCompilerHintsOffset +
|
| + (kCompilerHintsSize - 1) -
|
| + ((kExtendedModeFunction + kCompilerHintsSmiTagSize) / kBitsPerByte);
|
| static const int kNativeByteOffset = kCompilerHintsOffset +
|
| (kCompilerHintsSize - 1) -
|
| ((kNative + kCompilerHintsSmiTagSize) / kBitsPerByte);
|
| @@ -5856,7 +5873,7 @@ class CompilationCacheTable: public HashTable<CompilationCacheShape,
|
| Object* Lookup(String* src);
|
| Object* LookupEval(String* src,
|
| Context* context,
|
| - StrictModeFlag strict_mode,
|
| + LanguageMode language_mode,
|
| int scope_position);
|
| Object* LookupRegExp(String* source, JSRegExp::Flags flags);
|
| MaybeObject* Put(String* src, Object* value);
|
|
|