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

Side by Side Diff: pkg/compiler/lib/src/elements/modelx.dart

Issue 1437463005: Compute NewStructure in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 1 month 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 library elements.modelx; 5 library elements.modelx;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart' show 8 import '../common/resolution.dart' show
9 Resolution, 9 Resolution,
10 Parsing; 10 Parsing;
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 .message(messageArguments).toString(); 315 .message(messageArguments).toString();
316 } 316 }
317 317
318 String toString() => '<$name: $message>'; 318 String toString() => '<$name: $message>';
319 319
320 accept(ElementVisitor visitor, arg) { 320 accept(ElementVisitor visitor, arg) {
321 return visitor.visitErroneousElement(this, arg); 321 return visitor.visitErroneousElement(this, arg);
322 } 322 }
323 323
324 @override 324 @override
325 get isEffectiveTargetMalformed {
326 throw new UnsupportedError("isEffectiveTargetMalformed");
327 }
328
329 @override
325 bool get isFromEnvironmentConstructor => false; 330 bool get isFromEnvironmentConstructor => false;
326 } 331 }
327 332
328 /// A constructor that was synthesized to recover from a compile-time error. 333 /// A constructor that was synthesized to recover from a compile-time error.
329 class ErroneousConstructorElementX extends ErroneousElementX 334 class ErroneousConstructorElementX extends ErroneousElementX
330 with PatchMixin<FunctionElement>, 335 with PatchMixin<FunctionElement>,
331 AnalyzableElementX, 336 AnalyzableElementX,
332 ConstantConstructorMixin 337 ConstantConstructorMixin
333 implements ConstructorElementX { 338 implements ConstructorElementX {
334 // TODO(ahe): Instead of subclassing [ErroneousElementX], this class should 339 // TODO(ahe): Instead of subclassing [ErroneousElementX], this class should
335 // be more like [ErroneousFieldElementX]. In particular, its kind should be 340 // be more like [ErroneousFieldElementX]. In particular, its kind should be
336 // [ElementKind.GENERATIVE_CONSTRUCTOR], and it shouldn't throw as much. 341 // [ElementKind.GENERATIVE_CONSTRUCTOR], and it shouldn't throw as much.
337 342
338 ErroneousConstructorElementX( 343 ErroneousConstructorElementX(
339 MessageKind messageKind, 344 MessageKind messageKind,
340 Map messageArguments, 345 Map messageArguments,
341 String name, 346 String name,
342 Element enclosing) 347 Element enclosing)
343 : super(messageKind, messageArguments, name, enclosing); 348 : super(messageKind, messageArguments, name, enclosing);
344 349
350 @override
345 bool get isRedirectingGenerative => false; 351 bool get isRedirectingGenerative => false;
346 352
353 @override
347 void set isRedirectingGenerative(_) { 354 void set isRedirectingGenerative(_) {
348 throw new UnsupportedError("isRedirectingGenerative"); 355 throw new UnsupportedError("isRedirectingGenerative");
349 } 356 }
350 357
358 @override
351 bool get isRedirectingFactory => false; 359 bool get isRedirectingFactory => false;
352 360
361 @override
353 get definingElement { 362 get definingElement {
354 throw new UnsupportedError("definingElement"); 363 throw new UnsupportedError("definingElement");
355 } 364 }
356 365
366 @override
357 get asyncMarker { 367 get asyncMarker {
358 throw new UnsupportedError("asyncMarker"); 368 throw new UnsupportedError("asyncMarker");
359 } 369 }
360 370
371 @override
361 set asyncMarker(_) { 372 set asyncMarker(_) {
362 throw new UnsupportedError("asyncMarker="); 373 throw new UnsupportedError("asyncMarker=");
363 } 374 }
364 375
365 get internalEffectiveTarget { 376 @override
366 throw new UnsupportedError("internalEffectiveTarget"); 377 get effectiveTargetInternal {
378 throw new UnsupportedError("effectiveTargetInternal");
367 } 379 }
368 380
369 set internalEffectiveTarget(_) { 381 @override
370 throw new UnsupportedError("internalEffectiveTarget="); 382 set effectiveTargetInternal(_) {
383 throw new UnsupportedError("effectiveTargetInternal=");
371 } 384 }
372 385
386 @override
387 get _effectiveTargetType {
388 throw new UnsupportedError("_effectiveTargetType");
389 }
390
391 @override
392 set _effectiveTargetType(_) {
393 throw new UnsupportedError("_effectiveTargetType=");
394 }
395
396 @override
373 get effectiveTargetType { 397 get effectiveTargetType {
374 throw new UnsupportedError("effectiveTargetType"); 398 throw new UnsupportedError("effectiveTargetType");
375 } 399 }
376 400
377 set effectiveTargetType(_) { 401 @override
378 throw new UnsupportedError("effectiveTargetType="); 402 get _isEffectiveTargetMalformed {
403 throw new UnsupportedError("_isEffectiveTargetMalformed");
379 } 404 }
380 405
406 @override
407 set _isEffectiveTargetMalformed(_) {
408 throw new UnsupportedError("_isEffectiveTargetMalformed=");
409 }
410
411 @override
412 get isEffectiveTargetMalformed {
413 throw new UnsupportedError("isEffectiveTargetMalformed");
414 }
415
416 @override
417 void setEffectiveTarget(ConstructorElement target,
418 InterfaceType type,
419 {bool isMalformed: false}) {
420 throw new UnsupportedError("setEffectiveTarget");
421 }
422
423 @override
381 void _computeSignature(Resolution resolution) { 424 void _computeSignature(Resolution resolution) {
382 throw new UnsupportedError("_computeSignature"); 425 throw new UnsupportedError("_computeSignature");
383 } 426 }
384 427
428 @override
385 get typeCache { 429 get typeCache {
386 throw new UnsupportedError("typeCache"); 430 throw new UnsupportedError("typeCache");
387 } 431 }
388 432
433 @override
389 set typeCache(_) { 434 set typeCache(_) {
390 throw new UnsupportedError("typeCache="); 435 throw new UnsupportedError("typeCache=");
391 } 436 }
392 437
438 @override
393 get immediateRedirectionTarget { 439 get immediateRedirectionTarget {
394 throw new UnsupportedError("immediateRedirectionTarget"); 440 throw new UnsupportedError("immediateRedirectionTarget");
395 } 441 }
396 442
443 @override
397 set immediateRedirectionTarget(_) { 444 set immediateRedirectionTarget(_) {
398 throw new UnsupportedError("immediateRedirectionTarget="); 445 throw new UnsupportedError("immediateRedirectionTarget=");
399 } 446 }
400 447
448 @override
401 get _functionSignatureCache { 449 get _functionSignatureCache {
402 throw new UnsupportedError("functionSignatureCache"); 450 throw new UnsupportedError("functionSignatureCache");
403 } 451 }
404 452
453 @override
405 set _functionSignatureCache(_) { 454 set _functionSignatureCache(_) {
406 throw new UnsupportedError("functionSignatureCache="); 455 throw new UnsupportedError("functionSignatureCache=");
407 } 456 }
408 457
458 @override
409 set functionSignature(_) { 459 set functionSignature(_) {
410 throw new UnsupportedError("functionSignature="); 460 throw new UnsupportedError("functionSignature=");
411 } 461 }
412 462
463 @override
413 get nestedClosures { 464 get nestedClosures {
414 throw new UnsupportedError("nestedClosures"); 465 throw new UnsupportedError("nestedClosures");
415 } 466 }
416 467
468 @override
417 set nestedClosures(_) { 469 set nestedClosures(_) {
418 throw new UnsupportedError("nestedClosures="); 470 throw new UnsupportedError("nestedClosures=");
419 } 471 }
420 472
473 @override
421 set redirectionDeferredPrefix(_) { 474 set redirectionDeferredPrefix(_) {
422 throw new UnsupportedError("redirectionDeferredPrefix="); 475 throw new UnsupportedError("redirectionDeferredPrefix=");
423 } 476 }
424
425 void set effectiveTarget(_) {
426 throw new UnsupportedError("effectiveTarget=");
427 }
428 } 477 }
429 478
430 /// A message attached to a [WarnOnUseElementX]. 479 /// A message attached to a [WarnOnUseElementX].
431 class WrappedMessage { 480 class WrappedMessage {
432 /// The message position. If [:null:] the position of the reference to the 481 /// The message position. If [:null:] the position of the reference to the
433 /// [WarnOnUseElementX] is used. 482 /// [WarnOnUseElementX] is used.
434 final Spannable spannable; 483 final Spannable spannable;
435 484
436 /** 485 /**
437 * The message to report on resolving a wrapped element. 486 * The message to report on resolving a wrapped element.
(...skipping 1776 matching lines...) Expand 10 before | Expand all | Expand 10 after
2214 2263
2215 FunctionElement immediateRedirectionTarget; 2264 FunctionElement immediateRedirectionTarget;
2216 PrefixElement redirectionDeferredPrefix; 2265 PrefixElement redirectionDeferredPrefix;
2217 2266
2218 bool get isRedirectingFactory => immediateRedirectionTarget != null; 2267 bool get isRedirectingFactory => immediateRedirectionTarget != null;
2219 2268
2220 // TODO(johnniwinther): This should also return true for cyclic redirecting 2269 // TODO(johnniwinther): This should also return true for cyclic redirecting
2221 // generative constructors. 2270 // generative constructors.
2222 bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory; 2271 bool get isCyclicRedirection => effectiveTarget.isRedirectingFactory;
2223 2272
2224 /// This field is set by the post process queue when checking for cycles. 2273 /// These fields are set by the post process queue when checking for cycles.
2225 ConstructorElement internalEffectiveTarget; 2274 ConstructorElement effectiveTargetInternal;
2226 DartType effectiveTargetType; 2275 DartType _effectiveTargetType;
2276 bool _isEffectiveTargetMalformed;
2227 2277
2228 void set effectiveTarget(ConstructorElement constructor) { 2278 void setEffectiveTarget(ConstructorElement target,
2229 assert(constructor != null && internalEffectiveTarget == null); 2279 DartType type,
2230 internalEffectiveTarget = constructor; 2280 {bool isMalformed: false}) {
2281 assert(invariant(this, target != null,
2282 message: 'No effective target provided for $this.'));
2283 assert(invariant(this, effectiveTargetInternal == null,
2284 message: 'Effective target has already been computed for $this.'));
2285 effectiveTargetInternal = target;
2286 _effectiveTargetType = type;
2287 _isEffectiveTargetMalformed = isMalformed;
2231 } 2288 }
2232 2289
2233 ConstructorElement get effectiveTarget { 2290 ConstructorElement get effectiveTarget {
2234 if (Elements.isMalformed(immediateRedirectionTarget)) { 2291 if (Elements.isMalformed(immediateRedirectionTarget)) {
2235 return immediateRedirectionTarget; 2292 return immediateRedirectionTarget;
2236 } 2293 }
2237 assert(!isRedirectingFactory || internalEffectiveTarget != null); 2294 assert(!isRedirectingFactory || effectiveTargetInternal != null);
2238 if (isRedirectingFactory) return internalEffectiveTarget; 2295 if (isRedirectingFactory) {
2296 return effectiveTargetInternal;
2297 }
2239 if (isPatched) { 2298 if (isPatched) {
2240 return internalEffectiveTarget ?? this; 2299 return effectiveTargetInternal ?? this;
2241 } 2300 }
2242 return this; 2301 return this;
2243 } 2302 }
2244 2303
2304 InterfaceType get effectiveTargetType {
2305 assert(invariant(this, _effectiveTargetType != null,
2306 message: 'Effective target type has not yet been computed for $this.'));
2307 return _effectiveTargetType;
2308 }
2309
2245 InterfaceType computeEffectiveTargetType(InterfaceType newType) { 2310 InterfaceType computeEffectiveTargetType(InterfaceType newType) {
2246 if (!isRedirectingFactory) return newType; 2311 if (!isRedirectingFactory) return newType;
2247 assert(invariant(this, effectiveTargetType != null,
2248 message: 'Redirection target type has not yet been computed for '
2249 '$this.'));
2250 return effectiveTargetType.substByContext(newType); 2312 return effectiveTargetType.substByContext(newType);
2251 } 2313 }
2252 2314
2315 bool get isEffectiveTargetMalformed {
2316 if (!isRedirectingFactory) return false;
2317 assert(invariant(this, _isEffectiveTargetMalformed != null,
2318 message: 'Malformedness has not yet been computed for $this.'));
2319 return _isEffectiveTargetMalformed == true;
2320 }
2321
2253 accept(ElementVisitor visitor, arg) { 2322 accept(ElementVisitor visitor, arg) {
2254 return visitor.visitConstructorElement(this, arg); 2323 return visitor.visitConstructorElement(this, arg);
2255 } 2324 }
2256 2325
2257 ConstructorElement get definingConstructor => null; 2326 ConstructorElement get definingConstructor => null;
2258 2327
2259 ClassElement get enclosingClass => enclosingElement; 2328 ClassElement get enclosingClass => enclosingElement;
2260 } 2329 }
2261 2330
2262 class DeferredLoaderGetterElementX extends GetterElementX 2331 class DeferredLoaderGetterElementX extends GetterElementX
(...skipping 858 matching lines...) Expand 10 before | Expand all | Expand 10 after
3121 AstElement get definingElement; 3190 AstElement get definingElement;
3122 3191
3123 bool get hasResolvedAst => definingElement.hasTreeElements; 3192 bool get hasResolvedAst => definingElement.hasTreeElements;
3124 3193
3125 ResolvedAst get resolvedAst { 3194 ResolvedAst get resolvedAst {
3126 return new ResolvedAst(declaration, 3195 return new ResolvedAst(declaration,
3127 definingElement.node, definingElement.treeElements); 3196 definingElement.node, definingElement.treeElements);
3128 } 3197 }
3129 3198
3130 } 3199 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/elements/elements.dart ('k') | pkg/compiler/lib/src/inferrer/inferrer_visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698