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

Side by Side Diff: src/hydrogen.cc

Issue 10831047: Move BuildCallGetter/BuildCallSetter up in the call chain. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Incorporated review comments. Created 8 years, 4 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/hydrogen.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 4753 matching lines...) Expand 10 before | Expand all | Expand 10 after
4764 property->RecordTypeFeedback(oracle()); 4764 property->RecordTypeFeedback(oracle());
4765 CHECK_ALIVE(VisitForValue(value)); 4765 CHECK_ALIVE(VisitForValue(value));
4766 HValue* value = Pop(); 4766 HValue* value = Pop();
4767 Handle<Map> map = property->GetReceiverType(); 4767 Handle<Map> map = property->GetReceiverType();
4768 Handle<String> name = property->key()->AsPropertyName(); 4768 Handle<String> name = property->key()->AsPropertyName();
4769 HInstruction* store; 4769 HInstruction* store;
4770 if (map.is_null()) { 4770 if (map.is_null()) {
4771 // If we don't know the monomorphic type, do a generic store. 4771 // If we don't know the monomorphic type, do a generic store.
4772 CHECK_ALIVE(store = BuildStoreNamedGeneric(literal, name, value)); 4772 CHECK_ALIVE(store = BuildStoreNamedGeneric(literal, name, value));
4773 } else { 4773 } else {
4774 #if DEBUG
4775 Handle<AccessorPair> accessors;
4776 Handle<JSObject> holder;
4777 ASSERT(!LookupAccessorPair(map, name, &accessors, &holder));
4778 #endif
4774 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(literal, 4779 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(literal,
4775 name, 4780 name,
4776 value, 4781 value,
4777 map)); 4782 map));
4778 } 4783 }
4779 AddInstruction(store); 4784 AddInstruction(store);
4780 if (store->HasObservableSideEffects()) AddSimulate(key->id()); 4785 if (store->HasObservableSideEffects()) AddSimulate(key->id());
4781 } else { 4786 } else {
4782 CHECK_ALIVE(VisitForEffect(value)); 4787 CHECK_ALIVE(VisitForEffect(value));
4783 } 4788 }
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
5049 Handle<String> name, 5054 Handle<String> name,
5050 HValue* value, 5055 HValue* value,
5051 Handle<Map> map) { 5056 Handle<Map> map) {
5052 // Handle a store to a known field. 5057 // Handle a store to a known field.
5053 LookupResult lookup(isolate()); 5058 LookupResult lookup(isolate());
5054 if (ComputeLoadStoreField(map, name, &lookup, true)) { 5059 if (ComputeLoadStoreField(map, name, &lookup, true)) {
5055 // true = needs smi and map check. 5060 // true = needs smi and map check.
5056 return BuildStoreNamedField(object, name, value, map, &lookup, true); 5061 return BuildStoreNamedField(object, name, value, map, &lookup, true);
5057 } 5062 }
5058 5063
5059 // Handle a known setter directly in the receiver.
5060 map->LookupDescriptor(NULL, *name, &lookup);
5061 if (lookup.IsPropertyCallbacks()) {
5062 Handle<Object> callback(lookup.GetValueFromMap(*map));
5063 Handle<JSObject> holder;
5064 if (!callback->IsAccessorPair()) {
5065 return BuildStoreNamedGeneric(object, name, value);
5066 }
5067 Handle<AccessorPair> accessors = Handle<AccessorPair>::cast(callback);
5068 return BuildCallSetter(object, value, map, accessors, holder);
5069 }
5070
5071 // Handle a known setter somewhere in the prototype chain.
5072 LookupInPrototypes(map, name, &lookup);
5073 if (lookup.IsPropertyCallbacks()) {
5074 Handle<Object> callback(lookup.GetValue());
5075 Handle<JSObject> holder(lookup.holder());
5076 if (!callback->IsAccessorPair()) {
5077 return BuildStoreNamedGeneric(object, name, value);
5078 }
5079 Handle<AccessorPair> accessors = Handle<AccessorPair>::cast(callback);
5080 return BuildCallSetter(object, value, map, accessors, holder);
5081 }
5082
5083 // No luck, do a generic store. 5064 // No luck, do a generic store.
5084 return BuildStoreNamedGeneric(object, name, value); 5065 return BuildStoreNamedGeneric(object, name, value);
5085 } 5066 }
5086 5067
5087 5068
5088 void HGraphBuilder::HandlePolymorphicLoadNamedField(Property* expr, 5069 void HGraphBuilder::HandlePolymorphicLoadNamedField(Property* expr,
5089 HValue* object, 5070 HValue* object,
5090 SmallMapList* types, 5071 SmallMapList* types,
5091 Handle<String> name) { 5072 Handle<String> name) {
5092 int count = 0; 5073 int count = 0;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
5230 value = Pop(); 5211 value = Pop();
5231 HValue* object = Pop(); 5212 HValue* object = Pop();
5232 5213
5233 Literal* key = prop->key()->AsLiteral(); 5214 Literal* key = prop->key()->AsLiteral();
5234 Handle<String> name = Handle<String>::cast(key->handle()); 5215 Handle<String> name = Handle<String>::cast(key->handle());
5235 ASSERT(!name.is_null()); 5216 ASSERT(!name.is_null());
5236 5217
5237 SmallMapList* types = expr->GetReceiverTypes(); 5218 SmallMapList* types = expr->GetReceiverTypes();
5238 if (expr->IsMonomorphic()) { 5219 if (expr->IsMonomorphic()) {
5239 Handle<Map> map = types->first(); 5220 Handle<Map> map = types->first();
5240 CHECK_ALIVE(instr = BuildStoreNamedMonomorphic(object, name, value, map)); 5221 Handle<AccessorPair> accessors;
5222 Handle<JSObject> holder;
5223 if (LookupAccessorPair(map, name, &accessors, &holder)) {
5224 instr = BuildCallSetter(object, value, map, accessors, holder);
5225 } else {
5226 CHECK_ALIVE(instr = BuildStoreNamedMonomorphic(object,
5227 name,
5228 value,
5229 map));
5230 }
5241 } else if (types != NULL && types->length() > 1) { 5231 } else if (types != NULL && types->length() > 1) {
5242 HandlePolymorphicStoreNamedField(expr, object, value, types, name); 5232 HandlePolymorphicStoreNamedField(expr, object, value, types, name);
5243 return; 5233 return;
5244 5234
5245 } else { 5235 } else {
5246 instr = BuildStoreNamedGeneric(object, name, value); 5236 instr = BuildStoreNamedGeneric(object, name, value);
5247 } 5237 }
5248 5238
5249 } else { 5239 } else {
5250 // Keyed store. 5240 // Keyed store.
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
5394 if (prop->key()->IsPropertyName()) { 5384 if (prop->key()->IsPropertyName()) {
5395 // Named property. 5385 // Named property.
5396 CHECK_ALIVE(VisitForValue(prop->obj())); 5386 CHECK_ALIVE(VisitForValue(prop->obj()));
5397 HValue* object = Top(); 5387 HValue* object = Top();
5398 5388
5399 Handle<String> name = prop->key()->AsLiteral()->AsPropertyName(); 5389 Handle<String> name = prop->key()->AsLiteral()->AsPropertyName();
5400 Handle<Map> map; 5390 Handle<Map> map;
5401 HInstruction* load; 5391 HInstruction* load;
5402 if (prop->IsMonomorphic()) { 5392 if (prop->IsMonomorphic()) {
5403 map = prop->GetReceiverTypes()->first(); 5393 map = prop->GetReceiverTypes()->first();
5404 load = BuildLoadNamedMonomorphic(object, name, prop, map); 5394 Handle<AccessorPair> accessors;
5395 Handle<JSObject> holder;
5396 if (LookupAccessorPair(map, name, &accessors, &holder)) {
5397 load = BuildCallGetter(object, map, accessors, holder);
5398 } else {
5399 load = BuildLoadNamedMonomorphic(object, name, prop, map);
5400 }
5405 } else { 5401 } else {
5406 load = BuildLoadNamedGeneric(object, name, prop); 5402 load = BuildLoadNamedGeneric(object, name, prop);
5407 } 5403 }
5408 PushAndAdd(load); 5404 PushAndAdd(load);
5409 if (load->HasObservableSideEffects()) AddSimulate(expr->CompoundLoadId()); 5405 if (load->HasObservableSideEffects()) AddSimulate(expr->CompoundLoadId());
5410 5406
5411 CHECK_ALIVE(VisitForValue(expr->value())); 5407 CHECK_ALIVE(VisitForValue(expr->value()));
5412 HValue* right = Pop(); 5408 HValue* right = Pop();
5413 HValue* left = Pop(); 5409 HValue* left = Pop();
5414 5410
5415 HInstruction* instr = BuildBinaryOperation(operation, left, right); 5411 HInstruction* instr = BuildBinaryOperation(operation, left, right);
5416 PushAndAdd(instr); 5412 PushAndAdd(instr);
5417 if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); 5413 if (instr->HasObservableSideEffects()) AddSimulate(operation->id());
5418 5414
5419 HInstruction* store; 5415 HInstruction* store;
5420 if (map.is_null()) { 5416 if (map.is_null()) {
5421 // If we don't know the monomorphic type, do a generic store. 5417 // If we don't know the monomorphic type, do a generic store.
5422 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, instr)); 5418 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, instr));
5423 } else { 5419 } else {
5424 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, 5420 Handle<AccessorPair> accessors;
5425 name, 5421 Handle<JSObject> holder;
5426 instr, 5422 if (LookupAccessorPair(map, name, &accessors, &holder)) {
5427 map)); 5423 store = BuildCallSetter(object, instr, map, accessors, holder);
5424 } else {
5425 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object,
5426 name,
5427 instr,
5428 map));
5429 }
5428 } 5430 }
5429 AddInstruction(store); 5431 AddInstruction(store);
5430 // Drop the simulated receiver and value. Return the value. 5432 // Drop the simulated receiver and value. Return the value.
5431 Drop(2); 5433 Drop(2);
5432 Push(instr); 5434 Push(instr);
5433 if (store->HasObservableSideEffects()) AddSimulate(expr->AssignmentId()); 5435 if (store->HasObservableSideEffects()) AddSimulate(expr->AssignmentId());
5434 return ast_context()->ReturnValue(Pop()); 5436 return ast_context()->ReturnValue(Pop());
5435 5437
5436 } else { 5438 } else {
5437 // Keyed property. 5439 // Keyed property.
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
5664 Handle<Map> map, 5666 Handle<Map> map,
5665 Handle<AccessorPair> accessors, 5667 Handle<AccessorPair> accessors,
5666 Handle<JSObject> holder) { 5668 Handle<JSObject> holder) {
5667 Handle<JSFunction> getter(JSFunction::cast(accessors->getter())); 5669 Handle<JSFunction> getter(JSFunction::cast(accessors->getter()));
5668 AddCheckConstantFunction(holder, object, map, true); 5670 AddCheckConstantFunction(holder, object, map, true);
5669 AddInstruction(new(zone()) HPushArgument(object)); 5671 AddInstruction(new(zone()) HPushArgument(object));
5670 return new(zone()) HCallConstantFunction(getter, 1); 5672 return new(zone()) HCallConstantFunction(getter, 1);
5671 } 5673 }
5672 5674
5673 5675
5676 bool HGraphBuilder::LookupAccessorPair(Handle<Map> map,
5677 Handle<String> name,
5678 Handle<AccessorPair>* accessors,
5679 Handle<JSObject>* holder) {
5680 LookupResult lookup(isolate());
5681
5682 // Check for a JavaScript accessor directly in the map.
5683 map->LookupDescriptor(NULL, *name, &lookup);
5684 if (lookup.IsPropertyCallbacks()) {
5685 Handle<Object> callback(lookup.GetValueFromMap(*map));
5686 if (!callback->IsAccessorPair()) return false;
5687 *accessors = Handle<AccessorPair>::cast(callback);
5688 *holder = Handle<JSObject>();
5689 return true;
5690 }
5691
5692 // Everything else, e.g. a field, can't be an accessor call.
5693 if (lookup.IsFound()) return false;
5694
5695 // Check for a JavaScript accessor somewhere in the proto chain.
5696 LookupInPrototypes(map, name, &lookup);
5697 if (lookup.IsPropertyCallbacks()) {
5698 Handle<Object> callback(lookup.GetValue());
5699 if (!callback->IsAccessorPair()) return false;
5700 *accessors = Handle<AccessorPair>::cast(callback);
5701 *holder = Handle<JSObject>(lookup.holder());
5702 return true;
5703 }
5704
5705 // We haven't found a JavaScript accessor anywhere.
5706 return false;
5707 }
5708
5709
5674 HInstruction* HGraphBuilder::BuildLoadNamedMonomorphic(HValue* object, 5710 HInstruction* HGraphBuilder::BuildLoadNamedMonomorphic(HValue* object,
5675 Handle<String> name, 5711 Handle<String> name,
5676 Property* expr, 5712 Property* expr,
5677 Handle<Map> map) { 5713 Handle<Map> map) {
5678 // Handle a load from a known field. 5714 // Handle a load from a known field.
5679 LookupResult lookup(isolate()); 5715 LookupResult lookup(isolate());
5680 map->LookupDescriptor(NULL, *name, &lookup); 5716 map->LookupDescriptor(NULL, *name, &lookup);
5681 if (lookup.IsField()) { 5717 if (lookup.IsField()) {
5682 return BuildLoadNamedField(object, map, &lookup, true); 5718 return BuildLoadNamedField(object, map, &lookup, true);
5683 } 5719 }
5684 5720
5685 // Handle a load of a constant known function. 5721 // Handle a load of a constant known function.
5686 if (lookup.IsConstantFunction()) { 5722 if (lookup.IsConstantFunction()) {
5687 AddInstruction(new(zone()) HCheckNonSmi(object)); 5723 AddInstruction(new(zone()) HCheckNonSmi(object));
5688 AddInstruction(HCheckMaps::NewWithTransitions(object, map, zone())); 5724 AddInstruction(HCheckMaps::NewWithTransitions(object, map, zone()));
5689 Handle<JSFunction> function(lookup.GetConstantFunctionFromMap(*map)); 5725 Handle<JSFunction> function(lookup.GetConstantFunctionFromMap(*map));
5690 return new(zone()) HConstant(function, Representation::Tagged()); 5726 return new(zone()) HConstant(function, Representation::Tagged());
5691 } 5727 }
5692 5728
5693 // Handle a known getter directly in the receiver.
5694 if (lookup.IsPropertyCallbacks()) {
5695 Handle<Object> callback(lookup.GetValueFromMap(*map));
5696 Handle<JSObject> holder;
5697 if (!callback->IsAccessorPair()) {
5698 return BuildLoadNamedGeneric(object, name, expr);
5699 }
5700 Handle<AccessorPair> accessors = Handle<AccessorPair>::cast(callback);
5701 return BuildCallGetter(object, map, accessors, holder);
5702 }
5703
5704 // Handle a known getter somewhere in the prototype chain.
5705 LookupInPrototypes(map, name, &lookup);
5706 if (lookup.IsPropertyCallbacks()) {
5707 Handle<Object> callback(lookup.GetValue());
5708 Handle<JSObject> holder(lookup.holder());
5709 if (!callback->IsAccessorPair()) {
5710 return BuildLoadNamedGeneric(object, name, expr);
5711 }
5712 Handle<AccessorPair> accessors = Handle<AccessorPair>::cast(callback);
5713 return BuildCallGetter(object, map, accessors, holder);
5714 }
5715
5716 // No luck, do a generic load. 5729 // No luck, do a generic load.
5717 return BuildLoadNamedGeneric(object, name, expr); 5730 return BuildLoadNamedGeneric(object, name, expr);
5718 } 5731 }
5719 5732
5720 5733
5721 HInstruction* HGraphBuilder::BuildLoadKeyedGeneric(HValue* object, 5734 HInstruction* HGraphBuilder::BuildLoadKeyedGeneric(HValue* object,
5722 HValue* key) { 5735 HValue* key) {
5723 HValue* context = environment()->LookupContext(); 5736 HValue* context = environment()->LookupContext();
5724 return new(zone()) HLoadKeyedGeneric(context, object, key); 5737 return new(zone()) HLoadKeyedGeneric(context, object, key);
5725 } 5738 }
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
6326 HValue* function = Pop(); 6339 HValue* function = Pop();
6327 AddInstruction(new(zone()) HCheckNonSmi(function)); 6340 AddInstruction(new(zone()) HCheckNonSmi(function));
6328 instr = new(zone()) HLoadFunctionPrototype(function); 6341 instr = new(zone()) HLoadFunctionPrototype(function);
6329 6342
6330 } else if (expr->key()->IsPropertyName()) { 6343 } else if (expr->key()->IsPropertyName()) {
6331 Handle<String> name = expr->key()->AsLiteral()->AsPropertyName(); 6344 Handle<String> name = expr->key()->AsLiteral()->AsPropertyName();
6332 SmallMapList* types = expr->GetReceiverTypes(); 6345 SmallMapList* types = expr->GetReceiverTypes();
6333 6346
6334 HValue* obj = Pop(); 6347 HValue* obj = Pop();
6335 if (expr->IsMonomorphic()) { 6348 if (expr->IsMonomorphic()) {
6336 instr = BuildLoadNamedMonomorphic(obj, name, expr, types->first()); 6349 Handle<Map> map = types->first();
6350 Handle<AccessorPair> accessors;
6351 Handle<JSObject> holder;
6352 if (LookupAccessorPair(map, name, &accessors, &holder)) {
6353 instr = BuildCallGetter(obj, map, accessors, holder);
6354 } else {
6355 instr = BuildLoadNamedMonomorphic(obj, name, expr, map);
6356 }
6337 } else if (types != NULL && types->length() > 1) { 6357 } else if (types != NULL && types->length() > 1) {
6338 AddInstruction(new(zone()) HCheckNonSmi(obj)); 6358 AddInstruction(new(zone()) HCheckNonSmi(obj));
6339 HandlePolymorphicLoadNamedField(expr, obj, types, name); 6359 HandlePolymorphicLoadNamedField(expr, obj, types, name);
6340 return; 6360 return;
6341 } else { 6361 } else {
6342 instr = BuildLoadNamedGeneric(obj, name, expr); 6362 instr = BuildLoadNamedGeneric(obj, name, expr);
6343 } 6363 }
6344 6364
6345 } else { 6365 } else {
6346 CHECK_ALIVE(VisitForValue(expr->key())); 6366 CHECK_ALIVE(VisitForValue(expr->key()));
(...skipping 1469 matching lines...) Expand 10 before | Expand all | Expand 10 after
7816 if (returns_original_input) Push(graph_->GetConstantUndefined()); 7836 if (returns_original_input) Push(graph_->GetConstantUndefined());
7817 7837
7818 CHECK_ALIVE(VisitForValue(prop->obj())); 7838 CHECK_ALIVE(VisitForValue(prop->obj()));
7819 HValue* object = Top(); 7839 HValue* object = Top();
7820 7840
7821 Handle<String> name = prop->key()->AsLiteral()->AsPropertyName(); 7841 Handle<String> name = prop->key()->AsLiteral()->AsPropertyName();
7822 Handle<Map> map; 7842 Handle<Map> map;
7823 HInstruction* load; 7843 HInstruction* load;
7824 if (prop->IsMonomorphic()) { 7844 if (prop->IsMonomorphic()) {
7825 map = prop->GetReceiverTypes()->first(); 7845 map = prop->GetReceiverTypes()->first();
7826 load = BuildLoadNamedMonomorphic(object, name, prop, map); 7846 Handle<AccessorPair> accessors;
7847 Handle<JSObject> holder;
7848 if (LookupAccessorPair(map, name, &accessors, &holder)) {
7849 load = BuildCallGetter(object, map, accessors, holder);
7850 } else {
7851 load = BuildLoadNamedMonomorphic(object, name, prop, map);
7852 }
7827 } else { 7853 } else {
7828 load = BuildLoadNamedGeneric(object, name, prop); 7854 load = BuildLoadNamedGeneric(object, name, prop);
7829 } 7855 }
7830 PushAndAdd(load); 7856 PushAndAdd(load);
7831 if (load->HasObservableSideEffects()) AddSimulate(expr->CountId()); 7857 if (load->HasObservableSideEffects()) AddSimulate(expr->CountId());
7832 7858
7833 after = BuildIncrement(returns_original_input, expr); 7859 after = BuildIncrement(returns_original_input, expr);
7834 input = Pop(); 7860 input = Pop();
7835 7861
7836 HInstruction* store; 7862 HInstruction* store;
7837 if (map.is_null()) { 7863 if (map.is_null()) {
7838 // If we don't know the monomorphic type, do a generic store. 7864 // If we don't know the monomorphic type, do a generic store.
7839 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after)); 7865 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after));
7840 } else { 7866 } else {
7841 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, 7867 Handle<AccessorPair> accessors;
7842 name, 7868 Handle<JSObject> holder;
7843 after, 7869 if (LookupAccessorPair(map, name, &accessors, &holder)) {
7844 map)); 7870 store = BuildCallSetter(object, after, map, accessors, holder);
7871 } else {
7872 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object,
7873 name,
7874 after,
7875 map));
7876 }
7845 } 7877 }
7846 AddInstruction(store); 7878 AddInstruction(store);
7847 7879
7848 // Overwrite the receiver in the bailout environment with the result 7880 // Overwrite the receiver in the bailout environment with the result
7849 // of the operation, and the placeholder with the original value if 7881 // of the operation, and the placeholder with the original value if
7850 // necessary. 7882 // necessary.
7851 environment()->SetExpressionStackAt(0, after); 7883 environment()->SetExpressionStackAt(0, after);
7852 if (returns_original_input) environment()->SetExpressionStackAt(1, input); 7884 if (returns_original_input) environment()->SetExpressionStackAt(1, input);
7853 if (store->HasObservableSideEffects()) AddSimulate(expr->AssignmentId()); 7885 if (store->HasObservableSideEffects()) AddSimulate(expr->AssignmentId());
7854 7886
(...skipping 1756 matching lines...) Expand 10 before | Expand all | Expand 10 after
9611 } 9643 }
9612 } 9644 }
9613 9645
9614 #ifdef DEBUG 9646 #ifdef DEBUG
9615 if (graph_ != NULL) graph_->Verify(false); // No full verify. 9647 if (graph_ != NULL) graph_->Verify(false); // No full verify.
9616 if (allocator_ != NULL) allocator_->Verify(); 9648 if (allocator_ != NULL) allocator_->Verify();
9617 #endif 9649 #endif
9618 } 9650 }
9619 9651
9620 } } // namespace v8::internal 9652 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/hydrogen.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698