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

Unified Diff: sdk/lib/_internal/compiler/implementation/native_handler.dart

Issue 237583014: JS templates (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: cleanup Created 6 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 side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/native_handler.dart
diff --git a/sdk/lib/_internal/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
index f5caa613ec9f0cf6c12aaece4f46a86a157e437e..df70f15d759081556947256524101b983963d5bd 100644
--- a/sdk/lib/_internal/compiler/implementation/native_handler.dart
+++ b/sdk/lib/_internal/compiler/implementation/native_handler.dart
@@ -767,9 +767,9 @@ class NativeBehavior {
/// [DartType]s or [SpecialType]s instantiated by the native element.
final List typesInstantiated = [];
- // If this behavior is for a JS expression, [codeAst] contains the
+ // If this behavior is for a JS expression, [codeTemplate] contains the
// parsed tree.
- js.Expression codeAst;
+ js.Template codeTemplate;
final SideEffects sideEffects = new SideEffects.empty();
@@ -800,8 +800,8 @@ class NativeBehavior {
}
var behavior = new NativeBehavior();
- behavior.codeAst = js.js.parseForeignJS(code.dartString.slowToString());
- new SideEffectsVisitor(behavior.sideEffects).visit(behavior.codeAst);
+ behavior.codeTemplate = js.js.parseForeignJS(code.dartString.slowToString());
+ new SideEffectsVisitor(behavior.sideEffects).visit(behavior.codeTemplate.ast);
String specString = specLiteral.dartString.slowToString();
// Various things that are not in fact types.
@@ -1162,8 +1162,14 @@ void handleSsaNative(SsaBuilder builder, Expression nativeBody) {
'Unexpected kind: "${element.kind}".');
}
- builder.push(new HForeign(js.js(nativeMethodCall), backend.dynamicType,
- inputs, effects: new SideEffects()));
+ builder.push(
+ new HForeign(
+ // TODO(sra): This could be cached. The number of templates should
+ // be proportional to the number of native methods, which is bounded
+ // by the dart: libraries.
+ js.js.uncachedExpressionTemplate(nativeMethodCall),
+ backend.dynamicType,
+ inputs, effects: new SideEffects()));
builder.close(new HReturn(builder.pop())).addSuccessor(builder.graph.exit);
} else {
if (parameters.parameterCount != 0) {
@@ -1173,7 +1179,8 @@ void handleSsaNative(SsaBuilder builder, Expression nativeBody) {
}
LiteralString jsCode = nativeBody.asLiteralString();
builder.push(new HForeign.statement(
- new js.LiteralStatement(jsCode.dartString.slowToString()),
+ js.js.expressionTemplateYielding(
+ new js.LiteralStatement(jsCode.dartString.slowToString())),
<HInstruction>[],
new SideEffects(),
null,

Powered by Google App Engine
This is Rietveld 408576698