| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 5071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5082 HHasInstanceTypeAndBranch* typecheck = | 5082 HHasInstanceTypeAndBranch* typecheck = |
| 5083 new(zone()) HHasInstanceTypeAndBranch(return_value, | 5083 new(zone()) HHasInstanceTypeAndBranch(return_value, |
| 5084 FIRST_SPEC_OBJECT_TYPE, | 5084 FIRST_SPEC_OBJECT_TYPE, |
| 5085 LAST_SPEC_OBJECT_TYPE); | 5085 LAST_SPEC_OBJECT_TYPE); |
| 5086 HBasicBlock* if_spec_object = graph()->CreateBasicBlock(); | 5086 HBasicBlock* if_spec_object = graph()->CreateBasicBlock(); |
| 5087 HBasicBlock* not_spec_object = graph()->CreateBasicBlock(); | 5087 HBasicBlock* not_spec_object = graph()->CreateBasicBlock(); |
| 5088 typecheck->SetSuccessorAt(0, if_spec_object); | 5088 typecheck->SetSuccessorAt(0, if_spec_object); |
| 5089 typecheck->SetSuccessorAt(1, not_spec_object); | 5089 typecheck->SetSuccessorAt(1, not_spec_object); |
| 5090 current_block()->Finish(typecheck); | 5090 current_block()->Finish(typecheck); |
| 5091 if_spec_object->AddLeaveInlined(return_value, state); | 5091 if_spec_object->AddLeaveInlined(return_value, state); |
| 5092 if (!FLAG_harmony_symbols) { | 5092 not_spec_object->AddLeaveInlined(receiver, state); |
| 5093 not_spec_object->AddLeaveInlined(receiver, state); | |
| 5094 } else { | |
| 5095 HHasInstanceTypeAndBranch* symbolcheck = | |
| 5096 new(zone()) HHasInstanceTypeAndBranch(return_value, SYMBOL_TYPE); | |
| 5097 HBasicBlock* is_symbol = graph()->CreateBasicBlock(); | |
| 5098 HBasicBlock* not_symbol = graph()->CreateBasicBlock(); | |
| 5099 symbolcheck->SetSuccessorAt(0, is_symbol); | |
| 5100 symbolcheck->SetSuccessorAt(1, not_symbol); | |
| 5101 not_spec_object->Finish(symbolcheck); | |
| 5102 is_symbol->AddLeaveInlined(return_value, state); | |
| 5103 not_symbol->AddLeaveInlined(receiver, state); | |
| 5104 } | |
| 5105 } | 5093 } |
| 5106 } else if (state->inlining_kind() == SETTER_CALL_RETURN) { | 5094 } else if (state->inlining_kind() == SETTER_CALL_RETURN) { |
| 5107 // Return from an inlined setter call. The returned value is never used, the | 5095 // Return from an inlined setter call. The returned value is never used, the |
| 5108 // value of an assignment is always the value of the RHS of the assignment. | 5096 // value of an assignment is always the value of the RHS of the assignment. |
| 5109 CHECK_ALIVE(VisitForEffect(stmt->expression())); | 5097 CHECK_ALIVE(VisitForEffect(stmt->expression())); |
| 5110 if (context->IsTest()) { | 5098 if (context->IsTest()) { |
| 5111 HValue* rhs = environment()->arguments_environment()->Lookup(1); | 5099 HValue* rhs = environment()->arguments_environment()->Lookup(1); |
| 5112 context->ReturnValue(rhs); | 5100 context->ReturnValue(rhs); |
| 5113 } else if (context->IsEffect()) { | 5101 } else if (context->IsEffect()) { |
| 5114 current_block()->Goto(function_return(), state); | 5102 current_block()->Goto(function_return(), state); |
| (...skipping 4964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10079 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | 10067 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
| 10080 HValue* value = Pop(); | 10068 HValue* value = Pop(); |
| 10081 HHasInstanceTypeAndBranch* result = | 10069 HHasInstanceTypeAndBranch* result = |
| 10082 new(zone()) HHasInstanceTypeAndBranch(value, | 10070 new(zone()) HHasInstanceTypeAndBranch(value, |
| 10083 FIRST_SPEC_OBJECT_TYPE, | 10071 FIRST_SPEC_OBJECT_TYPE, |
| 10084 LAST_SPEC_OBJECT_TYPE); | 10072 LAST_SPEC_OBJECT_TYPE); |
| 10085 return ast_context()->ReturnControl(result, call->id()); | 10073 return ast_context()->ReturnControl(result, call->id()); |
| 10086 } | 10074 } |
| 10087 | 10075 |
| 10088 | 10076 |
| 10089 void HOptimizedGraphBuilder::GenerateIsSymbol(CallRuntime* call) { | |
| 10090 ASSERT(call->arguments()->length() == 1); | |
| 10091 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | |
| 10092 HValue* value = Pop(); | |
| 10093 HHasInstanceTypeAndBranch* result = | |
| 10094 new(zone()) HHasInstanceTypeAndBranch(value, SYMBOL_TYPE); | |
| 10095 return ast_context()->ReturnControl(result, call->id()); | |
| 10096 } | |
| 10097 | |
| 10098 | |
| 10099 void HOptimizedGraphBuilder::GenerateIsFunction(CallRuntime* call) { | 10077 void HOptimizedGraphBuilder::GenerateIsFunction(CallRuntime* call) { |
| 10100 ASSERT(call->arguments()->length() == 1); | 10078 ASSERT(call->arguments()->length() == 1); |
| 10101 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); | 10079 CHECK_ALIVE(VisitForValue(call->arguments()->at(0))); |
| 10102 HValue* value = Pop(); | 10080 HValue* value = Pop(); |
| 10103 HHasInstanceTypeAndBranch* result = | 10081 HHasInstanceTypeAndBranch* result = |
| 10104 new(zone()) HHasInstanceTypeAndBranch(value, JS_FUNCTION_TYPE); | 10082 new(zone()) HHasInstanceTypeAndBranch(value, JS_FUNCTION_TYPE); |
| 10105 return ast_context()->ReturnControl(result, call->id()); | 10083 return ast_context()->ReturnControl(result, call->id()); |
| 10106 } | 10084 } |
| 10107 | 10085 |
| 10108 | 10086 |
| (...skipping 1154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 11263 } | 11241 } |
| 11264 } | 11242 } |
| 11265 | 11243 |
| 11266 #ifdef DEBUG | 11244 #ifdef DEBUG |
| 11267 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 11245 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
| 11268 if (allocator_ != NULL) allocator_->Verify(); | 11246 if (allocator_ != NULL) allocator_->Verify(); |
| 11269 #endif | 11247 #endif |
| 11270 } | 11248 } |
| 11271 | 11249 |
| 11272 } } // namespace v8::internal | 11250 } } // namespace v8::internal |
| OLD | NEW |