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

Side by Side Diff: pkg/compiler/lib/src/constants/values.dart

Issue 1859343004: dartfmt pkg/compiler (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 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
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 library dart2js.constants.values; 5 library dart2js.constants.values;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 import '../core_types.dart'; 8 import '../core_types.dart';
9 import '../dart_types.dart'; 9 import '../dart_types.dart';
10 import '../elements/elements.dart' 10 import '../elements/elements.dart'
11 show ClassElement, 11 show ClassElement, Element, FieldElement, FunctionElement, PrefixElement;
12 Element,
13 FieldElement,
14 FunctionElement,
15 PrefixElement;
16 import '../tree/tree.dart' hide unparse; 12 import '../tree/tree.dart' hide unparse;
17 import '../util/util.dart' show Hashing; 13 import '../util/util.dart' show Hashing;
18 14
19 abstract class ConstantValueVisitor<R, A> { 15 abstract class ConstantValueVisitor<R, A> {
20 const ConstantValueVisitor(); 16 const ConstantValueVisitor();
21 17
22 R visitFunction(FunctionConstantValue constant, A arg); 18 R visitFunction(FunctionConstantValue constant, A arg);
23 R visitNull(NullConstantValue constant, A arg); 19 R visitNull(NullConstantValue constant, A arg);
24 R visitInt(IntConstantValue constant, A arg); 20 R visitInt(IntConstantValue constant, A arg);
25 R visitDouble(DoubleConstantValue constant, A arg); 21 R visitDouble(DoubleConstantValue constant, A arg);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 /// For the synthetic constants, [DeferredConstantValue], 78 /// For the synthetic constants, [DeferredConstantValue],
83 /// [SyntheticConstantValue], [InterceptorConstantValue] the unparse is 79 /// [SyntheticConstantValue], [InterceptorConstantValue] the unparse is
84 /// descriptive only. 80 /// descriptive only.
85 String unparse(); 81 String unparse();
86 82
87 /// Returns a structured representation of this constant suited for debugging. 83 /// Returns a structured representation of this constant suited for debugging.
88 String toStructuredString(); 84 String toStructuredString();
89 85
90 String toString() { 86 String toString() {
91 assertDebugMode("Use Constant.unparse() or Constant.toStructuredString() " 87 assertDebugMode("Use Constant.unparse() or Constant.toStructuredString() "
92 "instead of Constant.toString()."); 88 "instead of Constant.toString().");
93 return toStructuredString(); 89 return toStructuredString();
94 } 90 }
95 } 91 }
96 92
97 class FunctionConstantValue extends ConstantValue { 93 class FunctionConstantValue extends ConstantValue {
98 FunctionElement element; 94 FunctionElement element;
99 95
100 FunctionConstantValue(this.element) { 96 FunctionConstantValue(this.element) {
101 assert(element.type != null); 97 assert(element.type != null);
102 } 98 }
103 99
104 bool get isFunction => true; 100 bool get isFunction => true;
105 101
106 bool operator ==(var other) { 102 bool operator ==(var other) {
107 if (other is !FunctionConstantValue) return false; 103 if (other is! FunctionConstantValue) return false;
108 return identical(other.element, element); 104 return identical(other.element, element);
109 } 105 }
110 106
111 List<ConstantValue> getDependencies() => const <ConstantValue>[]; 107 List<ConstantValue> getDependencies() => const <ConstantValue>[];
112 108
113 DartString toDartString() { 109 DartString toDartString() {
114 return new DartString.literal(element.name); 110 return new DartString.literal(element.name);
115 } 111 }
116 112
117 DartType getType(CoreTypes types) => element.type; 113 DartType getType(CoreTypes types) => element.type;
(...skipping 16 matching lines...) Expand all
134 } 130 }
135 131
136 abstract class PrimitiveConstantValue extends ConstantValue { 132 abstract class PrimitiveConstantValue extends ConstantValue {
137 get primitiveValue; 133 get primitiveValue;
138 134
139 const PrimitiveConstantValue(); 135 const PrimitiveConstantValue();
140 136
141 bool get isPrimitive => true; 137 bool get isPrimitive => true;
142 138
143 bool operator ==(var other) { 139 bool operator ==(var other) {
144 if (other is !PrimitiveConstantValue) return false; 140 if (other is! PrimitiveConstantValue) return false;
145 PrimitiveConstantValue otherPrimitive = other; 141 PrimitiveConstantValue otherPrimitive = other;
146 // We use == instead of 'identical' so that DartStrings compare correctly. 142 // We use == instead of 'identical' so that DartStrings compare correctly.
147 return primitiveValue == otherPrimitive.primitiveValue; 143 return primitiveValue == otherPrimitive.primitiveValue;
148 } 144 }
149 145
150 int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode'); 146 int get hashCode => throw new UnsupportedError('PrimitiveConstant.hashCode');
151 147
152 // Primitive constants don't have dependencies. 148 // Primitive constants don't have dependencies.
153 List<ConstantValue> getDependencies() => const <ConstantValue>[]; 149 List<ConstantValue> getDependencies() => const <ConstantValue>[];
154 150
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 num get primitiveValue; 184 num get primitiveValue;
189 185
190 bool get isNum => true; 186 bool get isNum => true;
191 } 187 }
192 188
193 class IntConstantValue extends NumConstantValue { 189 class IntConstantValue extends NumConstantValue {
194 final int primitiveValue; 190 final int primitiveValue;
195 191
196 factory IntConstantValue(int value) { 192 factory IntConstantValue(int value) {
197 switch (value) { 193 switch (value) {
198 case 0: return const IntConstantValue._internal(0); 194 case 0:
199 case 1: return const IntConstantValue._internal(1); 195 return const IntConstantValue._internal(0);
200 case 2: return const IntConstantValue._internal(2); 196 case 1:
201 case 3: return const IntConstantValue._internal(3); 197 return const IntConstantValue._internal(1);
202 case 4: return const IntConstantValue._internal(4); 198 case 2:
203 case 5: return const IntConstantValue._internal(5); 199 return const IntConstantValue._internal(2);
204 case 6: return const IntConstantValue._internal(6); 200 case 3:
205 case 7: return const IntConstantValue._internal(7); 201 return const IntConstantValue._internal(3);
206 case 8: return const IntConstantValue._internal(8); 202 case 4:
207 case 9: return const IntConstantValue._internal(9); 203 return const IntConstantValue._internal(4);
208 case 10: return const IntConstantValue._internal(10); 204 case 5:
209 case -1: return const IntConstantValue._internal(-1); 205 return const IntConstantValue._internal(5);
210 case -2: return const IntConstantValue._internal(-2); 206 case 6:
211 default: return new IntConstantValue._internal(value); 207 return const IntConstantValue._internal(6);
208 case 7:
209 return const IntConstantValue._internal(7);
210 case 8:
211 return const IntConstantValue._internal(8);
212 case 9:
213 return const IntConstantValue._internal(9);
214 case 10:
215 return const IntConstantValue._internal(10);
216 case -1:
217 return const IntConstantValue._internal(-1);
218 case -2:
219 return const IntConstantValue._internal(-2);
220 default:
221 return new IntConstantValue._internal(value);
212 } 222 }
213 } 223 }
214 224
215 const IntConstantValue._internal(this.primitiveValue); 225 const IntConstantValue._internal(this.primitiveValue);
216 226
217 bool get isInt => true; 227 bool get isInt => true;
218 228
219 bool isUInt31() => primitiveValue >= 0 && primitiveValue < (1 << 31); 229 bool isUInt31() => primitiveValue >= 0 && primitiveValue < (1 << 31);
220 230
221 bool isUInt32() => primitiveValue >= 0 && primitiveValue < (1 << 32); 231 bool isUInt32() => primitiveValue >= 0 && primitiveValue < (1 << 32);
222 232
223 bool isPositive() => primitiveValue >= 0; 233 bool isPositive() => primitiveValue >= 0;
224 234
225 bool get isZero => primitiveValue == 0; 235 bool get isZero => primitiveValue == 0;
226 236
227 bool get isOne => primitiveValue == 1; 237 bool get isOne => primitiveValue == 1;
228 238
229 DartType getType(CoreTypes types) => types.intType; 239 DartType getType(CoreTypes types) => types.intType;
230 240
231 // We have to override the equality operator so that ints and doubles are 241 // We have to override the equality operator so that ints and doubles are
232 // treated as separate constants. 242 // treated as separate constants.
233 // The is [:!IntConstant:] check at the beginning of the function makes sure 243 // The is [:!IntConstant:] check at the beginning of the function makes sure
234 // that we compare only equal to integer constants. 244 // that we compare only equal to integer constants.
235 bool operator ==(var other) { 245 bool operator ==(var other) {
236 if (other is !IntConstantValue) return false; 246 if (other is! IntConstantValue) return false;
237 IntConstantValue otherInt = other; 247 IntConstantValue otherInt = other;
238 return primitiveValue == otherInt.primitiveValue; 248 return primitiveValue == otherInt.primitiveValue;
239 } 249 }
240 250
241 int get hashCode => primitiveValue & Hashing.SMI_MASK; 251 int get hashCode => primitiveValue & Hashing.SMI_MASK;
242 252
243 DartString toDartString() { 253 DartString toDartString() {
244 return new DartString.literal(primitiveValue.toString()); 254 return new DartString.literal(primitiveValue.toString());
245 } 255 }
246 256
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 291
282 bool get isOne => primitiveValue == 1.0; 292 bool get isOne => primitiveValue == 1.0;
283 293
284 bool get isPositiveInfinity => primitiveValue == double.INFINITY; 294 bool get isPositiveInfinity => primitiveValue == double.INFINITY;
285 295
286 bool get isNegativeInfinity => primitiveValue == -double.INFINITY; 296 bool get isNegativeInfinity => primitiveValue == -double.INFINITY;
287 297
288 DartType getType(CoreTypes types) => types.doubleType; 298 DartType getType(CoreTypes types) => types.doubleType;
289 299
290 bool operator ==(var other) { 300 bool operator ==(var other) {
291 if (other is !DoubleConstantValue) return false; 301 if (other is! DoubleConstantValue) return false;
292 DoubleConstantValue otherDouble = other; 302 DoubleConstantValue otherDouble = other;
293 double otherValue = otherDouble.primitiveValue; 303 double otherValue = otherDouble.primitiveValue;
294 if (primitiveValue == 0.0 && otherValue == 0.0) { 304 if (primitiveValue == 0.0 && otherValue == 0.0) {
295 return primitiveValue.isNegative == otherValue.isNegative; 305 return primitiveValue.isNegative == otherValue.isNegative;
296 } else if (primitiveValue.isNaN) { 306 } else if (primitiveValue.isNaN) {
297 return otherValue.isNaN; 307 return otherValue.isNaN;
298 } else { 308 } else {
299 return primitiveValue == otherValue; 309 return primitiveValue == otherValue;
300 } 310 }
301 } 311 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 393
384 StringConstantValue.fromString(String value) 394 StringConstantValue.fromString(String value)
385 : this(new DartString.literal(value)); 395 : this(new DartString.literal(value));
386 396
387 bool get isString => true; 397 bool get isString => true;
388 398
389 DartType getType(CoreTypes types) => types.stringType; 399 DartType getType(CoreTypes types) => types.stringType;
390 400
391 bool operator ==(var other) { 401 bool operator ==(var other) {
392 if (identical(this, other)) return true; 402 if (identical(this, other)) return true;
393 if (other is !StringConstantValue) return false; 403 if (other is! StringConstantValue) return false;
394 StringConstantValue otherString = other; 404 StringConstantValue otherString = other;
395 return hashCode == otherString.hashCode && 405 return hashCode == otherString.hashCode &&
396 primitiveValue == otherString.primitiveValue; 406 primitiveValue == otherString.primitiveValue;
397 } 407 }
398 408
399 DartString toDartString() => primitiveValue; 409 DartString toDartString() => primitiveValue;
400 410
401 int get length => primitiveValue.length; 411 int get length => primitiveValue.length;
402 412
403 accept(ConstantValueVisitor visitor, arg) => visitor.visitString(this, arg); 413 accept(ConstantValueVisitor visitor, arg) => visitor.visitString(this, arg);
404 414
405 // TODO(johnniwinther): Ensure correct escaping. 415 // TODO(johnniwinther): Ensure correct escaping.
406 String unparse() => '"${primitiveValue.slowToString()}"'; 416 String unparse() => '"${primitiveValue.slowToString()}"';
(...skipping 22 matching lines...) Expand all
429 class TypeConstantValue extends ObjectConstantValue { 439 class TypeConstantValue extends ObjectConstantValue {
430 /// The user type that this constant represents. 440 /// The user type that this constant represents.
431 final DartType representedType; 441 final DartType representedType;
432 442
433 TypeConstantValue(this.representedType, InterfaceType type) : super(type); 443 TypeConstantValue(this.representedType, InterfaceType type) : super(type);
434 444
435 bool get isType => true; 445 bool get isType => true;
436 446
437 bool operator ==(other) { 447 bool operator ==(other) {
438 return other is TypeConstantValue && 448 return other is TypeConstantValue &&
439 representedType == other.representedType; 449 representedType == other.representedType;
440 } 450 }
441 451
442 int get hashCode => representedType.hashCode * 13; 452 int get hashCode => representedType.hashCode * 13;
443 453
444 List<ConstantValue> getDependencies() => const <ConstantValue>[]; 454 List<ConstantValue> getDependencies() => const <ConstantValue>[];
445 455
446 accept(ConstantValueVisitor visitor, arg) => visitor.visitType(this, arg); 456 accept(ConstantValueVisitor visitor, arg) => visitor.visitType(this, arg);
447 457
448 String unparse() => '$representedType'; 458 String unparse() => '$representedType';
449 459
450 String toStructuredString() => 'TypeConstant(${representedType})'; 460 String toStructuredString() => 'TypeConstant(${representedType})';
451 } 461 }
452 462
453 class ListConstantValue extends ObjectConstantValue { 463 class ListConstantValue extends ObjectConstantValue {
454 final List<ConstantValue> entries; 464 final List<ConstantValue> entries;
455 final int hashCode; 465 final int hashCode;
456 466
457 ListConstantValue(InterfaceType type, List<ConstantValue> entries) 467 ListConstantValue(InterfaceType type, List<ConstantValue> entries)
458 : this.entries = entries, 468 : this.entries = entries,
459 hashCode = Hashing.listHash(entries, Hashing.objectHash(type)), 469 hashCode = Hashing.listHash(entries, Hashing.objectHash(type)),
460 super(type); 470 super(type);
461 471
462 bool get isList => true; 472 bool get isList => true;
463 473
464 bool operator ==(var other) { 474 bool operator ==(var other) {
465 if (identical(this, other)) return true; 475 if (identical(this, other)) return true;
466 if (other is !ListConstantValue) return false; 476 if (other is! ListConstantValue) return false;
467 ListConstantValue otherList = other; 477 ListConstantValue otherList = other;
468 if (hashCode != otherList.hashCode) return false; 478 if (hashCode != otherList.hashCode) return false;
469 if (type != otherList.type) return false; 479 if (type != otherList.type) return false;
470 if (entries.length != otherList.entries.length) return false; 480 if (entries.length != otherList.entries.length) return false;
471 for (int i = 0; i < entries.length; i++) { 481 for (int i = 0; i < entries.length; i++) {
472 if (entries[i] != otherList.entries[i]) return false; 482 if (entries[i] != otherList.entries[i]) return false;
473 } 483 }
474 return true; 484 return true;
475 } 485 }
476 486
477 List<ConstantValue> getDependencies() => entries; 487 List<ConstantValue> getDependencies() => entries;
478 488
479 int get length => entries.length; 489 int get length => entries.length;
480 490
481 accept(ConstantValueVisitor visitor, arg) => visitor.visitList(this, arg); 491 accept(ConstantValueVisitor visitor, arg) => visitor.visitList(this, arg);
482 492
483 String unparse() { 493 String unparse() {
484 StringBuffer sb = new StringBuffer(); 494 StringBuffer sb = new StringBuffer();
485 _unparseTypeArguments(sb); 495 _unparseTypeArguments(sb);
486 sb.write('['); 496 sb.write('[');
487 for (int i = 0 ; i < length ; i++) { 497 for (int i = 0; i < length; i++) {
488 if (i > 0) sb.write(','); 498 if (i > 0) sb.write(',');
489 sb.write(entries[i].unparse()); 499 sb.write(entries[i].unparse());
490 } 500 }
491 sb.write(']'); 501 sb.write(']');
492 return sb.toString(); 502 return sb.toString();
493 } 503 }
494 504
495 String toStructuredString() { 505 String toStructuredString() {
496 StringBuffer sb = new StringBuffer(); 506 StringBuffer sb = new StringBuffer();
497 sb.write('ListConstant('); 507 sb.write('ListConstant(');
498 _unparseTypeArguments(sb); 508 _unparseTypeArguments(sb);
499 sb.write('['); 509 sb.write('[');
500 for (int i = 0 ; i < length ; i++) { 510 for (int i = 0; i < length; i++) {
501 if (i > 0) sb.write(', '); 511 if (i > 0) sb.write(', ');
502 sb.write(entries[i].toStructuredString()); 512 sb.write(entries[i].toStructuredString());
503 } 513 }
504 sb.write('])'); 514 sb.write('])');
505 return sb.toString(); 515 return sb.toString();
506 } 516 }
507 } 517 }
508 518
509 class MapConstantValue extends ObjectConstantValue { 519 class MapConstantValue extends ObjectConstantValue {
510 final List<ConstantValue> keys; 520 final List<ConstantValue> keys;
511 final List<ConstantValue> values; 521 final List<ConstantValue> values;
512 final int hashCode; 522 final int hashCode;
513 Map<ConstantValue, ConstantValue> _lookupMap; 523 Map<ConstantValue, ConstantValue> _lookupMap;
514 524
515 MapConstantValue(InterfaceType type, 525 MapConstantValue(
516 List<ConstantValue> keys, 526 InterfaceType type, List<ConstantValue> keys, List<ConstantValue> values)
517 List<ConstantValue> values)
518 : this.keys = keys, 527 : this.keys = keys,
519 this.values = values, 528 this.values = values,
520 this.hashCode = Hashing.listHash(values, 529 this.hashCode = Hashing.listHash(
521 Hashing.listHash(keys, 530 values, Hashing.listHash(keys, Hashing.objectHash(type))),
522 Hashing.objectHash(type))),
523 super(type) { 531 super(type) {
524 assert(keys.length == values.length); 532 assert(keys.length == values.length);
525 } 533 }
526 534
527 bool get isMap => true; 535 bool get isMap => true;
528 536
529 bool operator ==(var other) { 537 bool operator ==(var other) {
530 if (identical(this, other)) return true; 538 if (identical(this, other)) return true;
531 if (other is !MapConstantValue) return false; 539 if (other is! MapConstantValue) return false;
532 MapConstantValue otherMap = other; 540 MapConstantValue otherMap = other;
533 if (hashCode != otherMap.hashCode) return false; 541 if (hashCode != otherMap.hashCode) return false;
534 if (type != other.type) return false; 542 if (type != other.type) return false;
535 if (length != other.length) return false; 543 if (length != other.length) return false;
536 for (int i = 0; i < length; i++) { 544 for (int i = 0; i < length; i++) {
537 if (keys[i] != otherMap.keys[i]) return false; 545 if (keys[i] != otherMap.keys[i]) return false;
538 if (values[i] != otherMap.values[i]) return false; 546 if (values[i] != otherMap.values[i]) return false;
539 } 547 }
540 return true; 548 return true;
541 } 549 }
(...skipping 12 matching lines...) Expand all
554 new Map<ConstantValue, ConstantValue>.fromIterables(keys, values); 562 new Map<ConstantValue, ConstantValue>.fromIterables(keys, values);
555 return lookupMap[key]; 563 return lookupMap[key];
556 } 564 }
557 565
558 accept(ConstantValueVisitor visitor, arg) => visitor.visitMap(this, arg); 566 accept(ConstantValueVisitor visitor, arg) => visitor.visitMap(this, arg);
559 567
560 String unparse() { 568 String unparse() {
561 StringBuffer sb = new StringBuffer(); 569 StringBuffer sb = new StringBuffer();
562 _unparseTypeArguments(sb); 570 _unparseTypeArguments(sb);
563 sb.write('{'); 571 sb.write('{');
564 for (int i = 0 ; i < length ; i++) { 572 for (int i = 0; i < length; i++) {
565 if (i > 0) sb.write(','); 573 if (i > 0) sb.write(',');
566 sb.write(keys[i].unparse()); 574 sb.write(keys[i].unparse());
567 sb.write(':'); 575 sb.write(':');
568 sb.write(values[i].unparse()); 576 sb.write(values[i].unparse());
569 } 577 }
570 sb.write('}'); 578 sb.write('}');
571 return sb.toString(); 579 return sb.toString();
572 } 580 }
573 581
574 String toStructuredString() { 582 String toStructuredString() {
(...skipping 15 matching lines...) Expand all
590 class InterceptorConstantValue extends ConstantValue { 598 class InterceptorConstantValue extends ConstantValue {
591 /// The type for which this interceptor holds the methods. The constant 599 /// The type for which this interceptor holds the methods. The constant
592 /// is a dispatch table for this type. 600 /// is a dispatch table for this type.
593 final DartType dispatchedType; 601 final DartType dispatchedType;
594 602
595 InterceptorConstantValue(this.dispatchedType); 603 InterceptorConstantValue(this.dispatchedType);
596 604
597 bool get isInterceptor => true; 605 bool get isInterceptor => true;
598 606
599 bool operator ==(other) { 607 bool operator ==(other) {
600 return other is InterceptorConstantValue 608 return other is InterceptorConstantValue &&
601 && dispatchedType == other.dispatchedType; 609 dispatchedType == other.dispatchedType;
602 } 610 }
603 611
604 int get hashCode => dispatchedType.hashCode * 43; 612 int get hashCode => dispatchedType.hashCode * 43;
605 613
606 List<ConstantValue> getDependencies() => const <ConstantValue>[]; 614 List<ConstantValue> getDependencies() => const <ConstantValue>[];
607 615
608 accept(ConstantValueVisitor visitor, arg) { 616 accept(ConstantValueVisitor visitor, arg) {
609 return visitor.visitInterceptor(this, arg); 617 return visitor.visitInterceptor(this, arg);
610 } 618 }
611 619
(...skipping 10 matching lines...) Expand all
622 630
623 class SyntheticConstantValue extends ConstantValue { 631 class SyntheticConstantValue extends ConstantValue {
624 final payload; 632 final payload;
625 final kind; 633 final kind;
626 634
627 SyntheticConstantValue(this.kind, this.payload); 635 SyntheticConstantValue(this.kind, this.payload);
628 636
629 bool get isDummy => true; 637 bool get isDummy => true;
630 638
631 bool operator ==(other) { 639 bool operator ==(other) {
632 return other is SyntheticConstantValue 640 return other is SyntheticConstantValue && payload == other.payload;
633 && payload == other.payload;
634 } 641 }
635 642
636 get hashCode => payload.hashCode * 17 + kind.hashCode; 643 get hashCode => payload.hashCode * 17 + kind.hashCode;
637 644
638 List<ConstantValue> getDependencies() => const <ConstantValue>[]; 645 List<ConstantValue> getDependencies() => const <ConstantValue>[];
639 646
640 accept(ConstantValueVisitor visitor, arg) { 647 accept(ConstantValueVisitor visitor, arg) {
641 return visitor.visitSynthetic(this, arg); 648 return visitor.visitSynthetic(this, arg);
642 } 649 }
643 650
644 DartType getType(CoreTypes types) => const DynamicType(); 651 DartType getType(CoreTypes types) => const DynamicType();
645 652
646 String unparse() => 'synthetic($kind, $payload)'; 653 String unparse() => 'synthetic($kind, $payload)';
647 654
648 String toStructuredString() => 'SyntheticConstant($kind, $payload)'; 655 String toStructuredString() => 'SyntheticConstant($kind, $payload)';
649 } 656 }
650 657
651 class ConstructedConstantValue extends ObjectConstantValue { 658 class ConstructedConstantValue extends ObjectConstantValue {
652 final Map<FieldElement, ConstantValue> fields; 659 final Map<FieldElement, ConstantValue> fields;
653 final int hashCode; 660 final int hashCode;
654 661
655 ConstructedConstantValue(InterfaceType type, 662 ConstructedConstantValue(
656 Map<FieldElement, ConstantValue> fields) 663 InterfaceType type, Map<FieldElement, ConstantValue> fields)
657 : this.fields = fields, 664 : this.fields = fields,
658 hashCode = Hashing.mapHash(fields, Hashing.objectHash(type)), 665 hashCode = Hashing.mapHash(fields, Hashing.objectHash(type)),
659 super(type) { 666 super(type) {
660 assert(type != null); 667 assert(type != null);
661 assert(!fields.containsValue(null)); 668 assert(!fields.containsValue(null));
662 } 669 }
663 670
664 bool get isConstructedObject => true; 671 bool get isConstructedObject => true;
665 672
666 bool operator ==(var otherVar) { 673 bool operator ==(var otherVar) {
667 if (identical(this, otherVar)) return true; 674 if (identical(this, otherVar)) return true;
668 if (otherVar is !ConstructedConstantValue) return false; 675 if (otherVar is! ConstructedConstantValue) return false;
669 ConstructedConstantValue other = otherVar; 676 ConstructedConstantValue other = otherVar;
670 if (hashCode != other.hashCode) return false; 677 if (hashCode != other.hashCode) return false;
671 if (type != other.type) return false; 678 if (type != other.type) return false;
672 if (fields.length != other.fields.length) return false; 679 if (fields.length != other.fields.length) return false;
673 for (FieldElement field in fields.keys) { 680 for (FieldElement field in fields.keys) {
674 if (fields[field] != other.fields[field]) return false; 681 if (fields[field] != other.fields[field]) return false;
675 } 682 }
676 return true; 683 return true;
677 } 684 }
678 685
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 /// Used for referring to deferred constants. 728 /// Used for referring to deferred constants.
722 class DeferredConstantValue extends ConstantValue { 729 class DeferredConstantValue extends ConstantValue {
723 DeferredConstantValue(this.referenced, this.prefix); 730 DeferredConstantValue(this.referenced, this.prefix);
724 731
725 final ConstantValue referenced; 732 final ConstantValue referenced;
726 final PrefixElement prefix; 733 final PrefixElement prefix;
727 734
728 bool get isReference => true; 735 bool get isReference => true;
729 736
730 bool operator ==(other) { 737 bool operator ==(other) {
731 return other is DeferredConstantValue 738 return other is DeferredConstantValue &&
732 && referenced == other.referenced 739 referenced == other.referenced &&
733 && prefix == other.prefix; 740 prefix == other.prefix;
734 } 741 }
735 742
736 get hashCode => (referenced.hashCode * 17 + prefix.hashCode) & 0x3fffffff; 743 get hashCode => (referenced.hashCode * 17 + prefix.hashCode) & 0x3fffffff;
737 744
738 List<ConstantValue> getDependencies() => <ConstantValue>[referenced]; 745 List<ConstantValue> getDependencies() => <ConstantValue>[referenced];
739 746
740 accept(ConstantValueVisitor visitor, arg) => visitor.visitDeferred(this, arg); 747 accept(ConstantValueVisitor visitor, arg) => visitor.visitDeferred(this, arg);
741 748
742 DartType getType(CoreTypes types) => referenced.getType(types); 749 DartType getType(CoreTypes types) => referenced.getType(types);
743 750
(...skipping 18 matching lines...) Expand all
762 769
763 @override 770 @override
764 DartType getType(CoreTypes types) => const DynamicType(); 771 DartType getType(CoreTypes types) => const DynamicType();
765 772
766 @override 773 @override
767 String toStructuredString() => 'NonConstant'; 774 String toStructuredString() => 'NonConstant';
768 775
769 @override 776 @override
770 String unparse() => '>>non-constant<<'; 777 String unparse() => '>>non-constant<<';
771 } 778 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/constants/expressions.dart ('k') | pkg/compiler/lib/src/cps_ir/backward_null_check_remover.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698