Chromium Code Reviews| 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 7d78673c424e946a5c76fb730cf3324c48f49f16..d124af0a4fe87e4c223e812c47abfce4f59798b4 100644 |
| --- a/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart |
| +++ b/pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart |
| @@ -5,6 +5,8 @@ |
| import 'package:js_runtime/shared/embedded_names.dart'; |
| import 'package:kernel/ast.dart' as ir; |
| +import 'dart:collection' show Queue; |
| + |
| import '../common.dart'; |
| import '../common/names.dart'; |
| import '../compiler.dart'; |
| @@ -36,7 +38,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 +45,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. |
| + Queue<ResolvedAst> _resolvedAstStack; |
|
sra1
2017/01/06 00:39:26
You could simply use
final List<ResolvedAst> _r
|
| KernelAstAdapter(this.kernel, this._backend, this._resolvedAst, |
| this._nodeToAst, this._nodeToElement) { |
| @@ -67,6 +74,20 @@ class KernelAstAdapter { |
| _nodeToElement[kernel.typeParameters[typeVariable]] = typeVariable; |
| } |
| _typeConverter = new DartTypeConverter(this); |
| + _resolvedAstStack = new Queue<ResolvedAst>(); |
| + } |
| + |
| + /// 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.addLast(_resolvedAst); |
| + _resolvedAst = getElement(node).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; |