| OLD | NEW |
| 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/parser.h" | 5 #include "vm/parser.h" |
| 6 | 6 |
| 7 #include "lib/invocation_mirror.h" | 7 #include "lib/invocation_mirror.h" |
| 8 #include "platform/utils.h" | 8 #include "platform/utils.h" |
| 9 #include "vm/ast_transformer.h" | 9 #include "vm/ast_transformer.h" |
| 10 #include "vm/bootstrap.h" | 10 #include "vm/bootstrap.h" |
| (...skipping 926 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 937 const Function& fake_function = Function::ZoneHandle(Function::New( | 937 const Function& fake_function = Function::ZoneHandle(Function::New( |
| 938 Symbols::At(), | 938 Symbols::At(), |
| 939 RawFunction::kRegularFunction, | 939 RawFunction::kRegularFunction, |
| 940 true, // is_static | 940 true, // is_static |
| 941 false, // is_const | 941 false, // is_const |
| 942 false, // is_abstract | 942 false, // is_abstract |
| 943 false, // is_external | 943 false, // is_external |
| 944 false, // is_native | 944 false, // is_native |
| 945 cls, | 945 cls, |
| 946 token_pos)); | 946 token_pos)); |
| 947 fake_function.set_is_debuggable(false); |
| 947 ParsedFunction* parsed_function = | 948 ParsedFunction* parsed_function = |
| 948 new ParsedFunction(isolate, fake_function); | 949 new ParsedFunction(isolate, fake_function); |
| 949 Parser parser(script, parsed_function, token_pos); | 950 Parser parser(script, parsed_function, token_pos); |
| 950 parser.set_current_class(cls); | 951 parser.set_current_class(cls); |
| 951 | 952 |
| 952 RawObject* metadata = parser.EvaluateMetadata(); | 953 RawObject* metadata = parser.EvaluateMetadata(); |
| 953 return metadata; | 954 return metadata; |
| 954 } else { | 955 } else { |
| 955 Error& error = Error::Handle(isolate); | 956 Error& error = Error::Handle(isolate); |
| 956 error = isolate->object_store()->sticky_error(); | 957 error = isolate->object_store()->sticky_error(); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 false, // !external | 1076 false, // !external |
| 1076 false, // !native | 1077 false, // !native |
| 1077 Class::Handle(field.owner()), | 1078 Class::Handle(field.owner()), |
| 1078 field.token_pos())); | 1079 field.token_pos())); |
| 1079 initializer.set_result_type(AbstractType::Handle(isolate, field.type())); | 1080 initializer.set_result_type(AbstractType::Handle(isolate, field.type())); |
| 1080 // Static initializer functions are hidden from the user. | 1081 // Static initializer functions are hidden from the user. |
| 1081 // Since they are only executed once, we avoid optimizing | 1082 // Since they are only executed once, we avoid optimizing |
| 1082 // and inlining them. After the field is initialized, the | 1083 // and inlining them. After the field is initialized, the |
| 1083 // compiler can eliminate the call to the static initializer. | 1084 // compiler can eliminate the call to the static initializer. |
| 1084 initializer.set_is_visible(false); | 1085 initializer.set_is_visible(false); |
| 1086 initializer.set_is_debuggable(false); |
| 1085 initializer.SetIsOptimizable(false); | 1087 initializer.SetIsOptimizable(false); |
| 1086 initializer.set_is_inlinable(false); | 1088 initializer.set_is_inlinable(false); |
| 1087 | 1089 |
| 1088 ParsedFunction* parsed_function = new ParsedFunction(isolate, initializer); | 1090 ParsedFunction* parsed_function = new ParsedFunction(isolate, initializer); |
| 1089 Parser parser(script, parsed_function, field.token_pos()); | 1091 Parser parser(script, parsed_function, field.token_pos()); |
| 1090 | 1092 |
| 1091 SequenceNode* body = parser.ParseStaticInitializer(); | 1093 SequenceNode* body = parser.ParseStaticInitializer(); |
| 1092 parsed_function->SetNodeSequence(body); | 1094 parsed_function->SetNodeSequence(body); |
| 1093 parsed_function->set_default_parameter_values(Object::null_array()); | 1095 parsed_function->set_default_parameter_values(Object::null_array()); |
| 1094 | 1096 |
| (...skipping 545 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1640 Function::New(*parameter.name, | 1642 Function::New(*parameter.name, |
| 1641 RawFunction::kSignatureFunction, | 1643 RawFunction::kSignatureFunction, |
| 1642 /* is_static = */ false, | 1644 /* is_static = */ false, |
| 1643 /* is_const = */ false, | 1645 /* is_const = */ false, |
| 1644 /* is_abstract = */ false, | 1646 /* is_abstract = */ false, |
| 1645 /* is_external = */ false, | 1647 /* is_external = */ false, |
| 1646 /* is_native = */ false, | 1648 /* is_native = */ false, |
| 1647 current_class(), | 1649 current_class(), |
| 1648 parameter.name_pos)); | 1650 parameter.name_pos)); |
| 1649 signature_function.set_result_type(result_type); | 1651 signature_function.set_result_type(result_type); |
| 1652 signature_function.set_is_debuggable(false); |
| 1650 AddFormalParamsToFunction(&func_params, signature_function); | 1653 AddFormalParamsToFunction(&func_params, signature_function); |
| 1651 const String& signature = String::Handle(I, | 1654 const String& signature = String::Handle(I, |
| 1652 signature_function.Signature()); | 1655 signature_function.Signature()); |
| 1653 // Lookup the signature class, i.e. the class whose name is the signature. | 1656 // Lookup the signature class, i.e. the class whose name is the signature. |
| 1654 // We only lookup in the current library, but not in its imports, and only | 1657 // We only lookup in the current library, but not in its imports, and only |
| 1655 // create a new canonical signature class if it does not exist yet. | 1658 // create a new canonical signature class if it does not exist yet. |
| 1656 Class& signature_class = Class::ZoneHandle(I, | 1659 Class& signature_class = Class::ZoneHandle(I, |
| 1657 library_.LookupLocalClass(signature)); | 1660 library_.LookupLocalClass(signature)); |
| 1658 if (signature_class.IsNull()) { | 1661 if (signature_class.IsNull()) { |
| 1659 signature_class = Class::NewSignatureClass(signature, | 1662 signature_class = Class::NewSignatureClass(signature, |
| (...skipping 1462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3122 } | 3125 } |
| 3123 } | 3126 } |
| 3124 | 3127 |
| 3125 RawFunction::AsyncModifier func_modifier = ParseFunctionModifier(); | 3128 RawFunction::AsyncModifier func_modifier = ParseFunctionModifier(); |
| 3126 func.set_modifier(func_modifier); | 3129 func.set_modifier(func_modifier); |
| 3127 | 3130 |
| 3128 OpenBlock(); // Open a nested scope for the outermost function block. | 3131 OpenBlock(); // Open a nested scope for the outermost function block. |
| 3129 | 3132 |
| 3130 Function& async_closure = Function::ZoneHandle(I); | 3133 Function& async_closure = Function::ZoneHandle(I); |
| 3131 if (func.IsAsyncFunction() && !func.is_async_closure()) { | 3134 if (func.IsAsyncFunction() && !func.is_async_closure()) { |
| 3135 // The code of an async function is synthesized. Disable debugging. |
| 3136 func.set_is_debuggable(false); |
| 3132 async_closure = OpenAsyncFunction(func.token_pos()); | 3137 async_closure = OpenAsyncFunction(func.token_pos()); |
| 3133 } else if (func.is_async_closure()) { | 3138 } else if (func.is_async_closure()) { |
| 3139 // The closure containing the body of an async function is debuggable. |
| 3140 ASSERT(func.is_debuggable()); |
| 3134 OpenAsyncClosure(); | 3141 OpenAsyncClosure(); |
| 3135 } | 3142 } |
| 3136 | 3143 |
| 3137 BoolScope allow_await(&this->await_is_keyword_, | 3144 BoolScope allow_await(&this->await_is_keyword_, |
| 3138 func.IsAsyncFunction() || func.is_async_closure()); | 3145 func.IsAsyncFunction() || func.is_async_closure()); |
| 3139 intptr_t end_token_pos = 0; | 3146 intptr_t end_token_pos = 0; |
| 3140 if (CurrentToken() == Token::kLBRACE) { | 3147 if (CurrentToken() == Token::kLBRACE) { |
| 3141 ConsumeToken(); | 3148 ConsumeToken(); |
| 3142 if (String::Handle(I, func.name()).Equals(Symbols::EqualOperator())) { | 3149 if (String::Handle(I, func.name()).Equals(Symbols::EqualOperator())) { |
| 3143 const Class& owner = Class::Handle(I, func.Owner()); | 3150 const Class& owner = Class::Handle(I, func.Owner()); |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3767 getter = Function::New(getter_name, | 3774 getter = Function::New(getter_name, |
| 3768 RawFunction::kImplicitStaticFinalGetter, | 3775 RawFunction::kImplicitStaticFinalGetter, |
| 3769 field->has_static, | 3776 field->has_static, |
| 3770 field->has_const, | 3777 field->has_const, |
| 3771 /* is_abstract = */ false, | 3778 /* is_abstract = */ false, |
| 3772 /* is_external = */ false, | 3779 /* is_external = */ false, |
| 3773 /* is_native = */ false, | 3780 /* is_native = */ false, |
| 3774 current_class(), | 3781 current_class(), |
| 3775 field->name_pos); | 3782 field->name_pos); |
| 3776 getter.set_result_type(*field->type); | 3783 getter.set_result_type(*field->type); |
| 3784 getter.set_is_debuggable(false); |
| 3777 members->AddFunction(getter); | 3785 members->AddFunction(getter); |
| 3778 } | 3786 } |
| 3779 } | 3787 } |
| 3780 | 3788 |
| 3781 // For instance fields, we create implicit getter and setter methods. | 3789 // For instance fields, we create implicit getter and setter methods. |
| 3782 if (!field->has_static) { | 3790 if (!field->has_static) { |
| 3783 String& getter_name = String::Handle(I, | 3791 String& getter_name = String::Handle(I, |
| 3784 Field::GetterSymbol(*field->name)); | 3792 Field::GetterSymbol(*field->name)); |
| 3785 getter = Function::New(getter_name, RawFunction::kImplicitGetter, | 3793 getter = Function::New(getter_name, RawFunction::kImplicitGetter, |
| 3786 field->has_static, | 3794 field->has_static, |
| 3787 field->has_final, | 3795 field->has_final, |
| 3788 /* is_abstract = */ false, | 3796 /* is_abstract = */ false, |
| 3789 /* is_external = */ false, | 3797 /* is_external = */ false, |
| 3790 /* is_native = */ false, | 3798 /* is_native = */ false, |
| 3791 current_class(), | 3799 current_class(), |
| 3792 field->name_pos); | 3800 field->name_pos); |
| 3793 ParamList params; | 3801 ParamList params; |
| 3794 ASSERT(current_class().raw() == getter.Owner()); | 3802 ASSERT(current_class().raw() == getter.Owner()); |
| 3795 params.AddReceiver(ReceiverType(current_class()), field->name_pos); | 3803 params.AddReceiver(ReceiverType(current_class()), field->name_pos); |
| 3796 getter.set_result_type(*field->type); | 3804 getter.set_result_type(*field->type); |
| 3805 getter.set_is_debuggable(false); |
| 3797 AddFormalParamsToFunction(¶ms, getter); | 3806 AddFormalParamsToFunction(¶ms, getter); |
| 3798 members->AddFunction(getter); | 3807 members->AddFunction(getter); |
| 3799 if (!field->has_final) { | 3808 if (!field->has_final) { |
| 3800 // Build a setter accessor for non-const fields. | 3809 // Build a setter accessor for non-const fields. |
| 3801 String& setter_name = String::Handle(I, | 3810 String& setter_name = String::Handle(I, |
| 3802 Field::SetterSymbol(*field->name)); | 3811 Field::SetterSymbol(*field->name)); |
| 3803 setter = Function::New(setter_name, RawFunction::kImplicitSetter, | 3812 setter = Function::New(setter_name, RawFunction::kImplicitSetter, |
| 3804 field->has_static, | 3813 field->has_static, |
| 3805 field->has_final, | 3814 field->has_final, |
| 3806 /* is_abstract = */ false, | 3815 /* is_abstract = */ false, |
| 3807 /* is_external = */ false, | 3816 /* is_external = */ false, |
| 3808 /* is_native = */ false, | 3817 /* is_native = */ false, |
| 3809 current_class(), | 3818 current_class(), |
| 3810 field->name_pos); | 3819 field->name_pos); |
| 3811 ParamList params; | 3820 ParamList params; |
| 3812 ASSERT(current_class().raw() == setter.Owner()); | 3821 ASSERT(current_class().raw() == setter.Owner()); |
| 3813 params.AddReceiver(ReceiverType(current_class()), field->name_pos); | 3822 params.AddReceiver(ReceiverType(current_class()), field->name_pos); |
| 3814 params.AddFinalParameter(TokenPos(), | 3823 params.AddFinalParameter(TokenPos(), |
| 3815 &Symbols::Value(), | 3824 &Symbols::Value(), |
| 3816 field->type); | 3825 field->type); |
| 3817 setter.set_result_type(Type::Handle(I, Type::VoidType())); | 3826 setter.set_result_type(Type::Handle(I, Type::VoidType())); |
| 3827 setter.set_is_debuggable(false); |
| 3818 AddFormalParamsToFunction(¶ms, setter); | 3828 AddFormalParamsToFunction(¶ms, setter); |
| 3819 members->AddFunction(setter); | 3829 members->AddFunction(setter); |
| 3820 } | 3830 } |
| 3821 } | 3831 } |
| 3822 | 3832 |
| 3823 if (CurrentToken() != Token::kCOMMA) { | 3833 if (CurrentToken() != Token::kCOMMA) { |
| 3824 break; | 3834 break; |
| 3825 } | 3835 } |
| 3826 ConsumeToken(); | 3836 ConsumeToken(); |
| 3827 field->name_pos = this->TokenPos(); | 3837 field->name_pos = this->TokenPos(); |
| (...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4407 getter = Function::New(getter_name, | 4417 getter = Function::New(getter_name, |
| 4408 RawFunction::kImplicitGetter, | 4418 RawFunction::kImplicitGetter, |
| 4409 /* is_static = */ false, | 4419 /* is_static = */ false, |
| 4410 /* is_const = */ true, | 4420 /* is_const = */ true, |
| 4411 /* is_abstract = */ false, | 4421 /* is_abstract = */ false, |
| 4412 /* is_external = */ false, | 4422 /* is_external = */ false, |
| 4413 /* is_native = */ false, | 4423 /* is_native = */ false, |
| 4414 cls, | 4424 cls, |
| 4415 cls.token_pos()); | 4425 cls.token_pos()); |
| 4416 getter.set_result_type(int_type); | 4426 getter.set_result_type(int_type); |
| 4427 getter.set_is_debuggable(false); |
| 4417 ParamList params; | 4428 ParamList params; |
| 4418 params.AddReceiver(&dynamic_type, cls.token_pos()); | 4429 params.AddReceiver(&dynamic_type, cls.token_pos()); |
| 4419 AddFormalParamsToFunction(¶ms, getter); | 4430 AddFormalParamsToFunction(¶ms, getter); |
| 4420 enum_members.AddFunction(getter); | 4431 enum_members.AddFunction(getter); |
| 4421 | 4432 |
| 4422 GrowableObjectArray& enum_names = GrowableObjectArray::Handle(I, | 4433 GrowableObjectArray& enum_names = GrowableObjectArray::Handle(I, |
| 4423 GrowableObjectArray::New(8, Heap::kOld)); | 4434 GrowableObjectArray::New(8, Heap::kOld)); |
| 4424 const String& name_prefix = | 4435 const String& name_prefix = |
| 4425 String::Handle(String::Concat(enum_name, Symbols::Dot())); | 4436 String::Handle(String::Concat(enum_name, Symbols::Dot())); |
| 4426 | 4437 |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4553 Function::New(ctor_name, | 4564 Function::New(ctor_name, |
| 4554 RawFunction::kConstructor, | 4565 RawFunction::kConstructor, |
| 4555 /* is_static = */ false, | 4566 /* is_static = */ false, |
| 4556 /* is_const = */ false, | 4567 /* is_const = */ false, |
| 4557 /* is_abstract = */ false, | 4568 /* is_abstract = */ false, |
| 4558 /* is_external = */ false, | 4569 /* is_external = */ false, |
| 4559 /* is_native = */ false, | 4570 /* is_native = */ false, |
| 4560 cls, | 4571 cls, |
| 4561 cls.token_pos())); | 4572 cls.token_pos())); |
| 4562 ctor.set_end_token_pos(ctor.token_pos()); | 4573 ctor.set_end_token_pos(ctor.token_pos()); |
| 4574 ctor.set_is_debuggable(false); |
| 4563 if (library_.is_dart_scheme() && library_.IsPrivate(ctor_name)) { | 4575 if (library_.is_dart_scheme() && library_.IsPrivate(ctor_name)) { |
| 4564 ctor.set_is_visible(false); | 4576 ctor.set_is_visible(false); |
| 4565 } | 4577 } |
| 4566 | 4578 |
| 4567 ParamList params; | 4579 ParamList params; |
| 4568 // Add implicit 'this' parameter. | 4580 // Add implicit 'this' parameter. |
| 4569 const AbstractType* receiver_type = ReceiverType(cls); | 4581 const AbstractType* receiver_type = ReceiverType(cls); |
| 4570 params.AddReceiver(receiver_type, cls.token_pos()); | 4582 params.AddReceiver(receiver_type, cls.token_pos()); |
| 4571 // Add implicit parameter for construction phase. | 4583 // Add implicit parameter for construction phase. |
| 4572 params.AddFinalParameter(cls.token_pos(), | 4584 params.AddFinalParameter(cls.token_pos(), |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4789 Function::New(*alias_name, | 4801 Function::New(*alias_name, |
| 4790 RawFunction::kSignatureFunction, | 4802 RawFunction::kSignatureFunction, |
| 4791 /* is_static = */ false, | 4803 /* is_static = */ false, |
| 4792 /* is_const = */ false, | 4804 /* is_const = */ false, |
| 4793 /* is_abstract = */ false, | 4805 /* is_abstract = */ false, |
| 4794 /* is_external = */ false, | 4806 /* is_external = */ false, |
| 4795 /* is_native = */ false, | 4807 /* is_native = */ false, |
| 4796 function_type_alias, | 4808 function_type_alias, |
| 4797 alias_name_pos)); | 4809 alias_name_pos)); |
| 4798 signature_function.set_result_type(result_type); | 4810 signature_function.set_result_type(result_type); |
| 4811 signature_function.set_is_debuggable(false); |
| 4799 AddFormalParamsToFunction(&func_params, signature_function); | 4812 AddFormalParamsToFunction(&func_params, signature_function); |
| 4800 | 4813 |
| 4801 // Patch the signature function in the signature class. | 4814 // Patch the signature function in the signature class. |
| 4802 function_type_alias.PatchSignatureFunction(signature_function); | 4815 function_type_alias.PatchSignatureFunction(signature_function); |
| 4803 | 4816 |
| 4804 const String& signature = String::Handle(I, | 4817 const String& signature = String::Handle(I, |
| 4805 signature_function.Signature()); | 4818 signature_function.Signature()); |
| 4806 if (FLAG_trace_parser) { | 4819 if (FLAG_trace_parser) { |
| 4807 OS::Print("TopLevel parsing function type alias '%s'\n", | 4820 OS::Print("TopLevel parsing function type alias '%s'\n", |
| 4808 signature.ToCString()); | 4821 signature.ToCString()); |
| (...skipping 321 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5130 getter = Function::New(getter_name, | 5143 getter = Function::New(getter_name, |
| 5131 RawFunction::kImplicitStaticFinalGetter, | 5144 RawFunction::kImplicitStaticFinalGetter, |
| 5132 is_static, | 5145 is_static, |
| 5133 is_const, | 5146 is_const, |
| 5134 /* is_abstract = */ false, | 5147 /* is_abstract = */ false, |
| 5135 /* is_external = */ false, | 5148 /* is_external = */ false, |
| 5136 /* is_native = */ false, | 5149 /* is_native = */ false, |
| 5137 current_class(), | 5150 current_class(), |
| 5138 name_pos); | 5151 name_pos); |
| 5139 getter.set_result_type(type); | 5152 getter.set_result_type(type); |
| 5153 getter.set_is_debuggable(false); |
| 5140 top_level->functions.Add(getter); | 5154 top_level->functions.Add(getter); |
| 5141 } | 5155 } |
| 5142 } else if (is_final) { | 5156 } else if (is_final) { |
| 5143 ReportError(name_pos, "missing initializer for final or const variable"); | 5157 ReportError(name_pos, "missing initializer for final or const variable"); |
| 5144 } | 5158 } |
| 5145 | 5159 |
| 5146 if (CurrentToken() == Token::kCOMMA) { | 5160 if (CurrentToken() == Token::kCOMMA) { |
| 5147 ConsumeToken(); | 5161 ConsumeToken(); |
| 5148 } else if (CurrentToken() == Token::kSEMICOLON) { | 5162 } else if (CurrentToken() == Token::kSEMICOLON) { |
| 5149 ConsumeToken(); | 5163 ConsumeToken(); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5252 is_static, | 5266 is_static, |
| 5253 /* is_const = */ false, | 5267 /* is_const = */ false, |
| 5254 /* is_abstract = */ false, | 5268 /* is_abstract = */ false, |
| 5255 is_external, | 5269 is_external, |
| 5256 is_native, | 5270 is_native, |
| 5257 current_class(), | 5271 current_class(), |
| 5258 decl_begin_pos)); | 5272 decl_begin_pos)); |
| 5259 func.set_result_type(result_type); | 5273 func.set_result_type(result_type); |
| 5260 func.set_end_token_pos(function_end_pos); | 5274 func.set_end_token_pos(function_end_pos); |
| 5261 func.set_modifier(func_modifier); | 5275 func.set_modifier(func_modifier); |
| 5262 if (is_native && library_.is_dart_scheme() && library_.IsPrivate(func_name)) { | 5276 if (is_native) { |
| 5263 func.set_is_visible(false); | 5277 func.set_is_debuggable(false); |
| 5278 if (library_.is_dart_scheme() && library_.IsPrivate(func_name)) { |
| 5279 func.set_is_visible(false); |
| 5280 } |
| 5264 } | 5281 } |
| 5265 AddFormalParamsToFunction(¶ms, func); | 5282 AddFormalParamsToFunction(¶ms, func); |
| 5266 top_level->functions.Add(func); | 5283 top_level->functions.Add(func); |
| 5267 if (!is_patch) { | 5284 if (!is_patch) { |
| 5268 library_.AddObject(func, func_name); | 5285 library_.AddObject(func, func_name); |
| 5269 } else { | 5286 } else { |
| 5270 library_.ReplaceObject(func, func_name); | 5287 library_.ReplaceObject(func, func_name); |
| 5271 } | 5288 } |
| 5272 if (metadata_pos >= 0) { | 5289 if (metadata_pos >= 0) { |
| 5273 library_.AddFunctionMetadata(func, metadata_pos); | 5290 library_.AddFunctionMetadata(func, metadata_pos); |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5392 is_static, | 5409 is_static, |
| 5393 /* is_const = */ false, | 5410 /* is_const = */ false, |
| 5394 /* is_abstract = */ false, | 5411 /* is_abstract = */ false, |
| 5395 is_external, | 5412 is_external, |
| 5396 is_native, | 5413 is_native, |
| 5397 current_class(), | 5414 current_class(), |
| 5398 decl_begin_pos)); | 5415 decl_begin_pos)); |
| 5399 func.set_result_type(result_type); | 5416 func.set_result_type(result_type); |
| 5400 func.set_end_token_pos(accessor_end_pos); | 5417 func.set_end_token_pos(accessor_end_pos); |
| 5401 func.set_modifier(func_modifier); | 5418 func.set_modifier(func_modifier); |
| 5402 if (is_native && library_.is_dart_scheme() && | 5419 if (is_native) { |
| 5403 library_.IsPrivate(accessor_name)) { | 5420 func.set_is_debuggable(false); |
| 5404 func.set_is_visible(false); | 5421 if (library_.is_dart_scheme() && library_.IsPrivate(accessor_name)) { |
| 5422 func.set_is_visible(false); |
| 5423 } |
| 5405 } | 5424 } |
| 5406 AddFormalParamsToFunction(¶ms, func); | 5425 AddFormalParamsToFunction(¶ms, func); |
| 5407 top_level->functions.Add(func); | 5426 top_level->functions.Add(func); |
| 5408 if (!is_patch) { | 5427 if (!is_patch) { |
| 5409 library_.AddObject(func, accessor_name); | 5428 library_.AddObject(func, accessor_name); |
| 5410 } else { | 5429 } else { |
| 5411 library_.ReplaceObject(func, accessor_name); | 5430 library_.ReplaceObject(func, accessor_name); |
| 5412 } | 5431 } |
| 5413 if (metadata_pos >= 0) { | 5432 if (metadata_pos >= 0) { |
| 5414 library_.AddFunctionMetadata(func, metadata_pos); | 5433 library_.AddFunctionMetadata(func, metadata_pos); |
| (...skipping 6786 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12201 void Parser::SkipQualIdent() { | 12220 void Parser::SkipQualIdent() { |
| 12202 ASSERT(IsIdentifier()); | 12221 ASSERT(IsIdentifier()); |
| 12203 ConsumeToken(); | 12222 ConsumeToken(); |
| 12204 if (CurrentToken() == Token::kPERIOD) { | 12223 if (CurrentToken() == Token::kPERIOD) { |
| 12205 ConsumeToken(); // Consume the kPERIOD token. | 12224 ConsumeToken(); // Consume the kPERIOD token. |
| 12206 ExpectIdentifier("identifier expected after '.'"); | 12225 ExpectIdentifier("identifier expected after '.'"); |
| 12207 } | 12226 } |
| 12208 } | 12227 } |
| 12209 | 12228 |
| 12210 } // namespace dart | 12229 } // namespace dart |
| OLD | NEW |