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

Unified Diff: lib/src/compiler/code_generator.dart

Issue 2015753002: Angular template workarounds (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/compiler/code_generator.dart
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart
index fe4cb839604813271212515cc00531e048fd9819..c65209faab53de2607d01f646db2799835b439fb 100644
--- a/lib/src/compiler/code_generator.dart
+++ b/lib/src/compiler/code_generator.dart
@@ -126,6 +126,8 @@ class CodeGenerator extends GeneralizingAstVisitor
bool _superAllowed = true;
+ bool _inAngularTemplate = false;
+
List<JS.TemporaryId> _superHelperSymbols = <JS.TemporaryId>[];
List<JS.Method> _superHelpers = <JS.Method>[];
@@ -424,6 +426,9 @@ class CodeGenerator extends GeneralizingAstVisitor
@override
void visitCompilationUnit(CompilationUnit unit) {
+ _inAngularTemplate =
Jennifer Messerly 2016/05/26 18:19:02 can we have this guarded by a compile flag please?
+ unit.element.source.fullName.endsWith(".template.dart");
Jennifer Messerly 2016/05/26 18:19:02 So, this doesn't work... I should put a comment on
+
_constField = new ConstFieldVisitor(types, unit.element.source);
for (var declaration in unit.declarations) {
@@ -437,6 +442,7 @@ class CodeGenerator extends GeneralizingAstVisitor
for (var directive in unit.directives) {
directive.accept(this);
}
+ _inAngularTemplate = false;
}
@override
@@ -542,6 +548,7 @@ class CodeGenerator extends GeneralizingAstVisitor
var type = _emitType(to,
nameType: options.nameTypeTests || options.hoistTypeTests,
hoistType: options.hoistTypeTests);
+ if (_inAngularTemplate) return jsFrom;
return js.call('dart.as(#, #)', [jsFrom, type]);
}
@@ -1720,7 +1727,9 @@ class CodeGenerator extends GeneralizingAstVisitor
var castType = _emitType(paramType,
nameType: options.nameTypeTests || options.hoistTypeTests,
hoistType: options.hoistTypeTests);
- body.add(js.statement('dart.as(#, #);', [jsParam, castType]));
+ if (!_inAngularTemplate) {
+ body.add(js.statement('dart.as(#, #);', [jsParam, castType]));
+ }
}
}
return body.isEmpty ? null : _statement(body);
@@ -2517,6 +2526,9 @@ class CodeGenerator extends GeneralizingAstVisitor
}
if (target != null && DynamicInvoke.get(target)) {
+ if (_inAngularTemplate) {
+ return _visit(rhs).toAssignExpression(_visit(lhs));
+ }
return js.call('dart.dput(#, #, #)',
[_visit(target), _emitMemberName(id.name), _visit(rhs)]);
}
@@ -2647,6 +2659,11 @@ class CodeGenerator extends GeneralizingAstVisitor
JS.Expression jsTarget = _visit(target);
if (DynamicInvoke.get(target) || DynamicInvoke.get(node.methodName)) {
+ if (_inAngularTemplate) {
+ jsTarget = new JS.PropertyAccess(jsTarget, memberName);
+ if (typeArgs != null) jsTarget = new JS.Call(jsTarget, typeArgs);
+ return new JS.Call(jsTarget, args);
+ }
if (typeArgs != null) {
return js.call('dart.dgsend(#, #, #, #)',
[jsTarget, new JS.ArrayInitializer(typeArgs), memberName, args]);
@@ -2676,6 +2693,9 @@ class CodeGenerator extends GeneralizingAstVisitor
return js.call('dart.dgcall(#, #, #)',
[fn, new JS.ArrayInitializer(typeArgs), args]);
} else {
+ if (_inAngularTemplate) {
+ return new JS.Call(fn, args);
+ }
return js.call('dart.dcall(#, #)', [fn, args]);
}
} else {
@@ -3854,6 +3874,9 @@ class CodeGenerator extends GeneralizingAstVisitor
var name = _emitMemberName(memberName,
type: getStaticType(target), isStatic: isStatic);
if (DynamicInvoke.get(target)) {
+ if (_inAngularTemplate) {
+ return js.call('#.#', [_visit(target), name]);
+ }
return js.call('dart.dload(#, #)', [_visit(target), name]);
}
@@ -3904,8 +3927,13 @@ class CodeGenerator extends GeneralizingAstVisitor
return js.call(
'dart.$dynamicHelper(#, #)', [_visit(target), _visitList(args)]);
}
- return js.call('dart.dsend(#, #, #)',
- [_visit(target), memberName, _visitList(args)]);
+ if (_inAngularTemplate) {
+ return js
+ .call('#.#(#)', [_visit(target), memberName, _visitList(args)]);
+ } else {
+ return js.call('dart.dsend(#, #, #)',
+ [_visit(target), memberName, _visitList(args)]);
+ }
}
// Generic dispatch to a statically known method.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698