| Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| index 9449644ad52158c6618779da3c14380453b7d029..bb4a8b674ed6e4d9a99217db9710d4020fdab0b2 100644
|
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| @@ -331,12 +331,6 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> {
|
| }
|
|
|
| @override
|
| - js.Expression visitReifyTypeVar(tree_ir.ReifyTypeVar node) {
|
| - return giveup(node);
|
| - // TODO: implement visitReifyTypeVar
|
| - }
|
| -
|
| - @override
|
| js.Expression visitThis(tree_ir.This node) {
|
| return new js.This();
|
| }
|
| @@ -517,9 +511,47 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> {
|
| visitStatement(node.next);
|
| }
|
|
|
| + js.Expression buildStaticHelperInvocation(FunctionElement helper,
|
| + List<js.Expression> arguments) {
|
| + registry.registerStaticUse(helper);
|
| + return buildStaticInvoke(new Selector.fromElement(helper), helper,
|
| + arguments);
|
| + }
|
| +
|
| + @override
|
| + js.Expression visitReifyRuntimeType(tree_ir.ReifyRuntimeType node) {
|
| + FunctionElement createType = glue.getCreateRuntimeType();
|
| + FunctionElement typeToString = glue.getRuntimeTypeToString();
|
| + return buildStaticHelperInvocation(createType,
|
| + [buildStaticHelperInvocation(typeToString,
|
| + [visitExpression(node.value)])]);
|
| + }
|
| +
|
| + @override
|
| + js.Expression visitReadTypeVariable(tree_ir.ReadTypeVariable node) {
|
| + ClassElement context = node.variable.element.enclosingClass;
|
| + js.Expression index = js.number(glue.getTypeVariableIndex(node.variable));
|
| + if (glue.needsSubstitutionForTypeVariableAccess(context)) {
|
| + js.Expression substitution = glue.getSubstitutionName(context);
|
| + return buildStaticHelperInvocation(
|
| + glue.getTypeArgumentWithSubstitution(),
|
| + [visitExpression(node.target), substitution, index]);
|
| + } else {
|
| + return buildStaticHelperInvocation(
|
| + glue.getTypeArgumentByIndex(),
|
| + [visitExpression(node.target), index]);
|
| + }
|
| + }
|
| +
|
| +
|
| // Dart-specific IR nodes
|
|
|
| @override
|
| + visitReifyTypeVar(tree_ir.ReifyTypeVar node) {
|
| + return errorUnsupportedNode(node);
|
| + }
|
| +
|
| + @override
|
| visitFunctionExpression(tree_ir.FunctionExpression node) {
|
| return errorUnsupportedNode(node);
|
| }
|
| @@ -539,7 +571,7 @@ class CodeGenerator extends tree_ir.Visitor<dynamic, js.Expression> {
|
| return errorUnsupportedNode(node);
|
| }
|
|
|
| - dynamic errorUnsupportedNode(tree_ir.DartSpecificNode node) {
|
| + errorUnsupportedNode(tree_ir.DartSpecificNode node) {
|
| throw "Unsupported node in JS backend: $node";
|
| }
|
| }
|
|
|