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

Side by Side Diff: src/hydrogen.cc

Issue 131663003: Make the strict-mode calling convention for contextual calls the default one. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4669 matching lines...) Expand 10 before | Expand all | Expand 10 after
4680 HValue* context = environment()->context(); 4680 HValue* context = environment()->context();
4681 int length = current_info()->scope()->ContextChainLength(var->scope()); 4681 int length = current_info()->scope()->ContextChainLength(var->scope());
4682 while (length-- > 0) { 4682 while (length-- > 0) {
4683 context = Add<HOuterContext>(context); 4683 context = Add<HOuterContext>(context);
4684 } 4684 }
4685 return context; 4685 return context;
4686 } 4686 }
4687 4687
4688 4688
4689 void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) { 4689 void HOptimizedGraphBuilder::VisitVariableProxy(VariableProxy* expr) {
4690 if (expr->is_this()) {
4691 current_info()->set_this_has_uses(true);
4692 }
4693
4690 ASSERT(!HasStackOverflow()); 4694 ASSERT(!HasStackOverflow());
4691 ASSERT(current_block() != NULL); 4695 ASSERT(current_block() != NULL);
4692 ASSERT(current_block()->HasPredecessor()); 4696 ASSERT(current_block()->HasPredecessor());
4693 Variable* variable = expr->var(); 4697 Variable* variable = expr->var();
4694 switch (variable->location()) { 4698 switch (variable->location()) {
4695 case Variable::UNALLOCATED: { 4699 case Variable::UNALLOCATED: {
4696 if (IsLexicalVariableMode(variable->mode())) { 4700 if (IsLexicalVariableMode(variable->mode())) {
4697 // TODO(rossberg): should this be an ASSERT? 4701 // TODO(rossberg): should this be an ASSERT?
4698 return Bailout(kReferenceToGlobalLexicalVariable); 4702 return Bailout(kReferenceToGlobalLexicalVariable);
4699 } 4703 }
(...skipping 2503 matching lines...) Expand 10 before | Expand all | Expand 10 after
7203 ASSERT(target_shared->has_deoptimization_support()); 7207 ASSERT(target_shared->has_deoptimization_support());
7204 AstTyper::Run(&target_info); 7208 AstTyper::Run(&target_info);
7205 7209
7206 // Save the pending call context. Set up new one for the inlined function. 7210 // Save the pending call context. Set up new one for the inlined function.
7207 // The function state is new-allocated because we need to delete it 7211 // The function state is new-allocated because we need to delete it
7208 // in two different places. 7212 // in two different places.
7209 FunctionState* target_state = new FunctionState( 7213 FunctionState* target_state = new FunctionState(
7210 this, &target_info, inlining_kind); 7214 this, &target_info, inlining_kind);
7211 7215
7212 HConstant* undefined = graph()->GetConstantUndefined(); 7216 HConstant* undefined = graph()->GetConstantUndefined();
7213 bool undefined_receiver = HEnvironment::UseUndefinedReceiver( 7217
7214 target, function, call_kind, inlining_kind);
7215 HEnvironment* inner_env = 7218 HEnvironment* inner_env =
7216 environment()->CopyForInlining(target, 7219 environment()->CopyForInlining(target,
7217 arguments_count, 7220 arguments_count,
7218 function, 7221 function,
7219 undefined, 7222 undefined,
7220 function_state()->inlining_kind(), 7223 function_state()->inlining_kind());
7221 undefined_receiver);
7222 7224
7223 HConstant* context = Add<HConstant>(Handle<Context>(target->context())); 7225 HConstant* context = Add<HConstant>(Handle<Context>(target->context()));
7224 inner_env->BindContext(context); 7226 inner_env->BindContext(context);
7225 7227
7226 Add<HSimulate>(return_id); 7228 Add<HSimulate>(return_id);
7227 current_block()->UpdateEnvironment(inner_env); 7229 current_block()->UpdateEnvironment(inner_env);
7228 HArgumentsObject* arguments_object = NULL; 7230 HArgumentsObject* arguments_object = NULL;
7229 7231
7230 // If the function uses arguments object create and bind one, also copy 7232 // If the function uses arguments object create and bind one, also copy
7231 // current arguments values to use them for materialization. 7233 // current arguments values to use them for materialization.
7232 if (function->scope()->arguments() != NULL) { 7234 if (function->scope()->arguments() != NULL) {
7233 ASSERT(function->scope()->arguments()->IsStackAllocated()); 7235 ASSERT(function->scope()->arguments()->IsStackAllocated());
7234 HEnvironment* arguments_env = inner_env->arguments_environment(); 7236 HEnvironment* arguments_env = inner_env->arguments_environment();
7235 int arguments_count = arguments_env->parameter_count(); 7237 int arguments_count = arguments_env->parameter_count();
7236 arguments_object = Add<HArgumentsObject>(arguments_count); 7238 arguments_object = Add<HArgumentsObject>(arguments_count);
7237 inner_env->Bind(function->scope()->arguments(), arguments_object); 7239 inner_env->Bind(function->scope()->arguments(), arguments_object);
7238 for (int i = 0; i < arguments_count; i++) { 7240 for (int i = 0; i < arguments_count; i++) {
7239 arguments_object->AddArgument(arguments_env->Lookup(i), zone()); 7241 arguments_object->AddArgument(arguments_env->Lookup(i), zone());
7240 } 7242 }
7241 } 7243 }
7242 7244
7243 HEnterInlined* enter_inlined = 7245 HEnterInlined* enter_inlined =
7244 Add<HEnterInlined>(target, arguments_count, function, 7246 Add<HEnterInlined>(target, arguments_count, function,
7245 function_state()->inlining_kind(), 7247 function_state()->inlining_kind(),
7246 function->scope()->arguments(), 7248 function->scope()->arguments(),
7247 arguments_object, undefined_receiver); 7249 arguments_object);
7248 function_state()->set_entry(enter_inlined); 7250 function_state()->set_entry(enter_inlined);
7249 7251
7250 VisitDeclarations(target_info.scope()->declarations()); 7252 VisitDeclarations(target_info.scope()->declarations());
7251 VisitStatements(function->body()); 7253 VisitStatements(function->body());
7252 if (HasStackOverflow()) { 7254 if (HasStackOverflow()) {
7253 // Bail out if the inline function did, as we cannot residualize a call 7255 // Bail out if the inline function did, as we cannot residualize a call
7254 // instead. 7256 // instead.
7255 TraceInline(target, caller, "inline graph construction failed"); 7257 TraceInline(target, caller, "inline graph construction failed");
7256 target_shared->DisableOptimization(kInliningBailedOut); 7258 target_shared->DisableOptimization(kInliningBailedOut);
7257 inline_bailout_ = true; 7259 inline_bailout_ = true;
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
7660 HInvokeFunction* call = New<HInvokeFunction>(function, 7662 HInvokeFunction* call = New<HInvokeFunction>(function,
7661 known_function, 7663 known_function,
7662 arguments_count); 7664 arguments_count);
7663 Drop(arguments_count); 7665 Drop(arguments_count);
7664 ast_context()->ReturnInstruction(call, expr->id()); 7666 ast_context()->ReturnInstruction(call, expr->id());
7665 return true; 7667 return true;
7666 } 7668 }
7667 } 7669 }
7668 7670
7669 7671
7670 void HOptimizedGraphBuilder::InstallGlobalReceiverInExpressionStack(
7671 int receiver_index,
7672 Handle<JSFunction> function) {
7673 // TODO(dcarney): Fix deserializer to be able to hookup the global receiver
7674 // and object during deserialization and embed the global receiver here
7675 // directly.
7676 // Install global receiver on stack.
7677 HValue* function_constant = Add<HConstant>(function);
7678 HValue* context = Add<HLoadNamedField>(
7679 function_constant,
7680 HObjectAccess::ForJSObjectOffset(JSFunction::kContextOffset));
7681 HValue* global_object = Add<HLoadNamedField>(
7682 context,
7683 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
7684 HValue* global_receiver = Add<HLoadNamedField>(
7685 global_object,
7686 HObjectAccess::ForJSObjectOffset(GlobalObject::kGlobalReceiverOffset));
7687 environment()->SetExpressionStackAt(receiver_index, global_receiver);
7688 }
7689
7690
7691 void HOptimizedGraphBuilder::VisitCall(Call* expr) { 7672 void HOptimizedGraphBuilder::VisitCall(Call* expr) {
7692 ASSERT(!HasStackOverflow()); 7673 ASSERT(!HasStackOverflow());
7693 ASSERT(current_block() != NULL); 7674 ASSERT(current_block() != NULL);
7694 ASSERT(current_block()->HasPredecessor()); 7675 ASSERT(current_block()->HasPredecessor());
7695 Expression* callee = expr->expression(); 7676 Expression* callee = expr->expression();
7696 int argument_count = expr->arguments()->length() + 1; // Plus receiver. 7677 int argument_count = expr->arguments()->length() + 1; // Plus receiver.
7697 HInstruction* call = NULL; 7678 HInstruction* call = NULL;
7698 7679
7699 Property* prop = callee->AsProperty(); 7680 Property* prop = callee->AsProperty();
7700 if (prop != NULL) { 7681 if (prop != NULL) {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
7795 if (type == kUseCell && 7776 if (type == kUseCell &&
7796 !current_info()->global_object()->IsAccessCheckNeeded()) { 7777 !current_info()->global_object()->IsAccessCheckNeeded()) {
7797 Handle<GlobalObject> global(current_info()->global_object()); 7778 Handle<GlobalObject> global(current_info()->global_object());
7798 known_global_function = expr->ComputeGlobalTarget(global, &lookup); 7779 known_global_function = expr->ComputeGlobalTarget(global, &lookup);
7799 } 7780 }
7800 if (known_global_function) { 7781 if (known_global_function) {
7801 // Push the global object instead of the global receiver because 7782 // Push the global object instead of the global receiver because
7802 // code generated by the full code generator expects it. 7783 // code generated by the full code generator expects it.
7803 HGlobalObject* global_object = Add<HGlobalObject>(); 7784 HGlobalObject* global_object = Add<HGlobalObject>();
7804 Push(global_object); 7785 Push(global_object);
7786
7805 CHECK_ALIVE(VisitExpressions(expr->arguments())); 7787 CHECK_ALIVE(VisitExpressions(expr->arguments()));
7806 7788
7807 CHECK_ALIVE(VisitForValue(expr->expression())); 7789 CHECK_ALIVE(VisitForValue(expr->expression()));
7808 HValue* function = Pop(); 7790 HValue* function = Pop();
7809 Add<HCheckValue>(function, expr->target()); 7791 Add<HCheckValue>(function, expr->target());
7810 7792
7811 // Install global receiver on stack. 7793 // Patch the global object on the stack by the expected receiver.
7794 Handle<JSFunction> target = expr->target();
7795 SharedFunctionInfo* shared = target->shared();
7796 HValue* receiver;
7812 const int receiver_index = argument_count - 1; 7797 const int receiver_index = argument_count - 1;
7813 ASSERT(environment()->ExpressionStackAt(receiver_index)-> 7798 if (shared->is_classic_mode() && !shared->native()) {
dcarney 2014/01/13 18:35:03 not really for this patch maybe, but: is_classic_
7814 IsGlobalObject()); 7799 HValue* context = Add<HLoadNamedField>(
7815 InstallGlobalReceiverInExpressionStack(receiver_index, expr->target()); 7800 function,
7801 HObjectAccess::ForJSObjectOffset(JSFunction::kContextOffset));
7802 HValue* global_object = Add<HLoadNamedField>(
7803 context,
7804 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
7805 receiver = Add<HLoadNamedField>(
7806 global_object,
7807 HObjectAccess::ForJSObjectOffset(
7808 GlobalObject::kGlobalReceiverOffset));
7809 } else {
7810 receiver = graph()->GetConstantUndefined();
7811 }
7812 environment()->SetExpressionStackAt(receiver_index, receiver);
7816 7813
7817 if (TryInlineBuiltinFunctionCall(expr, false)) { // Nothing to drop. 7814 if (TryInlineBuiltinFunctionCall(expr, false)) { // Nothing to drop.
7818 if (FLAG_trace_inlining) { 7815 if (FLAG_trace_inlining) {
7819 PrintF("Inlining builtin "); 7816 PrintF("Inlining builtin ");
7820 expr->target()->ShortPrint(); 7817 expr->target()->ShortPrint();
7821 PrintF("\n"); 7818 PrintF("\n");
7822 } 7819 }
7823 return; 7820 return;
7824 } 7821 }
7825 if (TryInlineCall(expr)) return; 7822 if (TryInlineCall(expr)) return;
7826 7823
7827 if (expr->target().is_identical_to(current_info()->closure())) { 7824 if (expr->target().is_identical_to(current_info()->closure())) {
7828 graph()->MarkRecursive(); 7825 graph()->MarkRecursive();
7829 } 7826 }
7830 7827
7831 if (CallStubCompiler::HasCustomCallGenerator(expr->target())) { 7828 if (CallStubCompiler::HasCustomCallGenerator(expr->target())) {
7832 // We're about to install a contextual IC, which expects the global 7829 // We're about to install a contextual IC, which expects the global
7833 // object as receiver rather than the global proxy. 7830 // object as receiver rather than the global proxy.
7831 HGlobalObject* global_object = Add<HGlobalObject>();
7832 const int receiver_index = argument_count - 1;
7834 environment()->SetExpressionStackAt(receiver_index, global_object); 7833 environment()->SetExpressionStackAt(receiver_index, global_object);
7835 // When the target has a custom call IC generator, use the IC, 7834 // When the target has a custom call IC generator, use the IC,
7836 // because it is likely to generate better code. 7835 // because it is likely to generate better code.
7837 call = PreProcessCall(New<HCallGlobal>(var->name(), argument_count)); 7836 call = PreProcessCall(New<HCallGlobal>(var->name(), argument_count));
7838 } else { 7837 } else {
7839 call = PreProcessCall(New<HCallKnownGlobal>( 7838 call = PreProcessCall(New<HCallKnownGlobal>(
7840 expr->target(), argument_count)); 7839 expr->target(), argument_count));
7841 } 7840 }
7842 } else { 7841 } else {
7843 HGlobalObject* receiver = Add<HGlobalObject>(); 7842 HGlobalObject* receiver = Add<HGlobalObject>();
7844 Push(Add<HPushArgument>(receiver)); 7843 Push(Add<HPushArgument>(receiver));
7845 CHECK_ALIVE(VisitArgumentList(expr->arguments())); 7844 CHECK_ALIVE(VisitArgumentList(expr->arguments()));
7846 7845
7847 call = New<HCallGlobal>(var->name(), argument_count); 7846 call = New<HCallGlobal>(var->name(), argument_count);
7848 Drop(argument_count); 7847 Drop(argument_count);
7849 } 7848 }
7850 7849
7851 } else if (expr->IsMonomorphic()) { 7850 } else if (expr->IsMonomorphic()) {
7852 // The function is on the stack in the unoptimized code during 7851 // The function is on the stack in the unoptimized code during
7853 // evaluation of the arguments. 7852 // evaluation of the arguments.
7854 CHECK_ALIVE(VisitForValue(expr->expression())); 7853 CHECK_ALIVE(VisitForValue(expr->expression()));
7855 HValue* function = Top(); 7854 HValue* function = Top();
7856 HGlobalObject* global = Add<HGlobalObject>(); 7855
7857 HGlobalReceiver* receiver = Add<HGlobalReceiver>(global);
7858 Push(receiver);
7859 CHECK_ALIVE(VisitExpressions(expr->arguments()));
7860 Add<HCheckValue>(function, expr->target()); 7856 Add<HCheckValue>(function, expr->target());
7861 7857
7862 // Install global receiver on stack. 7858 Handle<JSFunction> target = expr->target();
7863 const int receiver_index = argument_count - 1; 7859 SharedFunctionInfo* shared = target->shared();
7864 ASSERT(environment()->ExpressionStackAt(receiver_index)-> 7860 if (shared->is_classic_mode() && !shared->native()) {
dcarney 2014/01/13 18:35:03 this block is identical to the above except for th
7865 IsGlobalReceiver()); 7861 HValue* context = Add<HLoadNamedField>(
7866 InstallGlobalReceiverInExpressionStack(receiver_index, expr->target()); 7862 function,
7863 HObjectAccess::ForJSObjectOffset(JSFunction::kContextOffset));
7864 HValue* global_object = Add<HLoadNamedField>(
7865 context,
7866 HObjectAccess::ForContextSlot(Context::GLOBAL_OBJECT_INDEX));
7867 HValue* global_receiver = Add<HLoadNamedField>(
7868 global_object,
7869 HObjectAccess::ForJSObjectOffset(
7870 GlobalObject::kGlobalReceiverOffset));
7871 Push(global_receiver);
7872 } else {
7873 Push(graph()->GetConstantUndefined());
7874 }
7875
7876 CHECK_ALIVE(VisitExpressions(expr->arguments()));
7867 7877
7868 if (TryInlineBuiltinFunctionCall(expr, true)) { // Drop the function. 7878 if (TryInlineBuiltinFunctionCall(expr, true)) { // Drop the function.
7869 if (FLAG_trace_inlining) { 7879 if (FLAG_trace_inlining) {
7870 PrintF("Inlining builtin "); 7880 PrintF("Inlining builtin ");
7871 expr->target()->ShortPrint(); 7881 expr->target()->ShortPrint();
7872 PrintF("\n"); 7882 PrintF("\n");
7873 } 7883 }
7874 return; 7884 return;
7875 } 7885 }
7876 7886
7877 if (TryInlineCall(expr, true)) { // Drop function from environment. 7887 if (TryInlineCall(expr, true)) { // Drop function from environment.
7878 return; 7888 return;
7879 } else { 7889 } else {
7880 call = PreProcessCall(New<HInvokeFunction>(function, expr->target(), 7890 call = PreProcessCall(New<HInvokeFunction>(function, expr->target(),
7881 argument_count)); 7891 argument_count));
7882 Drop(1); // The function. 7892 Drop(1); // The function.
7883 } 7893 }
7884 7894
7885 } else { 7895 } else {
7886 CHECK_ALIVE(VisitForValue(expr->expression())); 7896 CHECK_ALIVE(VisitForValue(expr->expression()));
7887 HValue* function = Top(); 7897 HValue* function = Top();
7888 HValue* receiver = graph()->GetConstantHole(); 7898 HValue* receiver = graph()->GetConstantUndefined();
7889 Push(Add<HPushArgument>(receiver)); 7899 Push(Add<HPushArgument>(receiver));
7890 CHECK_ALIVE(VisitArgumentList(expr->arguments())); 7900 CHECK_ALIVE(VisitArgumentList(expr->arguments()));
7891 call = New<HCallFunction>( 7901 call = New<HCallFunction>(
7892 function, argument_count, NORMAL_CONTEXTUAL_CALL); 7902 function, argument_count, NORMAL_CONTEXTUAL_CALL);
7893 Drop(argument_count + 1); 7903 Drop(argument_count + 1);
7894 } 7904 }
7895 } 7905 }
7896 7906
7897 return ast_context()->ReturnInstruction(call, expr->id()); 7907 return ast_context()->ReturnInstruction(call, expr->id());
7898 } 7908 }
(...skipping 2665 matching lines...) Expand 10 before | Expand all | Expand 10 after
10564 new_env->ClearHistory(); 10574 new_env->ClearHistory();
10565 return new_env; 10575 return new_env;
10566 } 10576 }
10567 10577
10568 10578
10569 HEnvironment* HEnvironment::CopyForInlining( 10579 HEnvironment* HEnvironment::CopyForInlining(
10570 Handle<JSFunction> target, 10580 Handle<JSFunction> target,
10571 int arguments, 10581 int arguments,
10572 FunctionLiteral* function, 10582 FunctionLiteral* function,
10573 HConstant* undefined, 10583 HConstant* undefined,
10574 InliningKind inlining_kind, 10584 InliningKind inlining_kind) const {
10575 bool undefined_receiver) const {
10576 ASSERT(frame_type() == JS_FUNCTION); 10585 ASSERT(frame_type() == JS_FUNCTION);
10577 10586
10578 // Outer environment is a copy of this one without the arguments. 10587 // Outer environment is a copy of this one without the arguments.
10579 int arity = function->scope()->num_parameters(); 10588 int arity = function->scope()->num_parameters();
10580 10589
10581 HEnvironment* outer = Copy(); 10590 HEnvironment* outer = Copy();
10582 outer->Drop(arguments + 1); // Including receiver. 10591 outer->Drop(arguments + 1); // Including receiver.
10583 outer->ClearHistory(); 10592 outer->ClearHistory();
10584 10593
10585 if (inlining_kind == CONSTRUCT_CALL_RETURN) { 10594 if (inlining_kind == CONSTRUCT_CALL_RETURN) {
(...skipping 17 matching lines...) Expand all
10603 } 10612 }
10604 10613
10605 HEnvironment* inner = 10614 HEnvironment* inner =
10606 new(zone()) HEnvironment(outer, function->scope(), target, zone()); 10615 new(zone()) HEnvironment(outer, function->scope(), target, zone());
10607 // Get the argument values from the original environment. 10616 // Get the argument values from the original environment.
10608 for (int i = 0; i <= arity; ++i) { // Include receiver. 10617 for (int i = 0; i <= arity; ++i) { // Include receiver.
10609 HValue* push = (i <= arguments) ? 10618 HValue* push = (i <= arguments) ?
10610 ExpressionStackAt(arguments - i) : undefined; 10619 ExpressionStackAt(arguments - i) : undefined;
10611 inner->SetValueAt(i, push); 10620 inner->SetValueAt(i, push);
10612 } 10621 }
10613 // If the function we are inlining is a strict mode function or a
10614 // builtin function, pass undefined as the receiver for function
10615 // calls (instead of the global receiver).
10616 if (undefined_receiver) {
10617 inner->SetValueAt(0, undefined);
10618 }
10619 inner->SetValueAt(arity + 1, context()); 10622 inner->SetValueAt(arity + 1, context());
10620 for (int i = arity + 2; i < inner->length(); ++i) { 10623 for (int i = arity + 2; i < inner->length(); ++i) {
10621 inner->SetValueAt(i, undefined); 10624 inner->SetValueAt(i, undefined);
10622 } 10625 }
10623 10626
10624 inner->set_ast_id(BailoutId::FunctionEntry()); 10627 inner->set_ast_id(BailoutId::FunctionEntry());
10625 return inner; 10628 return inner;
10626 } 10629 }
10627 10630
10628 10631
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
10975 if (ShouldProduceTraceOutput()) { 10978 if (ShouldProduceTraceOutput()) {
10976 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 10979 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
10977 } 10980 }
10978 10981
10979 #ifdef DEBUG 10982 #ifdef DEBUG
10980 graph_->Verify(false); // No full verify. 10983 graph_->Verify(false); // No full verify.
10981 #endif 10984 #endif
10982 } 10985 }
10983 10986
10984 } } // namespace v8::internal 10987 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.h ('k') | src/hydrogen-instructions.h » ('j') | src/ia32/code-stubs-ia32.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698