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

Side by Side Diff: runtime/vm/flow_graph_builder.cc

Issue 1528873002: VM: Use read-only handle Object::dynamic_type() where possible. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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 | « runtime/vm/constant_propagator.cc ('k') | runtime/vm/flow_graph_compiler_arm.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 (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/flow_graph_builder.h" 5 #include "vm/flow_graph_builder.h"
6 6
7 #include "lib/invocation_mirror.h" 7 #include "lib/invocation_mirror.h"
8 #include "vm/ast_printer.h" 8 #include "vm/ast_printer.h"
9 #include "vm/bit_vector.h" 9 #include "vm/bit_vector.h"
10 #include "vm/compiler.h" 10 #include "vm/compiler.h"
(...skipping 3474 matching lines...) Expand 10 before | Expand all | Expand 10 after
3485 node->scope()->LookupVariable(Symbols::Value(), true); 3485 node->scope()->LookupVariable(Symbols::Value(), true);
3486 Value* value = Bind(new(Z) LoadLocalInstr(*value_var)); 3486 Value* value = Bind(new(Z) LoadLocalInstr(*value_var));
3487 LoadClassIdInstr* load = new(Z) LoadClassIdInstr(value); 3487 LoadClassIdInstr* load = new(Z) LoadClassIdInstr(value);
3488 return ReturnDefinition(load); 3488 return ReturnDefinition(load);
3489 } 3489 }
3490 case MethodRecognizer::kGrowableArrayCapacity: { 3490 case MethodRecognizer::kGrowableArrayCapacity: {
3491 Value* receiver = Bind(BuildLoadThisVar(node->scope())); 3491 Value* receiver = Bind(BuildLoadThisVar(node->scope()));
3492 LoadFieldInstr* data_load = new(Z) LoadFieldInstr( 3492 LoadFieldInstr* data_load = new(Z) LoadFieldInstr(
3493 receiver, 3493 receiver,
3494 Array::data_offset(), 3494 Array::data_offset(),
3495 Type::ZoneHandle(Z, Type::DynamicType()), 3495 Object::dynamic_type(),
3496 node->token_pos()); 3496 node->token_pos());
3497 data_load->set_result_cid(kArrayCid); 3497 data_load->set_result_cid(kArrayCid);
3498 Value* data = Bind(data_load); 3498 Value* data = Bind(data_load);
3499 LoadFieldInstr* length_load = new(Z) LoadFieldInstr( 3499 LoadFieldInstr* length_load = new(Z) LoadFieldInstr(
3500 data, 3500 data,
3501 Array::length_offset(), 3501 Array::length_offset(),
3502 Type::ZoneHandle(Z, Type::SmiType()), 3502 Type::ZoneHandle(Z, Type::SmiType()),
3503 node->token_pos()); 3503 node->token_pos());
3504 length_load->set_result_cid(kSmiCid); 3504 length_load->set_result_cid(kSmiCid);
3505 length_load->set_recognized_kind(MethodRecognizer::kObjectArrayLength); 3505 length_load->set_recognized_kind(MethodRecognizer::kObjectArrayLength);
3506 return ReturnDefinition(length_load); 3506 return ReturnDefinition(length_load);
3507 } 3507 }
3508 case MethodRecognizer::kObjectArrayAllocate: { 3508 case MethodRecognizer::kObjectArrayAllocate: {
3509 LocalVariable* type_args_parameter = 3509 LocalVariable* type_args_parameter =
3510 node->scope()->LookupVariable(Symbols::TypeArgumentsParameter(), 3510 node->scope()->LookupVariable(Symbols::TypeArgumentsParameter(),
3511 true); 3511 true);
3512 Value* element_type = Bind(new(Z) LoadLocalInstr(*type_args_parameter)); 3512 Value* element_type = Bind(new(Z) LoadLocalInstr(*type_args_parameter));
3513 LocalVariable* length_parameter = 3513 LocalVariable* length_parameter =
3514 node->scope()->LookupVariable(Symbols::Length(), true); 3514 node->scope()->LookupVariable(Symbols::Length(), true);
3515 Value* length = Bind(new(Z) LoadLocalInstr(*length_parameter)); 3515 Value* length = Bind(new(Z) LoadLocalInstr(*length_parameter));
3516 CreateArrayInstr* create_array = 3516 CreateArrayInstr* create_array =
3517 new CreateArrayInstr(node->token_pos(), element_type, length); 3517 new CreateArrayInstr(node->token_pos(), element_type, length);
3518 return ReturnDefinition(create_array); 3518 return ReturnDefinition(create_array);
3519 } 3519 }
3520 case MethodRecognizer::kBigint_getDigits: { 3520 case MethodRecognizer::kBigint_getDigits: {
3521 return ReturnDefinition(BuildNativeGetter( 3521 return ReturnDefinition(BuildNativeGetter(
3522 node, kind, Bigint::digits_offset(), 3522 node, kind, Bigint::digits_offset(),
3523 Type::ZoneHandle(Z, Type::DynamicType()), 3523 Object::dynamic_type(),
3524 kTypedDataUint32ArrayCid)); 3524 kTypedDataUint32ArrayCid));
3525 } 3525 }
3526 case MethodRecognizer::kBigint_getUsed: { 3526 case MethodRecognizer::kBigint_getUsed: {
3527 return ReturnDefinition(BuildNativeGetter( 3527 return ReturnDefinition(BuildNativeGetter(
3528 node, kind, Bigint::used_offset(), 3528 node, kind, Bigint::used_offset(),
3529 Type::ZoneHandle(Z, Type::SmiType()), kSmiCid)); 3529 Type::ZoneHandle(Z, Type::SmiType()), kSmiCid));
3530 } 3530 }
3531 case MethodRecognizer::kLinkedHashMap_getIndex: { 3531 case MethodRecognizer::kLinkedHashMap_getIndex: {
3532 return ReturnDefinition(BuildNativeGetter( 3532 return ReturnDefinition(BuildNativeGetter(
3533 node, kind, LinkedHashMap::index_offset(), 3533 node, kind, LinkedHashMap::index_offset(),
3534 Type::ZoneHandle(Z, Type::DynamicType()), 3534 Object::dynamic_type(),
3535 kDynamicCid)); 3535 kDynamicCid));
3536 } 3536 }
3537 case MethodRecognizer::kLinkedHashMap_setIndex: { 3537 case MethodRecognizer::kLinkedHashMap_setIndex: {
3538 return ReturnDefinition(DoNativeSetterStoreValue( 3538 return ReturnDefinition(DoNativeSetterStoreValue(
3539 node, LinkedHashMap::index_offset(), kEmitStoreBarrier)); 3539 node, LinkedHashMap::index_offset(), kEmitStoreBarrier));
3540 } 3540 }
3541 case MethodRecognizer::kLinkedHashMap_getData: { 3541 case MethodRecognizer::kLinkedHashMap_getData: {
3542 return ReturnDefinition(BuildNativeGetter( 3542 return ReturnDefinition(BuildNativeGetter(
3543 node, kind, LinkedHashMap::data_offset(), 3543 node, kind, LinkedHashMap::data_offset(),
3544 Type::ZoneHandle(Z, Type::DynamicType()), 3544 Object::dynamic_type(),
3545 kArrayCid)); 3545 kArrayCid));
3546 } 3546 }
3547 case MethodRecognizer::kLinkedHashMap_setData: { 3547 case MethodRecognizer::kLinkedHashMap_setData: {
3548 return ReturnDefinition(DoNativeSetterStoreValue( 3548 return ReturnDefinition(DoNativeSetterStoreValue(
3549 node, LinkedHashMap::data_offset(), kEmitStoreBarrier)); 3549 node, LinkedHashMap::data_offset(), kEmitStoreBarrier));
3550 } 3550 }
3551 case MethodRecognizer::kLinkedHashMap_getHashMask: { 3551 case MethodRecognizer::kLinkedHashMap_getHashMask: {
3552 return ReturnDefinition(BuildNativeGetter( 3552 return ReturnDefinition(BuildNativeGetter(
3553 node, kind, LinkedHashMap::hash_mask_offset(), 3553 node, kind, LinkedHashMap::hash_mask_offset(),
3554 Type::ZoneHandle(Z, Type::SmiType()), 3554 Type::ZoneHandle(Z, Type::SmiType()),
(...skipping 468 matching lines...) Expand 10 before | Expand all | Expand 10 after
4023 (kParamEndSlotFromFp + num_params) : kFirstLocalSlotFromFp; 4023 (kParamEndSlotFromFp + num_params) : kFirstLocalSlotFromFp;
4024 for (int pos = 0; pos < num_params; param_frame_index--, pos++) { 4024 for (int pos = 0; pos < num_params; param_frame_index--, pos++) {
4025 const LocalVariable& parameter = *scope->VariableAt(pos); 4025 const LocalVariable& parameter = *scope->VariableAt(pos);
4026 ASSERT(parameter.owner() == scope); 4026 ASSERT(parameter.owner() == scope);
4027 if (parameter.is_captured()) { 4027 if (parameter.is_captured()) {
4028 // Create a temporary local describing the original position. 4028 // Create a temporary local describing the original position.
4029 const String& temp_name = Symbols::TempParam(); 4029 const String& temp_name = Symbols::TempParam();
4030 LocalVariable* temp_local = new(Z) LocalVariable( 4030 LocalVariable* temp_local = new(Z) LocalVariable(
4031 0, // Token index. 4031 0, // Token index.
4032 temp_name, 4032 temp_name,
4033 Type::ZoneHandle(Z, Type::DynamicType())); // Type. 4033 Object::dynamic_type()); // Type.
4034 temp_local->set_index(param_frame_index); 4034 temp_local->set_index(param_frame_index);
4035 4035
4036 // Mark this local as captured parameter so that the optimizer 4036 // Mark this local as captured parameter so that the optimizer
4037 // correctly handles these when compiling try-catch: Captured 4037 // correctly handles these when compiling try-catch: Captured
4038 // parameters are not in the stack environment, therefore they 4038 // parameters are not in the stack environment, therefore they
4039 // must be skipped when emitting sync-code in try-blocks. 4039 // must be skipped when emitting sync-code in try-blocks.
4040 temp_local->set_is_captured_parameter(true); 4040 temp_local->set_is_captured_parameter(true);
4041 4041
4042 // Copy parameter from local frame to current context. 4042 // Copy parameter from local frame to current context.
4043 Value* load = Bind(BuildLoadLocal(*temp_local)); 4043 Value* load = Bind(BuildLoadLocal(*temp_local));
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
4332 Value* stacktrace = for_finally.Bind( 4332 Value* stacktrace = for_finally.Bind(
4333 for_finally.BuildLoadLocal(catch_block->rethrow_stacktrace_var())); 4333 for_finally.BuildLoadLocal(catch_block->rethrow_stacktrace_var()));
4334 for_finally.PushArgument(stacktrace); 4334 for_finally.PushArgument(stacktrace);
4335 for_finally.AddInstruction( 4335 for_finally.AddInstruction(
4336 new(Z) ReThrowInstr(catch_block->token_pos(), catch_handler_index)); 4336 new(Z) ReThrowInstr(catch_block->token_pos(), catch_handler_index));
4337 for_finally.CloseFragment(); 4337 for_finally.CloseFragment();
4338 } 4338 }
4339 ASSERT(!for_finally.is_open()); 4339 ASSERT(!for_finally.is_open());
4340 4340
4341 const Array& types = Array::ZoneHandle(Z, Array::New(1, Heap::kOld)); 4341 const Array& types = Array::ZoneHandle(Z, Array::New(1, Heap::kOld));
4342 types.SetAt(0, Type::Handle(Z, Type::DynamicType())); 4342 types.SetAt(0, Object::dynamic_type());
4343 CatchBlockEntryInstr* finally_entry = 4343 CatchBlockEntryInstr* finally_entry =
4344 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(), 4344 new(Z) CatchBlockEntryInstr(owner()->AllocateBlockId(),
4345 original_handler_index, 4345 original_handler_index,
4346 types, 4346 types,
4347 catch_handler_index, 4347 catch_handler_index,
4348 catch_block->exception_var(), 4348 catch_block->exception_var(),
4349 catch_block->stacktrace_var(), 4349 catch_block->stacktrace_var(),
4350 catch_block->needs_stacktrace()); 4350 catch_block->needs_stacktrace());
4351 owner()->AddCatchEntry(finally_entry); 4351 owner()->AddCatchEntry(finally_entry);
4352 AppendFragment(finally_entry, for_finally); 4352 AppendFragment(finally_entry, for_finally);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
4606 Report::MessageF(Report::kBailout, 4606 Report::MessageF(Report::kBailout,
4607 Script::Handle(function.script()), 4607 Script::Handle(function.script()),
4608 function.token_pos(), 4608 function.token_pos(),
4609 "FlowGraphBuilder Bailout: %s %s", 4609 "FlowGraphBuilder Bailout: %s %s",
4610 String::Handle(function.name()).ToCString(), 4610 String::Handle(function.name()).ToCString(),
4611 reason); 4611 reason);
4612 UNREACHABLE(); 4612 UNREACHABLE();
4613 } 4613 }
4614 4614
4615 } // namespace dart 4615 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/constant_propagator.cc ('k') | runtime/vm/flow_graph_compiler_arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698