Skip to content

Commit 08fb216

Browse files
author
John Messerly
committed
fixes #184, type literals now use emitTypeName
this fixes `dart.dynamic` as well as other cases covered by emitTypeName [email protected] Review URL: https://codereview.chromium.org/1142713004
1 parent 01d39ba commit 08fb216

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

pkg/dev_compiler/lib/src/codegen/js_codegen.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,13 @@ class JSCodegenVisitor extends GeneralizingAstVisitor with ConversionVisitor {
991991

992992
var name = element.name;
993993

994+
// type literal
995+
if (element is ClassElement ||
996+
element is DynamicElementImpl ||
997+
element is FunctionTypeAliasElement) {
998+
return _emitTypeName(fillDynamicTypeArgs(element.type, types));
999+
}
1000+
9941001
// library member
9951002
if (element.enclosingElement is CompilationUnitElement) {
9961003
return _maybeQualifiedName(

pkg/dev_compiler/lib/src/utils.dart

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -375,9 +375,12 @@ Object getConstantField(
375375
return (f == null || f.type != expectedType) ? null : f.value;
376376
}
377377

378-
ParameterizedType fillDynamicTypeArgs(ParameterizedType t, TypeProvider types) {
379-
var dyn = new List.filled(t.typeArguments.length, types.dynamicType);
380-
return t.substitute2(dyn, t.typeArguments);
378+
DartType fillDynamicTypeArgs(DartType t, TypeProvider types) {
379+
if (t is ParameterizedType) {
380+
var dyn = new List.filled(t.typeArguments.length, types.dynamicType);
381+
return t.substitute2(dyn, t.typeArguments);
382+
}
383+
return t;
381384
}
382385

383386
/// Similar to [SimpleIdentifier] inGetterContext, inSetterContext, and

pkg/dev_compiler/test/codegen/expect/misc.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,28 @@ var core = dart.import(core);
77
}
88
}
99
let UNINITIALIZED = dart.const(new _Uninitialized());
10+
let Generic$ = dart.generic(function(T) {
11+
class Generic extends core.Object {
12+
get type() {
13+
return Generic$();
14+
}
15+
}
16+
return Generic;
17+
});
18+
let Generic = Generic$();
1019
// Function main: () → dynamic
1120
function main() {
1221
core.print(dart.toString(1));
1322
core.print(dart.toString(1.0));
1423
core.print(dart.toString(1.1));
24+
let x = 42;
25+
core.print(dart.equals(x, dart.dynamic));
26+
core.print(dart.equals(x, Generic));
27+
core.print(new (Generic$(core.int))().type);
1528
}
1629
// Exports:
1730
exports.UNINITIALIZED = UNINITIALIZED;
31+
exports.Generic$ = Generic$;
32+
exports.Generic = Generic;
1833
exports.main = main;
1934
})(misc, core);

pkg/dev_compiler/test/codegen/misc.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,21 @@
77
const UNINITIALIZED = const _Uninitialized();
88
class _Uninitialized { const _Uninitialized(); }
99

10+
class Generic<T> {
11+
Type get type => Generic;
12+
}
13+
1014
main() {
1115
// Number literals in call expressions.
1216
print(1.toString());
1317
print(1.0.toString());
1418
print(1.1.toString());
19+
20+
// Type literals, #184
21+
dynamic x = 42;
22+
print(x == dynamic);
23+
print(x == Generic);
24+
25+
// Should be Generic<dynamic>
26+
print(new Generic<int>().type);
1527
}

0 commit comments

Comments
 (0)