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

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

Issue 2615173002: Revert "Ensure we're looking at the correct resolved AST when initializing fields in constructors." (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 'dart:collection' show Queue;
9
10 import '../common.dart'; 8 import '../common.dart';
11 import '../common/names.dart'; 9 import '../common/names.dart';
12 import '../compiler.dart'; 10 import '../compiler.dart';
13 import '../constants/expressions.dart'; 11 import '../constants/expressions.dart';
14 import '../constants/values.dart'; 12 import '../constants/values.dart';
15 import '../elements/resolution_types.dart'; 13 import '../elements/resolution_types.dart';
16 import '../elements/elements.dart'; 14 import '../elements/elements.dart';
17 import '../elements/modelx.dart'; 15 import '../elements/modelx.dart';
18 import '../js/js.dart' as js; 16 import '../js/js.dart' as js;
19 import '../js_backend/backend_helpers.dart'; 17 import '../js_backend/backend_helpers.dart';
(...skipping 11 matching lines...) Expand all
31 import '../world.dart'; 29 import '../world.dart';
32 import 'locals_handler.dart'; 30 import 'locals_handler.dart';
33 import 'types.dart'; 31 import 'types.dart';
34 32
35 /// 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.
36 /// 34 ///
37 /// 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.
38 class KernelAstAdapter { 36 class KernelAstAdapter {
39 final Kernel kernel; 37 final Kernel kernel;
40 final JavaScriptBackend _backend; 38 final JavaScriptBackend _backend;
39 final ResolvedAst _resolvedAst;
41 final Map<ir.Node, ast.Node> _nodeToAst; 40 final Map<ir.Node, ast.Node> _nodeToAst;
42 final Map<ir.Node, Element> _nodeToElement; 41 final Map<ir.Node, Element> _nodeToElement;
43 final Map<ir.VariableDeclaration, SyntheticLocal> _syntheticLocals = 42 final Map<ir.VariableDeclaration, SyntheticLocal> _syntheticLocals =
44 <ir.VariableDeclaration, SyntheticLocal>{}; 43 <ir.VariableDeclaration, SyntheticLocal>{};
45 final Map<ir.LabeledStatement, KernelJumpTarget> _jumpTargets = 44 final Map<ir.LabeledStatement, KernelJumpTarget> _jumpTargets =
46 <ir.LabeledStatement, KernelJumpTarget>{}; 45 <ir.LabeledStatement, KernelJumpTarget>{};
47 DartTypeConverter _typeConverter; 46 DartTypeConverter _typeConverter;
48 ResolvedAst _resolvedAst;
49
50 /// Sometimes for resolution the resolved AST element needs to change (for
51 /// example, if we're inlining, or if we're in a constructor, but then also
52 /// constructing the field values). We keep track of this with a stack.
53 Queue<ResolvedAst> _resolvedAstStack;
54 47
55 KernelAstAdapter(this.kernel, this._backend, this._resolvedAst, 48 KernelAstAdapter(this.kernel, this._backend, this._resolvedAst,
56 this._nodeToAst, this._nodeToElement) { 49 this._nodeToAst, this._nodeToElement) {
57 // TODO(het): Maybe just use all of the kernel maps directly? 50 // TODO(het): Maybe just use all of the kernel maps directly?
58 for (FieldElement fieldElement in kernel.fields.keys) { 51 for (FieldElement fieldElement in kernel.fields.keys) {
59 _nodeToElement[kernel.fields[fieldElement]] = fieldElement; 52 _nodeToElement[kernel.fields[fieldElement]] = fieldElement;
60 } 53 }
61 for (FunctionElement functionElement in kernel.functions.keys) { 54 for (FunctionElement functionElement in kernel.functions.keys) {
62 _nodeToElement[kernel.functions[functionElement]] = functionElement; 55 _nodeToElement[kernel.functions[functionElement]] = functionElement;
63 } 56 }
64 for (ClassElement classElement in kernel.classes.keys) { 57 for (ClassElement classElement in kernel.classes.keys) {
65 _nodeToElement[kernel.classes[classElement]] = classElement; 58 _nodeToElement[kernel.classes[classElement]] = classElement;
66 } 59 }
67 for (LibraryElement libraryElement in kernel.libraries.keys) { 60 for (LibraryElement libraryElement in kernel.libraries.keys) {
68 _nodeToElement[kernel.libraries[libraryElement]] = libraryElement; 61 _nodeToElement[kernel.libraries[libraryElement]] = libraryElement;
69 } 62 }
70 for (LocalFunctionElement localFunction in kernel.localFunctions.keys) { 63 for (LocalFunctionElement localFunction in kernel.localFunctions.keys) {
71 _nodeToElement[kernel.localFunctions[localFunction]] = localFunction; 64 _nodeToElement[kernel.localFunctions[localFunction]] = localFunction;
72 } 65 }
73 for (TypeVariableElement typeVariable in kernel.typeParameters.keys) { 66 for (TypeVariableElement typeVariable in kernel.typeParameters.keys) {
74 _nodeToElement[kernel.typeParameters[typeVariable]] = typeVariable; 67 _nodeToElement[kernel.typeParameters[typeVariable]] = typeVariable;
75 } 68 }
76 _typeConverter = new DartTypeConverter(this); 69 _typeConverter = new DartTypeConverter(this);
77 _resolvedAstStack = new Queue<ResolvedAst>();
78 }
79
80 /// Push the existing resolved AST on the stack and shift the current resolved
81 /// AST to the AST that this kernel node points to.
82 void pushResolvedAst(ir.Node node) {
83 _resolvedAstStack.addLast(_resolvedAst);
84 _resolvedAst = getElement(node).resolvedAst;
85 }
86
87 /// Pop the resolved AST stack to reset it to the previous resolved AST node.
88 void popResolvedAstStack() {
89 assert(_resolvedAstStack.isNotEmpty);
90 _resolvedAst = _resolvedAstStack.removeLast();
91 } 70 }
92 71
93 Compiler get _compiler => _backend.compiler; 72 Compiler get _compiler => _backend.compiler;
94 TreeElements get elements => _resolvedAst.elements; 73 TreeElements get elements => _resolvedAst.elements;
95 DiagnosticReporter get reporter => _compiler.reporter; 74 DiagnosticReporter get reporter => _compiler.reporter;
96 Element get _target => _resolvedAst.element; 75 Element get _target => _resolvedAst.element;
97 76
98 GlobalTypeInferenceResults get _globalInferenceResults => 77 GlobalTypeInferenceResults get _globalInferenceResults =>
99 _compiler.globalInference.results; 78 _compiler.globalInference.results;
100 79
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 942
964 @override 943 @override
965 String get name => null; 944 String get name => null;
966 945
967 @override 946 @override
968 int get nestingLevel => 1; 947 int get nestingLevel => 1;
969 948
970 @override 949 @override
971 ast.Node get statement => null; 950 ast.Node get statement => null;
972 } 951 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/graph_builder.dart ('k') | tests/compiler/dart2js/kernel/constructors_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698