| 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;
|
|
|