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

Side by Side Diff: pkg/compiler/lib/src/ssa/codegen.dart

Issue 1902363002: Derive source information from ResolvedAst. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 import '../common.dart'; 5 import '../common.dart';
6 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem; 6 import '../common/codegen.dart' show CodegenRegistry, CodegenWorkItem;
7 import '../common/tasks.dart' show CompilerTask; 7 import '../common/tasks.dart' show CompilerTask;
8 import '../compiler.dart' show Compiler; 8 import '../compiler.dart' show Compiler;
9 import '../constants/constant_system.dart'; 9 import '../constants/constant_system.dart';
10 import '../constants/values.dart'; 10 import '../constants/values.dart';
(...skipping 21 matching lines...) Expand all
32 final SourceInformationStrategy sourceInformationFactory; 32 final SourceInformationStrategy sourceInformationFactory;
33 33
34 SsaCodeGeneratorTask(JavaScriptBackend backend, this.sourceInformationFactory) 34 SsaCodeGeneratorTask(JavaScriptBackend backend, this.sourceInformationFactory)
35 : this.backend = backend, 35 : this.backend = backend,
36 super(backend.compiler); 36 super(backend.compiler);
37 37
38 String get name => 'SSA code generator'; 38 String get name => 'SSA code generator';
39 NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter; 39 NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter;
40 40
41 js.Fun buildJavaScriptFunction( 41 js.Fun buildJavaScriptFunction(
42 FunctionElement element, List<js.Parameter> parameters, js.Block body) { 42 ResolvedAst resolvedAst, List<js.Parameter> parameters, js.Block body) {
43 FunctionElement element = resolvedAst.element;
43 js.AsyncModifier asyncModifier = element.asyncMarker.isAsync 44 js.AsyncModifier asyncModifier = element.asyncMarker.isAsync
44 ? (element.asyncMarker.isYielding 45 ? (element.asyncMarker.isYielding
45 ? const js.AsyncModifier.asyncStar() 46 ? const js.AsyncModifier.asyncStar()
46 : const js.AsyncModifier.async()) 47 : const js.AsyncModifier.async())
47 : (element.asyncMarker.isYielding 48 : (element.asyncMarker.isYielding
48 ? const js.AsyncModifier.syncStar() 49 ? const js.AsyncModifier.syncStar()
49 : const js.AsyncModifier.sync()); 50 : const js.AsyncModifier.sync());
50 51
51 return new js.Fun(parameters, body, asyncModifier: asyncModifier) 52 return new js.Fun(parameters, body, asyncModifier: asyncModifier)
52 .withSourceInformation(sourceInformationFactory 53 .withSourceInformation(sourceInformationFactory
53 .createBuilderForContext(element) 54 .createBuilderForContext(resolvedAst.element)
54 .buildDeclaration(element)); 55 .buildDeclaration(resolvedAst));
55 } 56 }
56 57
57 js.Expression generateCode(CodegenWorkItem work, HGraph graph) { 58 js.Expression generateCode(CodegenWorkItem work, HGraph graph) {
58 if (work.element.isField) { 59 if (work.element.isField) {
59 return generateLazyInitializer(work, graph); 60 return generateLazyInitializer(work, graph);
60 } else { 61 } else {
61 return generateMethod(work, graph); 62 return generateMethod(work, graph);
62 } 63 }
63 } 64 }
64 65
65 js.Expression generateLazyInitializer(work, graph) { 66 js.Expression generateLazyInitializer(CodegenWorkItem work, HGraph graph) {
66 return measure(() { 67 return measure(() {
67 compiler.tracer.traceGraph("codegen", graph); 68 compiler.tracer.traceGraph("codegen", graph);
68 SourceInformation sourceInformation = sourceInformationFactory 69 SourceInformation sourceInformation = sourceInformationFactory
69 .createBuilderForContext(work.element) 70 .createBuilderForContext(work.element)
70 .buildDeclaration(work.element); 71 .buildDeclaration(work.resolvedAst);
71 SsaCodeGenerator codegen = new SsaCodeGenerator(backend, work); 72 SsaCodeGenerator codegen = new SsaCodeGenerator(backend, work);
72 codegen.visitGraph(graph); 73 codegen.visitGraph(graph);
73 return new js.Fun(codegen.parameters, codegen.body) 74 return new js.Fun(codegen.parameters, codegen.body)
74 .withSourceInformation(sourceInformation); 75 .withSourceInformation(sourceInformation);
75 }); 76 });
76 } 77 }
77 78
78 js.Expression generateMethod(CodegenWorkItem work, HGraph graph) { 79 js.Expression generateMethod(CodegenWorkItem work, HGraph graph) {
79 return measure(() { 80 return measure(() {
80 FunctionElement element = work.element; 81 FunctionElement element = work.element;
81 if (element.asyncMarker != AsyncMarker.SYNC) { 82 if (element.asyncMarker != AsyncMarker.SYNC) {
82 work.registry.registerAsyncMarker(element); 83 work.registry.registerAsyncMarker(element);
83 } 84 }
84 SsaCodeGenerator codegen = new SsaCodeGenerator(backend, work); 85 SsaCodeGenerator codegen = new SsaCodeGenerator(backend, work);
85 codegen.visitGraph(graph); 86 codegen.visitGraph(graph);
86 compiler.tracer.traceGraph("codegen", graph); 87 compiler.tracer.traceGraph("codegen", graph);
87 return buildJavaScriptFunction(element, codegen.parameters, codegen.body); 88 return buildJavaScriptFunction(
89 work.resolvedAst, codegen.parameters, codegen.body);
88 }); 90 });
89 } 91 }
90 } 92 }
91 93
92 typedef void EntityAction(Entity element); 94 typedef void EntityAction(Entity element);
93 95
94 class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { 96 class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor {
95 /** 97 /**
96 * Returned by [expressionType] to tell how code can be generated for 98 * Returned by [expressionType] to tell how code can be generated for
97 * a subgraph. 99 * a subgraph.
(...skipping 2794 matching lines...) Expand 10 before | Expand all | Expand 10 after
2892 registry.registerStaticUse(new StaticUse.staticInvoke( 2894 registry.registerStaticUse(new StaticUse.staticInvoke(
2893 helper, new CallStructure.unnamed(argumentCount))); 2895 helper, new CallStructure.unnamed(argumentCount)));
2894 return backend.emitter.staticFunctionAccess(helper); 2896 return backend.emitter.staticFunctionAccess(helper);
2895 } 2897 }
2896 2898
2897 @override 2899 @override
2898 void visitRef(HRef node) { 2900 void visitRef(HRef node) {
2899 visit(node.value); 2901 visit(node.value);
2900 } 2902 }
2901 } 2903 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/serialization/modelz.dart ('k') | tests/compiler/dart2js/serialization_compilation_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698