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

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

Issue 2614983004: Reapply 0c78abd0900d (Closed)
Patch Set: . Created 3 years, 11 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 'package:js_runtime/shared/embedded_names.dart'; 5 import 'package:js_runtime/shared/embedded_names.dart';
6 import 'package:kernel/ast.dart' as ir; 6 import 'package:kernel/ast.dart' as ir;
7 7
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/names.dart'; 9 import '../common/names.dart';
10 import '../compiler.dart'; 10 import '../compiler.dart';
(...skipping 18 matching lines...) Expand all
29 import '../world.dart'; 29 import '../world.dart';
30 import 'locals_handler.dart'; 30 import 'locals_handler.dart';
31 import 'types.dart'; 31 import 'types.dart';
32 32
33 /// A helper class that abstracts all accesses of the AST from Kernel nodes. 33 /// A helper class that abstracts all accesses of the AST from Kernel nodes.
34 /// 34 ///
35 /// The goal is to remove all need for the AST from the Kernel SSA builder. 35 /// The goal is to remove all need for the AST from the Kernel SSA builder.
36 class KernelAstAdapter { 36 class KernelAstAdapter {
37 final Kernel kernel; 37 final Kernel kernel;
38 final JavaScriptBackend _backend; 38 final JavaScriptBackend _backend;
39 final ResolvedAst _resolvedAst;
40 final Map<ir.Node, ast.Node> _nodeToAst; 39 final Map<ir.Node, ast.Node> _nodeToAst;
41 final Map<ir.Node, Element> _nodeToElement; 40 final Map<ir.Node, Element> _nodeToElement;
42 final Map<ir.VariableDeclaration, SyntheticLocal> _syntheticLocals = 41 final Map<ir.VariableDeclaration, SyntheticLocal> _syntheticLocals =
43 <ir.VariableDeclaration, SyntheticLocal>{}; 42 <ir.VariableDeclaration, SyntheticLocal>{};
44 final Map<ir.LabeledStatement, KernelJumpTarget> _jumpTargets = 43 final Map<ir.LabeledStatement, KernelJumpTarget> _jumpTargets =
45 <ir.LabeledStatement, KernelJumpTarget>{}; 44 <ir.LabeledStatement, KernelJumpTarget>{};
46 DartTypeConverter _typeConverter; 45 DartTypeConverter _typeConverter;
46 ResolvedAst _resolvedAst;
47
48 /// Sometimes for resolution the resolved AST element needs to change (for
49 /// example, if we're inlining, or if we're in a constructor, but then also
50 /// constructing the field values). We keep track of this with a stack.
51 final List<ResolvedAst> _resolvedAstStack = <ResolvedAst>[];
47 52
48 KernelAstAdapter(this.kernel, this._backend, this._resolvedAst, 53 KernelAstAdapter(this.kernel, this._backend, this._resolvedAst,
49 this._nodeToAst, this._nodeToElement) { 54 this._nodeToAst, this._nodeToElement) {
50 // TODO(het): Maybe just use all of the kernel maps directly? 55 // TODO(het): Maybe just use all of the kernel maps directly?
51 for (FieldElement fieldElement in kernel.fields.keys) { 56 for (FieldElement fieldElement in kernel.fields.keys) {
52 _nodeToElement[kernel.fields[fieldElement]] = fieldElement; 57 _nodeToElement[kernel.fields[fieldElement]] = fieldElement;
53 } 58 }
54 for (FunctionElement functionElement in kernel.functions.keys) { 59 for (FunctionElement functionElement in kernel.functions.keys) {
55 _nodeToElement[kernel.functions[functionElement]] = functionElement; 60 _nodeToElement[kernel.functions[functionElement]] = functionElement;
56 } 61 }
57 for (ClassElement classElement in kernel.classes.keys) { 62 for (ClassElement classElement in kernel.classes.keys) {
58 _nodeToElement[kernel.classes[classElement]] = classElement; 63 _nodeToElement[kernel.classes[classElement]] = classElement;
59 } 64 }
60 for (LibraryElement libraryElement in kernel.libraries.keys) { 65 for (LibraryElement libraryElement in kernel.libraries.keys) {
61 _nodeToElement[kernel.libraries[libraryElement]] = libraryElement; 66 _nodeToElement[kernel.libraries[libraryElement]] = libraryElement;
62 } 67 }
63 for (LocalFunctionElement localFunction in kernel.localFunctions.keys) { 68 for (LocalFunctionElement localFunction in kernel.localFunctions.keys) {
64 _nodeToElement[kernel.localFunctions[localFunction]] = localFunction; 69 _nodeToElement[kernel.localFunctions[localFunction]] = localFunction;
65 } 70 }
66 for (TypeVariableElement typeVariable in kernel.typeParameters.keys) { 71 for (TypeVariableElement typeVariable in kernel.typeParameters.keys) {
67 _nodeToElement[kernel.typeParameters[typeVariable]] = typeVariable; 72 _nodeToElement[kernel.typeParameters[typeVariable]] = typeVariable;
68 } 73 }
69 _typeConverter = new DartTypeConverter(this); 74 _typeConverter = new DartTypeConverter(this);
70 } 75 }
71 76
77 /// Push the existing resolved AST on the stack and shift the current resolved
78 /// AST to the AST that this kernel node points to.
79 void pushResolvedAst(ir.Node node) {
80 _resolvedAstStack.add(_resolvedAst);
81 _resolvedAst = (getElement(node) as AstElement).resolvedAst;
82 }
83
84 /// Pop the resolved AST stack to reset it to the previous resolved AST node.
85 void popResolvedAstStack() {
86 assert(_resolvedAstStack.isNotEmpty);
87 _resolvedAst = _resolvedAstStack.removeLast();
88 }
89
72 Compiler get _compiler => _backend.compiler; 90 Compiler get _compiler => _backend.compiler;
73 TreeElements get elements => _resolvedAst.elements; 91 TreeElements get elements => _resolvedAst.elements;
74 DiagnosticReporter get reporter => _compiler.reporter; 92 DiagnosticReporter get reporter => _compiler.reporter;
75 Element get _target => _resolvedAst.element; 93 Element get _target => _resolvedAst.element;
76 94
77 GlobalTypeInferenceResults get _globalInferenceResults => 95 GlobalTypeInferenceResults get _globalInferenceResults =>
78 _compiler.globalInference.results; 96 _compiler.globalInference.results;
79 97
80 GlobalTypeInferenceElementResult _resultOf(Element e) => 98 GlobalTypeInferenceElementResult _resultOf(Element e) =>
81 _globalInferenceResults.resultOf(e); 99 _globalInferenceResults.resultOf(e);
(...skipping 860 matching lines...) Expand 10 before | Expand all | Expand 10 after
942 960
943 @override 961 @override
944 String get name => null; 962 String get name => null;
945 963
946 @override 964 @override
947 int get nestingLevel => 1; 965 int get nestingLevel => 1;
948 966
949 @override 967 @override
950 ast.Node get statement => null; 968 ast.Node get statement => null;
951 } 969 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | tests/compiler/dart2js/categories_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698