Thread forest object through calls

Change-Id: I4365fca44761c27609c28ac8c36b031e06caf0de
Reviewed-on: https://dart-review.googlesource.com/51124
Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
This commit is contained in:
Peter von der Ahé 2018-04-13 11:36:16 +00:00 committed by commit-bot@chromium.org
parent 51f9d243e7
commit 988de9c925
3 changed files with 7 additions and 15 deletions

View file

@ -922,7 +922,7 @@ class LoadLibraryAccessor<Arguments> extends kernel
helper.addProblemErrorIfConst(
messageLoadLibraryTakesNoArguments, offset, 'loadLibrary'.length);
}
return builder.createLoadLibrary(offset);
return builder.createLoadLibrary(offset, forest);
}
}

View file

@ -707,7 +707,8 @@ abstract class LoadLibraryAccessor<Arguments> extends Accessor<Arguments> {
: super(helper, token);
Expression _makeRead(ShadowComplexAssignment complexAssignment) {
var read = helper.makeStaticGet(builder.createTearoffMethod(), token);
var read =
helper.makeStaticGet(builder.createTearoffMethod(helper.forest), token);
complexAssignment?.read = read;
return read;
}

View file

@ -16,17 +16,10 @@ import 'package:kernel/ast.dart'
ProcedureKind,
ReturnStatement;
import '../builder/builder.dart' show Builder;
import 'kernel_library_builder.dart' show KernelLibraryBuilder;
import 'kernel_builder.dart' show Builder, KernelLibraryBuilder;
import 'forest.dart' show Forest;
import 'fangorn.dart' show Fangorn;
// TODO(ahe): create a single forest and plumb it here instead.
final Forest _forest = new Fangorn();
/// Builder to represent the `deferLibrary.loadLibrary` calls and tear-offs.
class LoadLibraryBuilder extends Builder {
final KernelLibraryBuilder parent;
@ -40,18 +33,16 @@ class LoadLibraryBuilder extends Builder {
/// null, no tear-offs were seen in the code and no method is generated.
Member tearoff;
Forest get forest => _forest;
LoadLibraryBuilder(this.parent, this.importDependency, this.charOffset)
: super(parent, charOffset, parent.fileUri);
LoadLibrary createLoadLibrary(int charOffset) {
LoadLibrary createLoadLibrary(int charOffset, Forest forest) {
return forest.loadLibrary(importDependency)..fileOffset = charOffset;
}
Procedure createTearoffMethod() {
Procedure createTearoffMethod(Forest forest) {
if (tearoff != null) return tearoff;
LoadLibrary expression = createLoadLibrary(charOffset);
LoadLibrary expression = createLoadLibrary(charOffset, forest);
String prefix = expression.import.name;
tearoff = new Procedure(
new Name('__loadLibrary_$prefix', parent.target),