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

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

Issue 789643006: Introduce is_debuggable state bit on function objects (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 11 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 | « runtime/vm/object.cc ('k') | runtime/vm/regexp.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/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
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
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
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
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
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(&params, getter); 3806 AddFormalParamsToFunction(&params, 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(&params, setter); 3828 AddFormalParamsToFunction(&params, 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
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(&params, getter); 4430 AddFormalParamsToFunction(&params, 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
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
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
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
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(&params, func); 5282 AddFormalParamsToFunction(&params, 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
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(&params, func); 5425 AddFormalParamsToFunction(&params, 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
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
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/regexp.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698