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

Side by Side Diff: src/hydrogen.cc

Issue 24027004: thread isolate for HConstant::handle (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 3 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
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/hydrogen-instructions.h » ('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 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 6893 matching lines...) Expand 10 before | Expand all | Expand 10 after
6904 const ZoneList<HValue*>* arguments_values = args->arguments_values(); 6904 const ZoneList<HValue*>* arguments_values = args->arguments_values();
6905 int arguments_count = arguments_values->length(); 6905 int arguments_count = arguments_values->length();
6906 Push(BuildWrapReceiver(receiver, function)); 6906 Push(BuildWrapReceiver(receiver, function));
6907 for (int i = 1; i < arguments_count; i++) { 6907 for (int i = 1; i < arguments_count; i++) {
6908 Push(arguments_values->at(i)); 6908 Push(arguments_values->at(i));
6909 } 6909 }
6910 6910
6911 Handle<JSFunction> known_function; 6911 Handle<JSFunction> known_function;
6912 if (function->IsConstant()) { 6912 if (function->IsConstant()) {
6913 HConstant* constant_function = HConstant::cast(function); 6913 HConstant* constant_function = HConstant::cast(function);
6914 known_function = Handle<JSFunction>::cast(constant_function->handle()); 6914 known_function = Handle<JSFunction>::cast(
6915 constant_function->handle(isolate()));
6915 int args_count = arguments_count - 1; // Excluding receiver. 6916 int args_count = arguments_count - 1; // Excluding receiver.
6916 if (TryInlineApply(known_function, expr, args_count)) return true; 6917 if (TryInlineApply(known_function, expr, args_count)) return true;
6917 } 6918 }
6918 6919
6919 Drop(arguments_count - 1); 6920 Drop(arguments_count - 1);
6920 PushAndAdd(New<HPushArgument>(Pop())); 6921 PushAndAdd(New<HPushArgument>(Pop()));
6921 for (int i = 1; i < arguments_count; i++) { 6922 for (int i = 1; i < arguments_count; i++) {
6922 PushAndAdd(New<HPushArgument>(arguments_values->at(i))); 6923 PushAndAdd(New<HPushArgument>(arguments_values->at(i)));
6923 } 6924 }
6924 6925
(...skipping 1059 matching lines...) Expand 10 before | Expand all | Expand 10 after
7984 Expression* sub_expr, 7985 Expression* sub_expr,
7985 Handle<String> check) { 7986 Handle<String> check) {
7986 CHECK_ALIVE(VisitForTypeOf(sub_expr)); 7987 CHECK_ALIVE(VisitForTypeOf(sub_expr));
7987 HValue* value = Pop(); 7988 HValue* value = Pop();
7988 HTypeofIsAndBranch* instr = new(zone()) HTypeofIsAndBranch(value, check); 7989 HTypeofIsAndBranch* instr = new(zone()) HTypeofIsAndBranch(value, check);
7989 instr->set_position(expr->position()); 7990 instr->set_position(expr->position());
7990 return ast_context()->ReturnControl(instr, expr->id()); 7991 return ast_context()->ReturnControl(instr, expr->id());
7991 } 7992 }
7992 7993
7993 7994
7994 static bool IsLiteralCompareBool(HValue* left, 7995 static bool IsLiteralCompareBool(Isolate* isolate,
7996 HValue* left,
7995 Token::Value op, 7997 Token::Value op,
7996 HValue* right) { 7998 HValue* right) {
7997 return op == Token::EQ_STRICT && 7999 return op == Token::EQ_STRICT &&
7998 ((left->IsConstant() && HConstant::cast(left)->handle()->IsBoolean()) || 8000 ((left->IsConstant() &&
7999 (right->IsConstant() && HConstant::cast(right)->handle()->IsBoolean())); 8001 HConstant::cast(left)->handle(isolate)->IsBoolean()) ||
8002 (right->IsConstant() &&
8003 HConstant::cast(right)->handle(isolate)->IsBoolean()));
8000 } 8004 }
8001 8005
8002 8006
8003 void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) { 8007 void HOptimizedGraphBuilder::VisitCompareOperation(CompareOperation* expr) {
8004 ASSERT(!HasStackOverflow()); 8008 ASSERT(!HasStackOverflow());
8005 ASSERT(current_block() != NULL); 8009 ASSERT(current_block() != NULL);
8006 ASSERT(current_block()->HasPredecessor()); 8010 ASSERT(current_block()->HasPredecessor());
8007 8011
8008 // Check for a few fast cases. The AST visiting behavior must be in sync 8012 // Check for a few fast cases. The AST visiting behavior must be in sync
8009 // with the full codegen: We don't push both left and right values onto 8013 // with the full codegen: We don't push both left and right values onto
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
8041 Representation right_rep = Representation::FromType(right_type); 8045 Representation right_rep = Representation::FromType(right_type);
8042 8046
8043 CHECK_ALIVE(VisitForValue(expr->left())); 8047 CHECK_ALIVE(VisitForValue(expr->left()));
8044 CHECK_ALIVE(VisitForValue(expr->right())); 8048 CHECK_ALIVE(VisitForValue(expr->right()));
8045 8049
8046 HValue* context = environment()->context(); 8050 HValue* context = environment()->context();
8047 HValue* right = Pop(); 8051 HValue* right = Pop();
8048 HValue* left = Pop(); 8052 HValue* left = Pop();
8049 Token::Value op = expr->op(); 8053 Token::Value op = expr->op();
8050 8054
8051 if (IsLiteralCompareBool(left, op, right)) { 8055 if (IsLiteralCompareBool(isolate(), left, op, right)) {
8052 HCompareObjectEqAndBranch* result = 8056 HCompareObjectEqAndBranch* result =
8053 New<HCompareObjectEqAndBranch>(left, right); 8057 New<HCompareObjectEqAndBranch>(left, right);
8054 result->set_position(expr->position()); 8058 result->set_position(expr->position());
8055 return ast_context()->ReturnControl(result, expr->id()); 8059 return ast_context()->ReturnControl(result, expr->id());
8056 } 8060 }
8057 8061
8058 if (op == Token::INSTANCEOF) { 8062 if (op == Token::INSTANCEOF) {
8059 // Check to see if the rhs of the instanceof is a global function not 8063 // Check to see if the rhs of the instanceof is a global function not
8060 // residing in new space. If it is we assume that the function will stay the 8064 // residing in new space. If it is we assume that the function will stay the
8061 // same. 8065 // same.
(...skipping 1664 matching lines...) Expand 10 before | Expand all | Expand 10 after
9726 if (ShouldProduceTraceOutput()) { 9730 if (ShouldProduceTraceOutput()) {
9727 isolate()->GetHTracer()->TraceHydrogen(name(), graph_); 9731 isolate()->GetHTracer()->TraceHydrogen(name(), graph_);
9728 } 9732 }
9729 9733
9730 #ifdef DEBUG 9734 #ifdef DEBUG
9731 graph_->Verify(false); // No full verify. 9735 graph_->Verify(false); // No full verify.
9732 #endif 9736 #endif
9733 } 9737 }
9734 9738
9735 } } // namespace v8::internal 9739 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/arm/lithium-codegen-arm.cc ('k') | src/hydrogen-instructions.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698