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

Unified 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 side-by-side diff with in-line comments
Download patch
« 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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
diff --git a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
index e108ad5a69729c0818a3827d0707bbdbad6f8a56..be3e3990ce26d2322816108fd67428158b015f22 100644
--- a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
+++ b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart
@@ -36,7 +36,6 @@ import 'types.dart';
class KernelAstAdapter {
final Kernel kernel;
final JavaScriptBackend _backend;
- final ResolvedAst _resolvedAst;
final Map<ir.Node, ast.Node> _nodeToAst;
final Map<ir.Node, Element> _nodeToElement;
final Map<ir.VariableDeclaration, SyntheticLocal> _syntheticLocals =
@@ -44,6 +43,12 @@ class KernelAstAdapter {
final Map<ir.LabeledStatement, KernelJumpTarget> _jumpTargets =
<ir.LabeledStatement, KernelJumpTarget>{};
DartTypeConverter _typeConverter;
+ ResolvedAst _resolvedAst;
+
+ /// Sometimes for resolution the resolved AST element needs to change (for
+ /// example, if we're inlining, or if we're in a constructor, but then also
+ /// constructing the field values). We keep track of this with a stack.
+ final List<ResolvedAst> _resolvedAstStack = <ResolvedAst>[];
KernelAstAdapter(this.kernel, this._backend, this._resolvedAst,
this._nodeToAst, this._nodeToElement) {
@@ -69,6 +74,19 @@ class KernelAstAdapter {
_typeConverter = new DartTypeConverter(this);
}
+ /// Push the existing resolved AST on the stack and shift the current resolved
+ /// AST to the AST that this kernel node points to.
+ void pushResolvedAst(ir.Node node) {
+ _resolvedAstStack.add(_resolvedAst);
+ _resolvedAst = (getElement(node) as AstElement).resolvedAst;
+ }
+
+ /// Pop the resolved AST stack to reset it to the previous resolved AST node.
+ void popResolvedAstStack() {
+ assert(_resolvedAstStack.isNotEmpty);
+ _resolvedAst = _resolvedAstStack.removeLast();
+ }
+
Compiler get _compiler => _backend.compiler;
TreeElements get elements => _resolvedAst.elements;
DiagnosticReporter get reporter => _compiler.reporter;
« 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