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

Unified Diff: pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart

Issue 2616933003: Ensure we're looking at the correct resolved AST when initializing fields in constructors. (Closed)
Patch Set: dartfmt 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
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.
Siggi Cherem (dart-lang) 2017/01/05 23:23:31 constructing => initializing
Emily Fortuna 2017/01/06 00:19:25 oops yes
+ Queue<ResolvedAst> _resolvedAstStack;
Siggi Cherem (dart-lang) 2017/01/05 23:23:31 side comment: We have a tendency in dart2js to use
Emily Fortuna 2017/01/06 00:19:25 Acknowledged.
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;

Powered by Google App Engine
This is Rietveld 408576698