| Index: src/runtime.cc
|
| diff --git a/src/runtime.cc b/src/runtime.cc
|
| index 96d07a859b296b5223d7355f56d1fbb591535b17..3a8da10520214b64711692c5155e6c8b3b8e5d1d 100644
|
| --- a/src/runtime.cc
|
| +++ b/src/runtime.cc
|
| @@ -7553,7 +7553,8 @@ static MaybeObject* Runtime_CompileString(Arguments args) {
|
| Handle<Context> context(Top::context()->global_context());
|
| Handle<SharedFunctionInfo> shared = Compiler::CompileEval(source,
|
| context,
|
| - true);
|
| + true,
|
| + kNonStrictMode);
|
| if (shared.is_null()) return Failure::Exception();
|
| Handle<JSFunction> fun =
|
| Factory::NewFunctionFromSharedFunctionInfo(shared, context, NOT_TENURED);
|
| @@ -7562,13 +7563,15 @@ static MaybeObject* Runtime_CompileString(Arguments args) {
|
|
|
|
|
| static ObjectPair CompileGlobalEval(Handle<String> source,
|
| - Handle<Object> receiver) {
|
| + Handle<Object> receiver,
|
| + StrictModeFlag mode) {
|
| // Deal with a normal eval call with a string argument. Compile it
|
| // and return the compiled function bound in the local context.
|
| Handle<SharedFunctionInfo> shared = Compiler::CompileEval(
|
| source,
|
| Handle<Context>(Top::context()),
|
| - Top::context()->IsGlobalContext());
|
| + Top::context()->IsGlobalContext(),
|
| + mode);
|
| if (shared.is_null()) return MakePair(Failure::Exception(), NULL);
|
| Handle<JSFunction> compiled = Factory::NewFunctionFromSharedFunctionInfo(
|
| shared,
|
| @@ -7579,7 +7582,7 @@ static ObjectPair CompileGlobalEval(Handle<String> source,
|
|
|
|
|
| static ObjectPair Runtime_ResolvePossiblyDirectEval(Arguments args) {
|
| - ASSERT(args.length() == 3);
|
| + ASSERT(args.length() == 4);
|
| if (!args[0]->IsJSFunction()) {
|
| return MakePair(Top::ThrowIllegalOperation(), NULL);
|
| }
|
| @@ -7643,12 +7646,16 @@ static ObjectPair Runtime_ResolvePossiblyDirectEval(Arguments args) {
|
| return MakePair(*callee, Top::context()->global()->global_receiver());
|
| }
|
|
|
| - return CompileGlobalEval(args.at<String>(1), args.at<Object>(2));
|
| + ASSERT(args[3]->IsSmi());
|
| + return CompileGlobalEval(args.at<String>(1),
|
| + args.at<Object>(2),
|
| + static_cast<StrictModeFlag>(
|
| + Smi::cast(args[3])->value()));
|
| }
|
|
|
|
|
| static ObjectPair Runtime_ResolvePossiblyDirectEvalNoLookup(Arguments args) {
|
| - ASSERT(args.length() == 3);
|
| + ASSERT(args.length() == 4);
|
| if (!args[0]->IsJSFunction()) {
|
| return MakePair(Top::ThrowIllegalOperation(), NULL);
|
| }
|
| @@ -7663,7 +7670,11 @@ static ObjectPair Runtime_ResolvePossiblyDirectEvalNoLookup(Arguments args) {
|
| return MakePair(*callee, Top::context()->global()->global_receiver());
|
| }
|
|
|
| - return CompileGlobalEval(args.at<String>(1), args.at<Object>(2));
|
| + ASSERT(args[3]->IsSmi());
|
| + return CompileGlobalEval(args.at<String>(1),
|
| + args.at<Object>(2),
|
| + static_cast<StrictModeFlag>(
|
| + Smi::cast(args[3])->value()));
|
| }
|
|
|
|
|
| @@ -9800,10 +9811,14 @@ static MaybeObject* Runtime_DebugEvaluate(Arguments args) {
|
| Handle<String> function_source =
|
| Factory::NewStringFromAscii(Vector<const char>(source_str,
|
| source_str_length));
|
| +
|
| + // Currently, the eval code will be executed in non-strict mode,
|
| + // even in the strict code context.
|
| Handle<SharedFunctionInfo> shared =
|
| Compiler::CompileEval(function_source,
|
| context,
|
| - context->IsGlobalContext());
|
| + context->IsGlobalContext(),
|
| + kNonStrictMode);
|
| if (shared.is_null()) return Failure::Exception();
|
| Handle<JSFunction> compiled_function =
|
| Factory::NewFunctionFromSharedFunctionInfo(shared, context);
|
| @@ -9885,10 +9900,10 @@ static MaybeObject* Runtime_DebugEvaluateGlobal(Arguments args) {
|
| }
|
|
|
| // Compile the source to be evaluated.
|
| + // Currently, the eval code will be executed in non-strict mode,
|
| + // even in the strict code context.
|
| Handle<SharedFunctionInfo> shared =
|
| - Compiler::CompileEval(source,
|
| - context,
|
| - is_global);
|
| + Compiler::CompileEval(source, context, is_global, kNonStrictMode);
|
| if (shared.is_null()) return Failure::Exception();
|
| Handle<JSFunction> compiled_function =
|
| Handle<JSFunction>(Factory::NewFunctionFromSharedFunctionInfo(shared,
|
|
|