Chromium Code Reviews| Index: runtime/vm/flow_graph_builder.cc |
| diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc |
| index ee6294913f30da1b96e19984df8e10a2b8510b1b..9d6a1e5fa93aac7dc820ef00b979c83026ab6ec9 100644 |
| --- a/runtime/vm/flow_graph_builder.cc |
| +++ b/runtime/vm/flow_graph_builder.cc |
| @@ -49,7 +49,7 @@ DECLARE_FLAG(bool, use_field_guards); |
| #define Z (zone()) |
| // Quick synthetic token position. |
| -#define ST(token_pos) Token::ToSynthetic(token_pos) |
| +#define ST(token_pos) TokenDescriptor::ToSynthetic(token_pos) |
| // TODO(srdjan): Allow compiler to add constants as they are encountered in |
| // the compilation. |
| @@ -560,7 +560,7 @@ void InlineExitCollector::ReplaceCall(TargetEntryInstr* callee_entry) { |
| ConstantInstr* true_const = caller_graph_->GetConstant(Bool::True()); |
| BranchInstr* branch = |
| new(Z) BranchInstr( |
| - new(Z) StrictCompareInstr(call_block->start_pos(), |
| + new(Z) StrictCompareInstr(TokenDescriptor(call_block->start_pos()), |
|
Ivan Posva
2016/02/01 17:16:52
Why is start_pos() not returning a TokenPosition?
Cutch
2016/02/02 18:00:20
start_pos is actually an SSA position and not a to
|
| Token::kEQ_STRICT, |
| new(Z) Value(true_const), |
| new(Z) Value(true_const), |
| @@ -707,7 +707,8 @@ void EffectGraphVisitor::AddInstruction(Instruction* instruction) { |
| } |
| -void EffectGraphVisitor::AddReturnExit(intptr_t token_pos, Value* value) { |
| +void EffectGraphVisitor::AddReturnExit(TokenDescriptor token_pos, |
| + Value* value) { |
| ASSERT(is_open()); |
| ReturnInstr* return_instr = new(Z) ReturnInstr(token_pos, value); |
| AddInstruction(return_instr); |
| @@ -781,7 +782,7 @@ void EffectGraphVisitor::Join(const TestGraphVisitor& test_fragment, |
| void EffectGraphVisitor::TieLoop( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| const TestGraphVisitor& test_fragment, |
| const EffectGraphVisitor& body_fragment, |
| const EffectGraphVisitor& test_preamble_fragment) { |
| @@ -833,23 +834,23 @@ PushArgumentInstr* EffectGraphVisitor::PushArgument(Value* value) { |
| Definition* EffectGraphVisitor::BuildStoreTemp(const LocalVariable& local, |
| Value* value, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| ASSERT(!local.is_captured()); |
| - ASSERT(!Token::IsClassifying(token_pos)); |
| + ASSERT(!TokenDescriptor(token_pos).IsClassifying()); |
| return new(Z) StoreLocalInstr(local, value, ST(token_pos)); |
| } |
| Definition* EffectGraphVisitor::BuildStoreExprTemp(Value* value, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| return BuildStoreTemp(*owner()->parsed_function().expression_temp_var(), |
| value, |
| token_pos); |
| } |
| -Definition* EffectGraphVisitor::BuildLoadExprTemp(intptr_t token_pos) { |
| - ASSERT(!Token::IsClassifying(token_pos)); |
| +Definition* EffectGraphVisitor::BuildLoadExprTemp(TokenDescriptor token_pos) { |
| + ASSERT(!TokenDescriptor(token_pos).IsClassifying()); |
| return BuildLoadLocal(*owner()->parsed_function().expression_temp_var(), |
| token_pos); |
| } |
| @@ -857,7 +858,7 @@ Definition* EffectGraphVisitor::BuildLoadExprTemp(intptr_t token_pos) { |
| Definition* EffectGraphVisitor::BuildStoreLocal(const LocalVariable& local, |
| Value* value, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| if (local.is_captured()) { |
| LocalVariable* tmp_var = EnterTempLocalScope(value, token_pos); |
| intptr_t delta = |
| @@ -885,7 +886,7 @@ Definition* EffectGraphVisitor::BuildStoreLocal(const LocalVariable& local, |
| Definition* EffectGraphVisitor::BuildLoadLocal(const LocalVariable& local, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| if (local.IsConst()) { |
| return new(Z) ConstantInstr(*local.ConstValue(), token_pos); |
| } else if (local.is_captured()) { |
| @@ -911,8 +912,9 @@ Definition* EffectGraphVisitor::BuildLoadLocal(const LocalVariable& local, |
| // Stores current context into the 'variable' |
| void EffectGraphVisitor::BuildSaveContext( |
| const LocalVariable& variable, |
| - intptr_t token_pos) { |
| - ASSERT(Token::IsSynthetic(token_pos) || Token::IsNoSource(token_pos)); |
| + TokenDescriptor token_pos) { |
| + ASSERT(TokenDescriptor(token_pos).IsSynthetic() || |
| + TokenDescriptor(token_pos).IsNoSource()); |
| Value* context = Bind(BuildCurrentContext(token_pos)); |
| Do(BuildStoreLocal(variable, context, token_pos)); |
| } |
| @@ -921,20 +923,20 @@ void EffectGraphVisitor::BuildSaveContext( |
| // Loads context saved in 'context_variable' into the current context. |
| void EffectGraphVisitor::BuildRestoreContext( |
| const LocalVariable& variable, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| Value* load_saved_context = Bind(BuildLoadLocal(variable, token_pos)); |
| Do(BuildStoreContext(load_saved_context, token_pos)); |
| } |
| Definition* EffectGraphVisitor::BuildStoreContext( |
| - Value* value, intptr_t token_pos) { |
| + Value* value, TokenDescriptor token_pos) { |
| return new(Z) StoreLocalInstr( |
| *owner()->parsed_function().current_context_var(), value, token_pos); |
| } |
| -Definition* EffectGraphVisitor::BuildCurrentContext(intptr_t token_pos) { |
| +Definition* EffectGraphVisitor::BuildCurrentContext(TokenDescriptor token_pos) { |
| return new(Z) LoadLocalInstr( |
| *owner()->parsed_function().current_context_var(), |
| token_pos); |
| @@ -1132,7 +1134,8 @@ void EffectGraphVisitor::VisitReturnNode(ReturnNode* node) { |
| // statements for which there is no associated source position. |
| const Function& function = owner()->function(); |
| if (FLAG_support_debugger && |
| - Token::IsDebugPause(node->token_pos()) && !function.is_native()) { |
| + TokenDescriptor(node->token_pos()).IsDebugPause() && |
| + !function.is_native()) { |
| AddInstruction(new(Z) DebugStepCheckInstr(node->token_pos(), |
| RawPcDescriptors::kRuntimeCall)); |
| } |
| @@ -1266,7 +1269,7 @@ void ValueGraphVisitor::VisitTypeNode(TypeNode* node) { |
| // Returns true if the type check can be skipped, for example, if the |
| // destination type is dynamic or if the compile type of the value is a subtype |
| // of the destination type. |
| -bool EffectGraphVisitor::CanSkipTypeCheck(intptr_t token_pos, |
| +bool EffectGraphVisitor::CanSkipTypeCheck(TokenDescriptor token_pos, |
| Value* value, |
| const AbstractType& dst_type, |
| const String& dst_name) { |
| @@ -1507,7 +1510,7 @@ void EffectGraphVisitor::VisitBinaryOpWithMask32Node( |
| void EffectGraphVisitor::BuildTypecheckPushArguments( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| PushArgumentInstr** push_instantiator_type_arguments_result) { |
| const Class& instantiator_class = Class::Handle( |
| Z, owner()->function().Owner()); |
| @@ -1530,7 +1533,7 @@ void EffectGraphVisitor::BuildTypecheckPushArguments( |
| void EffectGraphVisitor::BuildTypecheckArguments( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| Value** instantiator_type_arguments_result) { |
| Value* instantiator = NULL; |
| Value* instantiator_type_arguments = NULL; |
| @@ -1551,7 +1554,7 @@ void EffectGraphVisitor::BuildTypecheckArguments( |
| } |
| -Value* EffectGraphVisitor::BuildNullValue(intptr_t token_pos) { |
| +Value* EffectGraphVisitor::BuildNullValue(TokenDescriptor token_pos) { |
| return Bind(new(Z) ConstantInstr(Object::ZoneHandle(Z, Object::null()), |
| token_pos)); |
| } |
| @@ -1559,7 +1562,7 @@ Value* EffectGraphVisitor::BuildNullValue(intptr_t token_pos) { |
| // Used for testing incoming arguments. |
| AssertAssignableInstr* EffectGraphVisitor::BuildAssertAssignable( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| Value* value, |
| const AbstractType& dst_type, |
| const String& dst_name) { |
| @@ -1582,7 +1585,7 @@ AssertAssignableInstr* EffectGraphVisitor::BuildAssertAssignable( |
| // Used for type casts and to test assignments. |
| -Value* EffectGraphVisitor::BuildAssignableValue(intptr_t token_pos, |
| +Value* EffectGraphVisitor::BuildAssignableValue(TokenDescriptor token_pos, |
| Value* value, |
| const AbstractType& dst_type, |
| const String& dst_name) { |
| @@ -1752,10 +1755,11 @@ void EffectGraphVisitor::BuildTypeCast(ComparisonNode* node) { |
| } |
| -StrictCompareInstr* EffectGraphVisitor::BuildStrictCompare(AstNode* left, |
| - AstNode* right, |
| - Token::Kind kind, |
| - intptr_t token_pos) { |
| +StrictCompareInstr* EffectGraphVisitor::BuildStrictCompare( |
| + AstNode* left, |
| + AstNode* right, |
| + Token::Kind kind, |
| + TokenDescriptor token_pos) { |
| ValueGraphVisitor for_left_value(owner()); |
| left->Visit(&for_left_value); |
| Append(for_left_value); |
| @@ -2286,8 +2290,8 @@ void EffectGraphVisitor::VisitAwaitMarkerNode(AwaitMarkerNode* node) { |
| // We need to create a new await state which involves: |
| // * Increase the jump counter. Sanity check against the list of targets. |
| // * Save the current context for resuming. |
| - ASSERT(Token::IsSynthetic(node->token_pos()) || |
| - Token::IsNoSource(node->token_pos())); |
| + ASSERT(TokenDescriptor(node->token_pos()).IsSynthetic() || |
|
Ivan Posva
2016/02/01 17:16:52
ditto.
Why not TokenPosition in the first place?
Cutch
2016/02/02 18:00:20
Done.
|
| + TokenDescriptor(node->token_pos()).IsNoSource()); |
| ASSERT(node->async_scope() != NULL); |
| ASSERT(node->await_scope() != NULL); |
| LocalVariable* jump_var = node->async_scope()->LookupVariable( |
| @@ -2320,7 +2324,7 @@ intptr_t EffectGraphVisitor::GetCurrentTempLocalIndex() const { |
| LocalVariable* EffectGraphVisitor::EnterTempLocalScope( |
| - Value* value, intptr_t token_pos) { |
| + Value* value, TokenDescriptor token_pos) { |
| Do(new(Z) PushTempInstr(value)); |
| owner()->AllocateTemp(); |
| @@ -2329,7 +2333,7 @@ LocalVariable* EffectGraphVisitor::EnterTempLocalScope( |
| char name[64]; |
| OS::SNPrint(name, 64, ":tmp_local%" Pd, index); |
| LocalVariable* var = |
| - new(Z) LocalVariable(Token::kNoSourcePos, |
| + new(Z) LocalVariable(TokenDescriptor::kNoSource, |
| String::ZoneHandle(Z, Symbols::New(name)), |
| *value->Type()->ToAbstractType()); |
| var->set_index(index); |
| @@ -2338,7 +2342,7 @@ LocalVariable* EffectGraphVisitor::EnterTempLocalScope( |
| Definition* EffectGraphVisitor::ExitTempLocalScope( |
| - LocalVariable* var, intptr_t token_pos) { |
| + LocalVariable* var, TokenDescriptor token_pos) { |
| Value* tmp = Bind(new(Z) LoadLocalInstr(*var, token_pos)); |
| owner()->DeallocateTemps(1); |
| ASSERT(GetCurrentTempLocalIndex() == var->index()); |
| @@ -2626,7 +2630,7 @@ void EffectGraphVisitor::BuildPushArguments( |
| void EffectGraphVisitor::BuildInstanceCallConditional(InstanceCallNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| LocalVariable* temp_var = owner()->parsed_function().expression_temp_var(); |
| LoadLocalNode* load_temp = new(Z) LoadLocalNode(token_pos, temp_var); |
| @@ -2918,7 +2922,7 @@ void EffectGraphVisitor::VisitConstructorCallNode(ConstructorCallNode* node) { |
| } |
| -Value* EffectGraphVisitor::BuildInstantiator(intptr_t token_pos) { |
| +Value* EffectGraphVisitor::BuildInstantiator(TokenDescriptor token_pos) { |
| Function& outer_function = Function::Handle(Z, owner()->function().raw()); |
| while (outer_function.IsLocalFunction()) { |
| outer_function = outer_function.parent_function(); |
| @@ -2937,7 +2941,7 @@ Value* EffectGraphVisitor::BuildInstantiator(intptr_t token_pos) { |
| // 'expression_temp_var' may not be used inside this method if 'instantiator' |
| // is not NULL. |
| Value* EffectGraphVisitor::BuildInstantiatorTypeArguments( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| const Class& instantiator_class, |
| Value* instantiator) { |
| if (!instantiator_class.IsGeneric()) { |
| @@ -2987,7 +2991,7 @@ Value* EffectGraphVisitor::BuildInstantiatorTypeArguments( |
| Value* EffectGraphVisitor::BuildInstantiatedTypeArguments( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| const TypeArguments& type_arguments) { |
| if (type_arguments.IsNull() || type_arguments.IsInstantiated()) { |
| return Bind(new(Z) ConstantInstr(type_arguments)); |
| @@ -3039,7 +3043,7 @@ void ValueGraphVisitor::VisitConstructorCallNode(ConstructorCallNode* node) { |
| void EffectGraphVisitor::BuildInstanceGetterConditional( |
| InstanceGetterNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| LocalVariable* temp_var = owner()->parsed_function().expression_temp_var(); |
| LoadLocalNode* load_temp = new(Z) LoadLocalNode(token_pos, temp_var); |
| @@ -3135,7 +3139,7 @@ void EffectGraphVisitor::BuildInstanceSetterArguments( |
| void EffectGraphVisitor::VisitInstanceSetterNode(InstanceSetterNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| if (node->is_conditional()) { |
| ValueGraphVisitor for_receiver(owner()); |
| node->receiver()->Visit(&for_receiver); |
| @@ -3185,7 +3189,7 @@ void EffectGraphVisitor::VisitInstanceSetterNode(InstanceSetterNode* node) { |
| void ValueGraphVisitor::VisitInstanceSetterNode(InstanceSetterNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| if (node->is_conditional()) { |
| ValueGraphVisitor for_receiver(owner()); |
| node->receiver()->Visit(&for_receiver); |
| @@ -3317,7 +3321,7 @@ void EffectGraphVisitor::BuildStaticSetter(StaticSetterNode* node, |
| String::ZoneHandle(Z, Field::SetterSymbol(node->field_name())); |
| ZoneGrowableArray<PushArgumentInstr*>* arguments = |
| new(Z) ZoneGrowableArray<PushArgumentInstr*>(1); |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| // A super setter is an instance setter whose setter function is |
| // resolved at compile time (in the caller instance getter's super class). |
| // Unlike a static getter, a super getter has a receiver parameter. |
| @@ -3417,7 +3421,7 @@ static intptr_t OffsetForLengthGetter(MethodRecognizer::Kind kind) { |
| LoadLocalInstr* EffectGraphVisitor::BuildLoadThisVar( |
| - LocalScope* scope, intptr_t token_pos) { |
| + LocalScope* scope, TokenDescriptor token_pos) { |
| LocalVariable* receiver_var = scope->LookupVariable(Symbols::This(), |
| true); // Test only. |
| return new(Z) LoadLocalInstr(*receiver_var, token_pos); |
| @@ -3462,7 +3466,7 @@ ConstantInstr* EffectGraphVisitor::DoNativeSetterStoreValue( |
| void EffectGraphVisitor::VisitNativeBodyNode(NativeBodyNode* node) { |
| const Function& function = owner()->function(); |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| if (!function.IsClosureFunction()) { |
| MethodRecognizer::Kind kind = MethodRecognizer::RecognizeKind(function); |
| switch (kind) { |
| @@ -3665,7 +3669,7 @@ void EffectGraphVisitor::VisitStoreLocalNode(StoreLocalNode* node) { |
| !node->value()->AsLoadLocalNode()->local().IsInternal()) || |
| node->value()->IsClosureNode()) && |
| !node->local().IsInternal() && |
| - Token::IsDebugPause(node->token_pos())) { |
| + TokenDescriptor(node->token_pos()).IsDebugPause()) { |
| AddInstruction(new(Z) DebugStepCheckInstr( |
| node->token_pos(), RawPcDescriptors::kRuntimeCall)); |
| } |
| @@ -3711,7 +3715,7 @@ void EffectGraphVisitor::VisitLoadInstanceFieldNode( |
| void EffectGraphVisitor::VisitStoreInstanceFieldNode( |
| StoreInstanceFieldNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| ValueGraphVisitor for_instance(owner()); |
| node->instance()->Visit(&for_instance); |
| Append(for_instance); |
| @@ -3757,7 +3761,7 @@ void EffectGraphVisitor::VisitStoreInstanceFieldNode( |
| void EffectGraphVisitor::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| if (node->field().is_const()) { |
| ASSERT(node->field().StaticValue() != Object::sentinel().raw()); |
| ASSERT(node->field().StaticValue() != |
| @@ -3776,7 +3780,7 @@ void EffectGraphVisitor::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
| Definition* EffectGraphVisitor::BuildStoreStaticField( |
| StoreStaticFieldNode* node, |
| bool result_is_needed, |
| - intptr_t token_pos) { |
| + TokenDescriptor token_pos) { |
| ValueGraphVisitor for_value(owner()); |
| node->value()->Visit(&for_value); |
| Append(for_value); |
| @@ -3874,7 +3878,7 @@ Definition* EffectGraphVisitor::BuildStoreIndexedValues( |
| StoreIndexedNode* node, |
| bool result_is_needed) { |
| Function* super_function = NULL; |
| - const intptr_t token_pos = node->token_pos(); |
| + const TokenDescriptor token_pos = node->token_pos(); |
| if (node->IsSuperStore()) { |
| // Resolve the store indexed operator in the super class. |
| super_function = &Function::ZoneHandle( |
| @@ -3984,7 +3988,7 @@ bool EffectGraphVisitor::HasContextScope() const { |
| void EffectGraphVisitor::UnchainContexts(intptr_t n) { |
| // TODO(johnmccutchan): Pass this in. |
| - const intptr_t token_pos = ClassifyingTokenPositions::kContext; |
| + const TokenDescriptor token_pos = TokenDescriptor::kContext; |
| if (n > 0) { |
| Value* context = Bind(BuildCurrentContext(token_pos)); |
| while (n-- > 0) { |
| @@ -4082,7 +4086,7 @@ void EffectGraphVisitor::VisitSequenceNode(SequenceNode* node) { |
| // Create a temporary local describing the original position. |
| const String& temp_name = Symbols::TempParam(); |
| LocalVariable* temp_local = new(Z) LocalVariable( |
| - Token::kNoSourcePos, // Token index. |
| + TokenDescriptor::kNoSource, // Token index. |
| temp_name, |
| Object::dynamic_type()); // Type. |
| temp_local->set_index(param_frame_index); |
| @@ -4117,15 +4121,16 @@ void EffectGraphVisitor::VisitSequenceNode(SequenceNode* node) { |
| // basic block. Place this check at the last parameter to ensure parameters |
| // are in scope in the debugger at method entry. |
| const int num_params = function.NumParameters(); |
| - intptr_t check_pos = Token::kNoSourcePos; |
| + TokenDescriptor check_pos = TokenDescriptor::kNoSource; |
| if (num_params > 0) { |
| const LocalVariable& parameter = *scope->VariableAt(num_params - 1); |
| check_pos = parameter.token_pos(); |
| } |
| - if (!Token::IsDebugPause(check_pos)) { |
| + |
| + if (!check_pos.IsDebugPause()) { |
| // No parameters or synthetic parameters. |
| check_pos = node->token_pos(); |
| - ASSERT(Token::IsDebugPause(check_pos)); |
| + ASSERT(check_pos.IsDebugPause()); |
| } |
| AddInstruction(new(Z) DebugStepCheckInstr(check_pos, |
| RawPcDescriptors::kRuntimeCall)); |
| @@ -4429,7 +4434,7 @@ StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall( |
| ArgumentListNode* method_arguments, |
| bool save_last_arg, |
| bool is_super_invocation) { |
| - intptr_t args_pos = method_arguments->token_pos(); |
| + TokenDescriptor args_pos = method_arguments->token_pos(); |
| LocalVariable* temp = NULL; |
| if (save_last_arg) { |
| temp = owner()->parsed_function().expression_temp_var(); |
| @@ -4456,7 +4461,7 @@ StaticCallInstr* EffectGraphVisitor::BuildStaticNoSuchMethodCall( |
| StaticCallInstr* EffectGraphVisitor::BuildThrowNoSuchMethodError( |
| - intptr_t token_pos, |
| + TokenDescriptor token_pos, |
| const Class& function_class, |
| const String& function_name, |
| ArgumentListNode* function_arguments, |