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

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

Issue 2415743004: Fix assertion failure with deferred prefixes. (Closed)
Patch Set: Created 4 years, 2 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 | « no previous file | 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 12192 matching lines...) Expand 10 before | Expand all | Expand 10 after
12203 // name, so we explicitly prevent lookup of private names here. 12203 // name, so we explicitly prevent lookup of private names here.
12204 if (is_setter_name) { 12204 if (is_setter_name) {
12205 String& setter_name = 12205 String& setter_name =
12206 String::Handle(Z, Field::SetterName(extractor_name)); 12206 String::Handle(Z, Field::SetterName(extractor_name));
12207 obj = prefix.LookupObject(setter_name); 12207 obj = prefix.LookupObject(setter_name);
12208 } 12208 }
12209 if (obj.IsNull()) { 12209 if (obj.IsNull()) {
12210 obj = prefix.LookupObject(extractor_name); 12210 obj = prefix.LookupObject(extractor_name);
12211 } 12211 }
12212 } 12212 }
12213 if (!prefix.is_loaded() && (parsed_function() != NULL)) { 12213 if (!prefix.is_loaded() && (parsed_function() != NULL) &&
12214 !FLAG_load_deferred_eagerly) {
12214 // Remember that this function depends on an import prefix of an 12215 // Remember that this function depends on an import prefix of an
12215 // unloaded deferred library. 12216 // unloaded deferred library.
12216 parsed_function()->AddDeferredPrefix(prefix); 12217 parsed_function()->AddDeferredPrefix(prefix);
12217 } 12218 }
12218 12219
12219 if (obj.IsFunction()) { 12220 if (obj.IsFunction()) {
12220 const Function& func = Function::Cast(obj); 12221 const Function& func = Function::Cast(obj);
12221 if (!func.IsSetterFunction() || is_setter_name) { 12222 if (!func.IsSetterFunction() || is_setter_name) {
12222 return CreateImplicitClosureNode(func, property_pos, NULL); 12223 return CreateImplicitClosureNode(func, property_pos, NULL);
12223 } 12224 }
(...skipping 1801 matching lines...) Expand 10 before | Expand all | Expand 10 after
14025 String::Handle(Z, redirect_type.UserVisibleName()).ToCString()); 14026 String::Handle(Z, redirect_type.UserVisibleName()).ToCString());
14026 } 14027 }
14027 } 14028 }
14028 if (!redirect_type.HasResolvedTypeClass()) { 14029 if (!redirect_type.HasResolvedTypeClass()) {
14029 // If the redirection type is unresolved, we convert the allocation 14030 // If the redirection type is unresolved, we convert the allocation
14030 // into throwing a type error. 14031 // into throwing a type error.
14031 const UnresolvedClass& cls = 14032 const UnresolvedClass& cls =
14032 UnresolvedClass::Handle(Z, redirect_type.unresolved_class()); 14033 UnresolvedClass::Handle(Z, redirect_type.unresolved_class());
14033 const LibraryPrefix& prefix = 14034 const LibraryPrefix& prefix =
14034 LibraryPrefix::Handle(Z, cls.library_prefix()); 14035 LibraryPrefix::Handle(Z, cls.library_prefix());
14035 if (!prefix.IsNull() && !prefix.is_loaded()) { 14036 if (!prefix.IsNull() && !prefix.is_loaded() &&
14037 !FLAG_load_deferred_eagerly) {
14036 // If the redirection type is unresolved because it refers to 14038 // If the redirection type is unresolved because it refers to
14037 // an unloaded deferred prefix, mark this function as depending 14039 // an unloaded deferred prefix, mark this function as depending
14038 // on the library prefix. It will then get invalidated when the 14040 // on the library prefix. It will then get invalidated when the
14039 // prefix is loaded. 14041 // prefix is loaded.
14040 parsed_function()->AddDeferredPrefix(prefix); 14042 parsed_function()->AddDeferredPrefix(prefix);
14041 } 14043 }
14042 redirect_type = ClassFinalizer::NewFinalizedMalformedType( 14044 redirect_type = ClassFinalizer::NewFinalizedMalformedType(
14043 Error::Handle(Z), 14045 Error::Handle(Z),
14044 script_, 14046 script_,
14045 call_pos, 14047 call_pos,
(...skipping 1039 matching lines...) Expand 10 before | Expand all | Expand 10 after
15085 const ArgumentListNode& function_args, 15087 const ArgumentListNode& function_args,
15086 const LocalVariable* temp_for_last_arg, 15088 const LocalVariable* temp_for_last_arg,
15087 bool is_super_invocation) { 15089 bool is_super_invocation) {
15088 UNREACHABLE(); 15090 UNREACHABLE();
15089 return NULL; 15091 return NULL;
15090 } 15092 }
15091 15093
15092 } // namespace dart 15094 } // namespace dart
15093 15095
15094 #endif // DART_PRECOMPILED_RUNTIME 15096 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698