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

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

Issue 1055703005: Cleanup obsolete setter code (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 8 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/ast_transformer.cc ('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 (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 2029 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 function_name, 2040 function_name,
2041 arguments, 2041 arguments,
2042 kResolveGetter, 2042 kResolveGetter,
2043 &is_no_such_method)); 2043 &is_no_such_method));
2044 if (super_function.IsGetterFunction() || 2044 if (super_function.IsGetterFunction() ||
2045 super_function.IsImplicitGetterFunction()) { 2045 super_function.IsImplicitGetterFunction()) {
2046 const Class& super_class = 2046 const Class& super_class =
2047 Class::ZoneHandle(Z, current_class().SuperClass()); 2047 Class::ZoneHandle(Z, current_class().SuperClass());
2048 AstNode* closure = new StaticGetterNode(supercall_pos, 2048 AstNode* closure = new StaticGetterNode(supercall_pos,
2049 LoadReceiver(supercall_pos), 2049 LoadReceiver(supercall_pos),
2050 /* is_super_getter */ true,
2051 super_class, 2050 super_class,
2052 function_name); 2051 function_name);
2053 // 'this' is not passed as parameter to the closure. 2052 // 'this' is not passed as parameter to the closure.
2054 ArgumentListNode* closure_arguments = new ArgumentListNode(supercall_pos); 2053 ArgumentListNode* closure_arguments = new ArgumentListNode(supercall_pos);
2055 for (int i = 1; i < arguments->length(); i++) { 2054 for (int i = 1; i < arguments->length(); i++) {
2056 closure_arguments->Add(arguments->NodeAt(i)); 2055 closure_arguments->Add(arguments->NodeAt(i));
2057 } 2056 }
2058 return BuildClosureCall(supercall_pos, closure, closure_arguments); 2057 return BuildClosureCall(supercall_pos, closure, closure_arguments);
2059 } 2058 }
2060 if (is_no_such_method) { 2059 if (is_no_such_method) {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
2213 // In case CreateAssignmentNode is called later on this 2212 // In case CreateAssignmentNode is called later on this
2214 // CreateImplicitClosureNode, it will be replaced by a StaticSetterNode. 2213 // CreateImplicitClosureNode, it will be replaced by a StaticSetterNode.
2215 return CreateImplicitClosureNode(super_function, 2214 return CreateImplicitClosureNode(super_function,
2216 field_pos, 2215 field_pos,
2217 implicit_argument); 2216 implicit_argument);
2218 } 2217 }
2219 // No function or field exists of the specified field_name. 2218 // No function or field exists of the specified field_name.
2220 // Emit a StaticGetterNode anyway, so that noSuchMethod gets called. 2219 // Emit a StaticGetterNode anyway, so that noSuchMethod gets called.
2221 } 2220 }
2222 } 2221 }
2223 return new StaticGetterNode( 2222 return new(Z) StaticGetterNode(
2224 field_pos, implicit_argument, true, super_class, field_name); 2223 field_pos, implicit_argument, super_class, field_name);
2225 } 2224 }
2226 2225
2227 2226
2228 void Parser::GenerateSuperConstructorCall(const Class& cls, 2227 void Parser::GenerateSuperConstructorCall(const Class& cls,
2229 intptr_t supercall_pos, 2228 intptr_t supercall_pos,
2230 LocalVariable* receiver, 2229 LocalVariable* receiver,
2231 AstNode* phase_parameter, 2230 AstNode* phase_parameter,
2232 ArgumentListNode* forwarding_args) { 2231 ArgumentListNode* forwarding_args) {
2233 const Class& super_class = Class::Handle(Z, cls.SuperClass()); 2232 const Class& super_class = Class::Handle(Z, cls.SuperClass());
2234 // Omit the implicit super() if there is no super class (i.e. 2233 // Omit the implicit super() if there is no super class (i.e.
(...skipping 8565 matching lines...) Expand 10 before | Expand all | Expand 10 after
10800 const int kNumArguments = 0; // no arguments. 10799 const int kNumArguments = 0; // no arguments.
10801 func = Resolver::ResolveStatic(cls, 10800 func = Resolver::ResolveStatic(cls,
10802 getter_name, 10801 getter_name,
10803 kNumArguments, 10802 kNumArguments,
10804 Object::empty_array()); 10803 Object::empty_array());
10805 if (!func.IsNull()) { 10804 if (!func.IsNull()) {
10806 ASSERT(func.kind() != RawFunction::kImplicitStaticFinalGetter); 10805 ASSERT(func.kind() != RawFunction::kImplicitStaticFinalGetter);
10807 closure = new(Z) StaticGetterNode( 10806 closure = new(Z) StaticGetterNode(
10808 call_pos, 10807 call_pos,
10809 NULL, 10808 NULL,
10810 false,
10811 Class::ZoneHandle(Z, cls.raw()), 10809 Class::ZoneHandle(Z, cls.raw()),
10812 func_name); 10810 func_name);
10813 return BuildClosureCall(call_pos, closure, arguments); 10811 return BuildClosureCall(call_pos, closure, arguments);
10814 } 10812 }
10815 } else { 10813 } else {
10816 closure = GenerateStaticFieldLookup(field, call_pos); 10814 closure = GenerateStaticFieldLookup(field, call_pos);
10817 return BuildClosureCall(call_pos, closure, arguments); 10815 return BuildClosureCall(call_pos, closure, arguments);
10818 } 10816 }
10819 // Could not resolve static method: throw a NoSuchMethodError. 10817 // Could not resolve static method: throw a NoSuchMethodError.
10820 return ThrowNoSuchMethodError(ident_pos, 10818 return ThrowNoSuchMethodError(ident_pos,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
10880 const Function& getter = Function::Handle(Z, 10878 const Function& getter = Function::Handle(Z,
10881 field_owner.LookupStaticFunction(getter_name)); 10879 field_owner.LookupStaticFunction(getter_name));
10882 // Never load field directly if there is a getter (deterministic AST). 10880 // Never load field directly if there is a getter (deterministic AST).
10883 if (getter.IsNull() || field.is_const()) { 10881 if (getter.IsNull() || field.is_const()) {
10884 return new(Z) LoadStaticFieldNode( 10882 return new(Z) LoadStaticFieldNode(
10885 ident_pos, Field::ZoneHandle(Z, field.raw())); 10883 ident_pos, Field::ZoneHandle(Z, field.raw()));
10886 } else { 10884 } else {
10887 ASSERT(getter.kind() == RawFunction::kImplicitStaticFinalGetter); 10885 ASSERT(getter.kind() == RawFunction::kImplicitStaticFinalGetter);
10888 return new(Z) StaticGetterNode(ident_pos, 10886 return new(Z) StaticGetterNode(ident_pos,
10889 NULL, // Receiver. 10887 NULL, // Receiver.
10890 false, // is_super_getter.
10891 field_owner, 10888 field_owner,
10892 field_name); 10889 field_name);
10893 } 10890 }
10894 } 10891 }
10895 10892
10896 10893
10897 AstNode* Parser::ParseStaticFieldAccess(const Class& cls, 10894 AstNode* Parser::ParseStaticFieldAccess(const Class& cls,
10898 const String& field_name, 10895 const String& field_name,
10899 intptr_t ident_pos, 10896 intptr_t ident_pos,
10900 bool consume_cascades) { 10897 bool consume_cascades) {
(...skipping 17 matching lines...) Expand all
10918 if (!func.IsNull()) { 10915 if (!func.IsNull()) {
10919 access = CreateImplicitClosureNode(func, ident_pos, NULL); 10916 access = CreateImplicitClosureNode(func, ident_pos, NULL);
10920 } else { 10917 } else {
10921 // No function to closurize found found. 10918 // No function to closurize found found.
10922 // This field access may turn out to be a call to the setter. 10919 // This field access may turn out to be a call to the setter.
10923 // Create a getter call, which may later be turned into 10920 // Create a getter call, which may later be turned into
10924 // a setter call, or else the backend will generate 10921 // a setter call, or else the backend will generate
10925 // a throw NoSuchMethodError(). 10922 // a throw NoSuchMethodError().
10926 access = new(Z) StaticGetterNode(ident_pos, 10923 access = new(Z) StaticGetterNode(ident_pos,
10927 NULL, 10924 NULL,
10928 false,
10929 Class::ZoneHandle(Z, cls.raw()), 10925 Class::ZoneHandle(Z, cls.raw()),
10930 field_name); 10926 field_name);
10931 } 10927 }
10932 } else { 10928 } else {
10933 ASSERT(func.kind() != RawFunction::kImplicitStaticFinalGetter); 10929 ASSERT(func.kind() != RawFunction::kImplicitStaticFinalGetter);
10934 access = new(Z) StaticGetterNode( 10930 access = new(Z) StaticGetterNode(
10935 ident_pos, NULL, false, Class::ZoneHandle(Z, cls.raw()), field_name); 10931 ident_pos, NULL, Class::ZoneHandle(Z, cls.raw()), field_name);
10936 } 10932 }
10937 } else { 10933 } else {
10938 access = GenerateStaticFieldLookup(field, ident_pos); 10934 access = GenerateStaticFieldLookup(field, ident_pos);
10939 } 10935 }
10940 return access; 10936 return access;
10941 } 10937 }
10942 10938
10943 10939
10944 AstNode* Parser::LoadFieldIfUnresolved(AstNode* node) { 10940 AstNode* Parser::LoadFieldIfUnresolved(AstNode* node) {
10945 if (!node->IsPrimaryNode()) { 10941 if (!node->IsPrimaryNode()) {
10946 return node; 10942 return node;
10947 } 10943 }
10948 PrimaryNode* primary = node->AsPrimaryNode(); 10944 PrimaryNode* primary = node->AsPrimaryNode();
10949 if (primary->primary().IsString()) { 10945 if (primary->primary().IsString()) {
10950 if (primary->IsSuper()) { 10946 if (primary->IsSuper()) {
10951 return primary; 10947 return primary;
10952 } 10948 }
10953 // In a static method, evaluation of an unresolved identifier causes a 10949 // In a static method, evaluation of an unresolved identifier causes a
10954 // NoSuchMethodError to be thrown. 10950 // NoSuchMethodError to be thrown.
10955 // In an instance method, we convert this into a getter call 10951 // In an instance method, we convert this into a getter call
10956 // for a field (which may be defined in a subclass.) 10952 // for a field (which may be defined in a subclass.)
10957 String& name = String::CheckedZoneHandle(primary->primary().raw()); 10953 String& name = String::CheckedZoneHandle(primary->primary().raw());
10958 if (current_function().is_static() || 10954 if (current_function().is_static() ||
10959 current_function().IsInFactoryScope()) { 10955 current_function().IsInFactoryScope()) {
10960 StaticGetterNode* getter = new(Z) StaticGetterNode( 10956 StaticGetterNode* getter = new(Z) StaticGetterNode(
10961 primary->token_pos(), 10957 primary->token_pos(),
10962 NULL, // No receiver. 10958 NULL, // No receiver.
10963 false, // Not a super getter.
10964 Class::ZoneHandle(Z, current_class().raw()), 10959 Class::ZoneHandle(Z, current_class().raw()),
10965 name); 10960 name);
10966 getter->set_is_deferred(primary->is_deferred_reference()); 10961 getter->set_is_deferred(primary->is_deferred_reference());
10967 return getter; 10962 return getter;
10968 } else { 10963 } else {
10969 AstNode* receiver = LoadReceiver(primary->token_pos()); 10964 AstNode* receiver = LoadReceiver(primary->token_pos());
10970 return CallGetter(node->token_pos(), receiver, name); 10965 return CallGetter(node->token_pos(), receiver, name);
10971 } 10966 }
10972 } 10967 }
10973 return primary; 10968 return primary;
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
11473 const Function& getter = Function::Handle(Z, 11468 const Function& getter = Function::Handle(Z,
11474 field_owner.LookupStaticFunction(getter_name)); 11469 field_owner.LookupStaticFunction(getter_name));
11475 const Instance& value = Instance::Handle(Z, field.value()); 11470 const Instance& value = Instance::Handle(Z, field.value());
11476 if (value.raw() == Object::transition_sentinel().raw()) { 11471 if (value.raw() == Object::transition_sentinel().raw()) {
11477 if (field.is_const()) { 11472 if (field.is_const()) {
11478 ReportError("circular dependency while initializing static field '%s'", 11473 ReportError("circular dependency while initializing static field '%s'",
11479 field_name.ToCString()); 11474 field_name.ToCString());
11480 } else { 11475 } else {
11481 // The implicit static getter will throw the exception if necessary. 11476 // The implicit static getter will throw the exception if necessary.
11482 return new(Z) StaticGetterNode( 11477 return new(Z) StaticGetterNode(
11483 field_ref_pos, NULL, false, field_owner, field_name); 11478 field_ref_pos, NULL, field_owner, field_name);
11484 } 11479 }
11485 } else if (value.raw() == Object::sentinel().raw()) { 11480 } else if (value.raw() == Object::sentinel().raw()) {
11486 // This field has not been referenced yet and thus the value has 11481 // This field has not been referenced yet and thus the value has
11487 // not been evaluated. If the field is const, call the static getter method 11482 // not been evaluated. If the field is const, call the static getter method
11488 // to evaluate the expression and canonicalize the value. 11483 // to evaluate the expression and canonicalize the value.
11489 if (field.is_const()) { 11484 if (field.is_const()) {
11490 field.set_value(Object::transition_sentinel()); 11485 field.set_value(Object::transition_sentinel());
11491 const int kNumArguments = 0; // no arguments. 11486 const int kNumArguments = 0; // no arguments.
11492 const Function& func = Function::Handle(Z, 11487 const Function& func = Function::Handle(Z,
11493 Resolver::ResolveStatic(field_owner, 11488 Resolver::ResolveStatic(field_owner,
(...skipping 28 matching lines...) Expand all
11522 UNREACHABLE(); 11517 UNREACHABLE();
11523 } 11518 }
11524 ASSERT(const_value.IsNull() || const_value.IsInstance()); 11519 ASSERT(const_value.IsNull() || const_value.IsInstance());
11525 Instance& instance = Instance::Handle(Z); 11520 Instance& instance = Instance::Handle(Z);
11526 instance ^= const_value.raw(); 11521 instance ^= const_value.raw();
11527 instance = TryCanonicalize(instance, field_ref_pos); 11522 instance = TryCanonicalize(instance, field_ref_pos);
11528 field.set_value(instance); 11523 field.set_value(instance);
11529 return NULL; // Constant 11524 return NULL; // Constant
11530 } else { 11525 } else {
11531 return new(Z) StaticGetterNode( 11526 return new(Z) StaticGetterNode(
11532 field_ref_pos, NULL, false, field_owner, field_name); 11527 field_ref_pos, NULL, field_owner, field_name);
11533 } 11528 }
11534 } 11529 }
11535 if (getter.IsNull() || 11530 if (getter.IsNull() ||
11536 (getter.kind() == RawFunction::kImplicitStaticFinalGetter)) { 11531 (getter.kind() == RawFunction::kImplicitStaticFinalGetter)) {
11537 return NULL; 11532 return NULL;
11538 } 11533 }
11539 ASSERT(getter.kind() == RawFunction::kImplicitGetter); 11534 ASSERT(getter.kind() == RawFunction::kImplicitGetter);
11540 return new(Z) StaticGetterNode( 11535 return new(Z) StaticGetterNode(
11541 field_ref_pos, NULL, false, field_owner, field_name); 11536 field_ref_pos, NULL, field_owner, field_name);
11542 } 11537 }
11543 11538
11544 11539
11545 RawObject* Parser::EvaluateConstConstructorCall( 11540 RawObject* Parser::EvaluateConstConstructorCall(
11546 const Class& type_class, 11541 const Class& type_class,
11547 const TypeArguments& type_arguments, 11542 const TypeArguments& type_arguments,
11548 const Function& constructor, 11543 const Function& constructor,
11549 ArgumentListNode* arguments) { 11544 ArgumentListNode* arguments) {
11550 // Factories have one extra argument: the type arguments. 11545 // Factories have one extra argument: the type arguments.
11551 // Constructors have 2 extra arguments: rcvr and construction phase. 11546 // Constructors have 2 extra arguments: rcvr and construction phase.
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
11669 if (!func.IsNull()) { 11664 if (!func.IsNull()) {
11670 if (func.IsDynamicFunction() || func.is_abstract()) { 11665 if (func.IsDynamicFunction() || func.is_abstract()) {
11671 if (node != NULL) { 11666 if (node != NULL) {
11672 CheckInstanceFieldAccess(ident_pos, ident); 11667 CheckInstanceFieldAccess(ident_pos, ident);
11673 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); 11668 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
11674 *node = CallGetter(ident_pos, LoadReceiver(ident_pos), ident); 11669 *node = CallGetter(ident_pos, LoadReceiver(ident_pos), ident);
11675 } 11670 }
11676 return true; 11671 return true;
11677 } else if (func.IsStaticFunction()) { 11672 } else if (func.IsStaticFunction()) {
11678 if (node != NULL) { 11673 if (node != NULL) {
11679 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
11680 // The static getter may later be changed into a dynamically
11681 // resolved instance setter if no static setter can
11682 // be found.
11683 AstNode* receiver = NULL;
11684 const bool kTestOnly = true;
11685 if (!current_function().is_static() &&
11686 (LookupReceiver(current_block_->scope, kTestOnly) != NULL)) {
11687 receiver = LoadReceiver(ident_pos);
11688 }
11689 *node = new(Z) StaticGetterNode(ident_pos, 11674 *node = new(Z) StaticGetterNode(ident_pos,
11690 receiver, 11675 NULL,
11691 false,
11692 Class::ZoneHandle(Z, cls.raw()), 11676 Class::ZoneHandle(Z, cls.raw()),
11693 ident); 11677 ident);
11694 } 11678 }
11695 return true; 11679 return true;
11696 } 11680 }
11697 } 11681 }
11698 func = cls.LookupSetterFunction(ident); 11682 func = cls.LookupSetterFunction(ident);
11699 if (!func.IsNull()) { 11683 if (!func.IsNull()) {
11684 // We create a getter node even though a getter doesn't exist as
11685 // it could be followed by an assignment which will convert it to
11686 // a setter node. If there is no assignment we will get an error
11687 // when we try to invoke the getter.
11700 if (func.IsDynamicFunction() || func.is_abstract()) { 11688 if (func.IsDynamicFunction() || func.is_abstract()) {
11701 if (node != NULL) { 11689 if (node != NULL) {
11702 // We create a getter node even though a getter doesn't exist as
11703 // it could be followed by an assignment which will convert it to
11704 // a setter node. If there is no assignment we will get an error
11705 // when we try to invoke the getter.
11706 CheckInstanceFieldAccess(ident_pos, ident); 11690 CheckInstanceFieldAccess(ident_pos, ident);
11707 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved()); 11691 ASSERT(AbstractType::Handle(Z, func.result_type()).IsResolved());
11708 *node = CallGetter(ident_pos, LoadReceiver(ident_pos), ident); 11692 *node = CallGetter(ident_pos, LoadReceiver(ident_pos), ident);
11709 } 11693 }
11710 return true; 11694 return true;
11711 } else if (func.IsStaticFunction()) { 11695 } else if (func.IsStaticFunction()) {
11712 if (node != NULL) { 11696 if (node != NULL) {
11713 // We create a getter node even though a getter doesn't exist as 11697 *node = new(Z) StaticGetterNode(ident_pos,
11714 // it could be followed by an assignment which will convert it to 11698 NULL,
11715 // a setter node. If there is no assignment we will get an error 11699 Class::ZoneHandle(Z, cls.raw()),
11716 // when we try to invoke the getter. 11700 ident);
11717 *node = new(Z) StaticGetterNode(
11718 ident_pos,
11719 NULL,
11720 false,
11721 Class::ZoneHandle(Z, cls.raw()),
11722 ident);
11723 } 11701 }
11724 return true; 11702 return true;
11725 } 11703 }
11726 } 11704 }
11727 11705
11728 // Nothing found in scope of current class. 11706 // Nothing found in scope of current class.
11729 if (node != NULL) { 11707 if (node != NULL) {
11730 *node = NULL; 11708 *node = NULL;
11731 } 11709 }
11732 return false; // Not an unqualified identifier. 11710 return false; // Not an unqualified identifier.
(...skipping 24 matching lines...) Expand all
11757 } else if (obj.IsField()) { 11735 } else if (obj.IsField()) {
11758 const Field& field = Field::Cast(obj); 11736 const Field& field = Field::Cast(obj);
11759 ASSERT(field.is_static()); 11737 ASSERT(field.is_static());
11760 return GenerateStaticFieldLookup(field, ident_pos); 11738 return GenerateStaticFieldLookup(field, ident_pos);
11761 } else if (obj.IsFunction()) { 11739 } else if (obj.IsFunction()) {
11762 const Function& func = Function::Cast(obj); 11740 const Function& func = Function::Cast(obj);
11763 ASSERT(func.is_static()); 11741 ASSERT(func.is_static());
11764 if (func.IsGetterFunction() || func.IsSetterFunction()) { 11742 if (func.IsGetterFunction() || func.IsSetterFunction()) {
11765 return new(Z) StaticGetterNode(ident_pos, 11743 return new(Z) StaticGetterNode(ident_pos,
11766 /* receiver */ NULL, 11744 /* receiver */ NULL,
11767 /* is_super_getter */ false,
11768 Class::ZoneHandle(Z, func.Owner()), 11745 Class::ZoneHandle(Z, func.Owner()),
11769 ident); 11746 ident);
11770 11747
11771 } else { 11748 } else {
11772 return new(Z) PrimaryNode(ident_pos, Function::ZoneHandle(Z, func.raw())); 11749 return new(Z) PrimaryNode(ident_pos, Function::ZoneHandle(Z, func.raw()));
11773 } 11750 }
11774 } else { 11751 } else {
11775 ASSERT(obj.IsNull() || obj.IsLibraryPrefix()); 11752 ASSERT(obj.IsNull() || obj.IsLibraryPrefix());
11776 } 11753 }
11777 // Lexically unresolved primary identifiers are referenced by their name. 11754 // Lexically unresolved primary identifiers are referenced by their name.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
11841 get_field->AsStaticGetterNode()->set_is_deferred(is_deferred); 11818 get_field->AsStaticGetterNode()->set_is_deferred(is_deferred);
11842 } 11819 }
11843 return get_field; 11820 return get_field;
11844 } else if (obj.IsFunction()) { 11821 } else if (obj.IsFunction()) {
11845 const Function& func = Function::Cast(obj); 11822 const Function& func = Function::Cast(obj);
11846 ASSERT(func.is_static()); 11823 ASSERT(func.is_static());
11847 if (func.IsGetterFunction() || func.IsSetterFunction()) { 11824 if (func.IsGetterFunction() || func.IsSetterFunction()) {
11848 StaticGetterNode* getter = new(Z) StaticGetterNode( 11825 StaticGetterNode* getter = new(Z) StaticGetterNode(
11849 ident_pos, 11826 ident_pos,
11850 /* receiver */ NULL, 11827 /* receiver */ NULL,
11851 /* is_super_getter */ false,
11852 Class::ZoneHandle(Z, func.Owner()), 11828 Class::ZoneHandle(Z, func.Owner()),
11853 ident); 11829 ident);
11854 getter->set_is_deferred(is_deferred); 11830 getter->set_is_deferred(is_deferred);
11855 return getter; 11831 return getter;
11856 } else { 11832 } else {
11857 PrimaryNode* primary = new(Z) PrimaryNode( 11833 PrimaryNode* primary = new(Z) PrimaryNode(
11858 ident_pos, Function::ZoneHandle(Z, func.raw())); 11834 ident_pos, Function::ZoneHandle(Z, func.raw()));
11859 primary->set_is_deferred(is_deferred); 11835 primary->set_is_deferred(is_deferred);
11860 return primary; 11836 return primary;
11861 } 11837 }
(...skipping 1657 matching lines...) Expand 10 before | Expand all | Expand 10 after
13519 void Parser::SkipQualIdent() { 13495 void Parser::SkipQualIdent() {
13520 ASSERT(IsIdentifier()); 13496 ASSERT(IsIdentifier());
13521 ConsumeToken(); 13497 ConsumeToken();
13522 if (CurrentToken() == Token::kPERIOD) { 13498 if (CurrentToken() == Token::kPERIOD) {
13523 ConsumeToken(); // Consume the kPERIOD token. 13499 ConsumeToken(); // Consume the kPERIOD token.
13524 ExpectIdentifier("identifier expected after '.'"); 13500 ExpectIdentifier("identifier expected after '.'");
13525 } 13501 }
13526 } 13502 }
13527 13503
13528 } // namespace dart 13504 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/ast_transformer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698