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

Side by Side Diff: lib/src/closure/closure_type.dart

Issue 1778623002: DDC: remove dumpInfo flag (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 9 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 | « bin/edit_files.dart ('k') | lib/src/codegen/js_codegen.dart » ('j') | 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) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 /// Poor-man's representation of a Closure type. 5 /// Poor-man's representation of a Closure type.
6 /// See https://developers.google.com/closure/compiler/docs/js-for-compiler 6 /// See https://developers.google.com/closure/compiler/docs/js-for-compiler
7 /// 7 ///
8 /// The goal here is not to completely support Closure's type system, but to 8 /// The goal here is not to completely support Closure's type system, but to
9 /// be able to generate just the types needed for DDC's JS output. 9 /// be able to generate just the types needed for DDC's JS output.
10 /// 10 ///
11 /// TODO(ochafik): Consider convergence with TypeScript, which has no nullabilit y-awareness 11 /// TODO(ochafik): Consider convergence with TypeScript, which has no nullabilit y-awareness
12 /// (see http://www.typescriptlang.org/Handbook). 12 /// (see http://www.typescriptlang.org/Handbook).
13 class ClosureType { 13 class ClosureType {
14 static const ClosureType _ALL = const ClosureType._("*"); 14 static const ClosureType _ALL = const ClosureType._("*");
15 static const ClosureType _UNKNOWN = const ClosureType._("?"); 15 static const ClosureType _UNKNOWN = const ClosureType._("?");
16 16
17 final String _representation; 17 final String _representation;
18 final bool isNullable; 18 final bool isNullable;
19 19
20 const ClosureType._(this._representation, {this.isNullable: true}); 20 const ClosureType._(this._representation, {this.isNullable: true});
21 21
22 bool get isAll => _representation == "*"; 22 bool get isAll => _representation == "*";
23 bool get isUnknown => _representation == "?"; 23 bool get isUnknown => _representation == "?";
24 24
25 @override toString() => _representation; 25 @override
26 toString() => _representation;
26 27
27 factory ClosureType.all() => _ALL; 28 factory ClosureType.all() => _ALL;
28 factory ClosureType.unknown() => _UNKNOWN; 29 factory ClosureType.unknown() => _UNKNOWN;
29 30
30 factory ClosureType.record(Map<String, ClosureType> fieldTypes) { 31 factory ClosureType.record(Map<String, ClosureType> fieldTypes) {
31 var entries = <String>[]; 32 var entries = <String>[];
32 fieldTypes.forEach((n, t) => entries.add('$n: $t')); 33 fieldTypes.forEach((n, t) => entries.add('$n: $t'));
33 return new ClosureType._('{${entries.join(', ')}}'); 34 return new ClosureType._('{${entries.join(', ')}}');
34 } 35 }
35 factory ClosureType.function( 36 factory ClosureType.function(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 : "!$this", 78 : "!$this",
78 isNullable: false); 79 isNullable: false);
79 80
80 /// TODO(ochafik): See which optimizations make sense here (it could be that ` (*|undefined)` 81 /// TODO(ochafik): See which optimizations make sense here (it could be that ` (*|undefined)`
81 /// cannot be optimized to `*` when used to model optional record fields). 82 /// cannot be optimized to `*` when used to model optional record fields).
82 ClosureType or(ClosureType other) => new ClosureType._("($this|$other)", 83 ClosureType or(ClosureType other) => new ClosureType._("($this|$other)",
83 isNullable: isNullable || other.isNullable); 84 isNullable: isNullable || other.isNullable);
84 85
85 ClosureType orUndefined() => or(new ClosureType.undefined()); 86 ClosureType orUndefined() => or(new ClosureType.undefined());
86 } 87 }
OLDNEW
« no previous file with comments | « bin/edit_files.dart ('k') | lib/src/codegen/js_codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698