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

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

Issue 2230383003: Implement @patch annotation for patch class members (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: wip Created 4 years, 4 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
« no previous file with comments | « runtime/vm/dart_api_impl_test.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 #include "vm/flags.h" 6 #include "vm/flags.h"
7 7
8 #ifndef DART_PRECOMPILED_RUNTIME 8 #ifndef DART_PRECOMPILED_RUNTIME
9 9
10 #include "lib/invocation_mirror.h" 10 #include "lib/invocation_mirror.h"
(...skipping 4016 matching lines...) Expand 10 before | Expand all | Expand 10 after
4027 method->has_native, 4027 method->has_native,
4028 current_class(), 4028 current_class(),
4029 method->decl_begin_pos)); 4029 method->decl_begin_pos));
4030 func.set_result_type(*method->type); 4030 func.set_result_type(*method->type);
4031 func.set_end_token_pos(method_end_pos); 4031 func.set_end_token_pos(method_end_pos);
4032 func.set_is_redirecting(is_redirecting); 4032 func.set_is_redirecting(is_redirecting);
4033 func.set_modifier(async_modifier); 4033 func.set_modifier(async_modifier);
4034 if (library_.is_dart_scheme() && library_.IsPrivate(*method->name)) { 4034 if (library_.is_dart_scheme() && library_.IsPrivate(*method->name)) {
4035 func.set_is_reflectable(false); 4035 func.set_is_reflectable(false);
4036 } 4036 }
4037 if (is_patch_source() && IsPatchAnnotation(method->metadata_pos)) {
4038 // Currently, we just ignore the patch annotation. If the function
4039 // name already exists in the patched class, this function will replace
4040 // the one in the patched class.
4041 method->metadata_pos = TokenPosition::kNoSource;
4042 }
4037 if (FLAG_enable_mirrors && (method->metadata_pos.IsReal())) { 4043 if (FLAG_enable_mirrors && (method->metadata_pos.IsReal())) {
4038 library_.AddFunctionMetadata(func, method->metadata_pos); 4044 library_.AddFunctionMetadata(func, method->metadata_pos);
4039 } 4045 }
4040 if (method->has_native) { 4046 if (method->has_native) {
4041 func.set_native_name(*native_name); 4047 func.set_native_name(*native_name);
4042 } 4048 }
4043 4049
4044 // If this method is a redirecting factory, set the redirection information. 4050 // If this method is a redirecting factory, set the redirection information.
4045 if (!redirection_type.IsNull()) { 4051 if (!redirection_type.IsNull()) {
4046 ASSERT(func.IsFactory()); 4052 ASSERT(func.IsFactory());
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
4127 field->has_static, 4133 field->has_static,
4128 field->has_final, 4134 field->has_final,
4129 field->has_const, 4135 field->has_const,
4130 is_reflectable, 4136 is_reflectable,
4131 current_class(), 4137 current_class(),
4132 *field->type, 4138 *field->type,
4133 field->name_pos); 4139 field->name_pos);
4134 class_field.set_has_initializer(has_initializer); 4140 class_field.set_has_initializer(has_initializer);
4135 members->AddField(class_field); 4141 members->AddField(class_field);
4136 field->field_ = &class_field; 4142 field->field_ = &class_field;
4143 if (is_patch_source() && IsPatchAnnotation(field->metadata_pos)) {
4144 // Currently, we just ignore the patch annotation on fields.
4145 // All fields in the patch class are added to the patched class.
4146 field->metadata_pos = TokenPosition::kNoSource;
4147 }
4137 if (FLAG_enable_mirrors && (field->metadata_pos.IsReal())) { 4148 if (FLAG_enable_mirrors && (field->metadata_pos.IsReal())) {
4138 library_.AddFieldMetadata(class_field, field->metadata_pos); 4149 library_.AddFieldMetadata(class_field, field->metadata_pos);
4139 } 4150 }
4140 4151
4141 // Start tracking types for fields with simple initializers in their 4152 // Start tracking types for fields with simple initializers in their
4142 // definition. This avoids some of the overhead to track this at runtime 4153 // definition. This avoids some of the overhead to track this at runtime
4143 // and rules out many fields from being unnecessary unboxing candidates. 4154 // and rules out many fields from being unnecessary unboxing candidates.
4144 if (!field->has_static && has_initializer && has_simple_literal) { 4155 if (!field->has_static && has_initializer && has_simple_literal) {
4145 class_field.RecordStore(init_value); 4156 class_field.RecordStore(init_value);
4146 if (!init_value.IsNull() && init_value.IsDouble()) { 4157 if (!init_value.IsNull() && init_value.IsDouble()) {
(...skipping 10618 matching lines...) Expand 10 before | Expand all | Expand 10 after
14765 const ArgumentListNode& function_args, 14776 const ArgumentListNode& function_args,
14766 const LocalVariable* temp_for_last_arg, 14777 const LocalVariable* temp_for_last_arg,
14767 bool is_super_invocation) { 14778 bool is_super_invocation) {
14768 UNREACHABLE(); 14779 UNREACHABLE();
14769 return NULL; 14780 return NULL;
14770 } 14781 }
14771 14782
14772 } // namespace dart 14783 } // namespace dart
14773 14784
14774 #endif // DART_PRECOMPILED_RUNTIME 14785 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698