Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(180)

Side by Side Diff: src/runtime/runtime-compiler.cc

Issue 894683003: Introduce LanguageMode, drop StrictMode. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: rebased (w/ conflicts) Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | src/runtime/runtime-debug.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/arguments.h" 7 #include "src/arguments.h"
8 #include "src/compiler.h" 8 #include "src/compiler.h"
9 #include "src/deoptimizer.h" 9 #include "src/deoptimizer.h"
10 #include "src/frames.h" 10 #include "src/frames.h"
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 script->set_line_offset(Smi::FromInt(-line_num)); 387 script->set_line_offset(Smi::FromInt(-line_num));
388 } 388 }
389 } 389 }
390 return *fun; 390 return *fun;
391 } 391 }
392 392
393 393
394 static ObjectPair CompileGlobalEval(Isolate* isolate, Handle<String> source, 394 static ObjectPair CompileGlobalEval(Isolate* isolate, Handle<String> source,
395 Handle<SharedFunctionInfo> outer_info, 395 Handle<SharedFunctionInfo> outer_info,
396 Handle<Object> receiver, 396 Handle<Object> receiver,
397 StrictMode strict_mode, 397 LanguageMode language_mode,
398 int scope_position) { 398 int scope_position) {
399 Handle<Context> context = Handle<Context>(isolate->context()); 399 Handle<Context> context = Handle<Context>(isolate->context());
400 Handle<Context> native_context = Handle<Context>(context->native_context()); 400 Handle<Context> native_context = Handle<Context>(context->native_context());
401 401
402 // Check if native context allows code generation from 402 // Check if native context allows code generation from
403 // strings. Throw an exception if it doesn't. 403 // strings. Throw an exception if it doesn't.
404 if (native_context->allow_code_gen_from_strings()->IsFalse() && 404 if (native_context->allow_code_gen_from_strings()->IsFalse() &&
405 !CodeGenerationFromStringsAllowed(isolate, native_context)) { 405 !CodeGenerationFromStringsAllowed(isolate, native_context)) {
406 Handle<Object> error_message = 406 Handle<Object> error_message =
407 native_context->ErrorMessageForCodeGenerationFromStrings(); 407 native_context->ErrorMessageForCodeGenerationFromStrings();
408 Handle<Object> error; 408 Handle<Object> error;
409 MaybeHandle<Object> maybe_error = isolate->factory()->NewEvalError( 409 MaybeHandle<Object> maybe_error = isolate->factory()->NewEvalError(
410 "code_gen_from_strings", HandleVector<Object>(&error_message, 1)); 410 "code_gen_from_strings", HandleVector<Object>(&error_message, 1));
411 if (maybe_error.ToHandle(&error)) isolate->Throw(*error); 411 if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
412 return MakePair(isolate->heap()->exception(), NULL); 412 return MakePair(isolate->heap()->exception(), NULL);
413 } 413 }
414 414
415 // Deal with a normal eval call with a string argument. Compile it 415 // Deal with a normal eval call with a string argument. Compile it
416 // and return the compiled function bound in the local context. 416 // and return the compiled function bound in the local context.
417 static const ParseRestriction restriction = NO_PARSE_RESTRICTION; 417 static const ParseRestriction restriction = NO_PARSE_RESTRICTION;
418 Handle<JSFunction> compiled; 418 Handle<JSFunction> compiled;
419 ASSIGN_RETURN_ON_EXCEPTION_VALUE( 419 ASSIGN_RETURN_ON_EXCEPTION_VALUE(
420 isolate, compiled, 420 isolate, compiled,
421 Compiler::GetFunctionFromEval(source, outer_info, context, strict_mode, 421 Compiler::GetFunctionFromEval(source, outer_info, context, language_mode,
422 restriction, scope_position), 422 restriction, scope_position),
423 MakePair(isolate->heap()->exception(), NULL)); 423 MakePair(isolate->heap()->exception(), NULL));
424 return MakePair(*compiled, *receiver); 424 return MakePair(*compiled, *receiver);
425 } 425 }
426 426
427 427
428 RUNTIME_FUNCTION_RETURN_PAIR(Runtime_ResolvePossiblyDirectEval) { 428 RUNTIME_FUNCTION_RETURN_PAIR(Runtime_ResolvePossiblyDirectEval) {
429 HandleScope scope(isolate); 429 HandleScope scope(isolate);
430 DCHECK(args.length() == 6); 430 DCHECK(args.length() == 6);
431 431
432 Handle<Object> callee = args.at<Object>(0); 432 Handle<Object> callee = args.at<Object>(0);
433 433
434 // If "eval" didn't refer to the original GlobalEval, it's not a 434 // If "eval" didn't refer to the original GlobalEval, it's not a
435 // direct call to eval. 435 // direct call to eval.
436 // (And even if it is, but the first argument isn't a string, just let 436 // (And even if it is, but the first argument isn't a string, just let
437 // execution default to an indirect call to eval, which will also return 437 // execution default to an indirect call to eval, which will also return
438 // the first argument without doing anything). 438 // the first argument without doing anything).
439 if (*callee != isolate->native_context()->global_eval_fun() || 439 if (*callee != isolate->native_context()->global_eval_fun() ||
440 !args[1]->IsString()) { 440 !args[1]->IsString()) {
441 return MakePair(*callee, isolate->heap()->undefined_value()); 441 return MakePair(*callee, isolate->heap()->undefined_value());
442 } 442 }
443 443
444 DCHECK(args[4]->IsSmi()); 444 DCHECK(args[4]->IsSmi());
445 DCHECK(args.smi_at(4) == SLOPPY || args.smi_at(4) == STRICT); 445 DCHECK(is_valid_language_mode(args.smi_at(4)));
446 StrictMode strict_mode = static_cast<StrictMode>(args.smi_at(4)); 446 LanguageMode language_mode = static_cast<LanguageMode>(args.smi_at(4));
447 DCHECK(args[5]->IsSmi()); 447 DCHECK(args[5]->IsSmi());
448 Handle<SharedFunctionInfo> outer_info(args.at<JSFunction>(2)->shared(), 448 Handle<SharedFunctionInfo> outer_info(args.at<JSFunction>(2)->shared(),
449 isolate); 449 isolate);
450 return CompileGlobalEval(isolate, args.at<String>(1), outer_info, 450 return CompileGlobalEval(isolate, args.at<String>(1), outer_info,
451 args.at<Object>(3), strict_mode, args.smi_at(5)); 451 args.at<Object>(3), language_mode, args.smi_at(5));
452 } 452 }
453 } 453 }
454 } // namespace v8::internal 454 } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/runtime/runtime-classes.cc ('k') | src/runtime/runtime-debug.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698