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

Unified Diff: pkg/compiler/lib/src/ssa/builder_kernel.dart

Issue 2280743003: implement kernel -> ssa for function that returns a constant (Closed)
Patch Set: add todo Created 4 years, 4 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 | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index a44ea376a478b666944a3f7bd1aec3ab81e01edc..dc58408e7dae17b779b2c74a876d2f29f6ea61f9 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -7,6 +7,7 @@ import 'package:kernel/ast.dart' as ir;
import '../common/codegen.dart' show CodegenWorkItem;
import '../common/tasks.dart' show CompilerTask;
import '../compiler.dart';
+import '../diagnostics/spannable.dart';
import '../elements/elements.dart';
import '../io/source_information.dart';
import '../js_backend/backend.dart' show JavaScriptBackend;
@@ -116,4 +117,46 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder {
if (!isAborted()) closeAndGotoExit(new HGoto());
graph.finalize();
}
+
+ @override
+ void visitBlock(ir.Block block) {
+ assert(!isAborted());
+ for (ir.Statement statement in block.statements) {
+ statement.accept(this);
+ if (!isReachable) {
+ // The block has been aborted by a return or a throw.
+ if (stack.isNotEmpty) {
+ compiler.reporter.internalError(
+ NO_LOCATION_SPANNABLE, 'Non-empty instruction stack.');
+ }
+ return;
+ }
+ }
+ assert(!current.isClosed());
+ if (stack.isNotEmpty) {
+ compiler.reporter
+ .internalError(NO_LOCATION_SPANNABLE, 'Non-empty instruction stack');
+ }
+ }
+
+ @override
+ void visitReturnStatement(ir.ReturnStatement returnStatement) {
+ HInstruction value;
+ if (returnStatement.expression == null) {
+ value = graph.addConstantNull(compiler);
+ } else {
+ returnStatement.expression.accept(this);
+ value = pop();
+ // TODO(het): Check or trust the type of value
+ }
+ // TODO(het): Add source information
+ // TODO(het): Set a return value instead of closing the function when we
+ // support inlining.
+ closeAndGotoExit(new HReturn(value, null));
+ }
+
+ @override
+ void visitIntLiteral(ir.IntLiteral intLiteral) {
+ stack.add(graph.addConstantInt(intLiteral.value, compiler));
+ }
}
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/graph_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698