Skip to content

Commit 6de0f53

Browse files
jensjohacommit-bot@chromium.org
authored andcommitted
[CFE] Set correct async markers in outline phase (2nd try)
This reverts commit b4b44d6. Change-Id: Iae68e6e84e0fbb214b22e1dec6788057f80a50ea Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153345 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent b6a0c50 commit 6de0f53

File tree

67 files changed

+438
-183
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+438
-183
lines changed

pkg/front_end/lib/src/fasta/builder/class_builder.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:kernel/ast.dart'
88
show
99
Arguments,
1010
AsExpression,
11+
AsyncMarker,
1112
Class,
1213
Constructor,
1314
DartType,
@@ -873,6 +874,8 @@ abstract class ClassBuilderImpl extends DeclarationBuilderImpl
873874
procedure.function.body = new ReturnStatement(result)
874875
..fileOffset = procedure.fileOffset;
875876
procedure.function.body.parent = procedure.function;
877+
procedure.function.asyncMarker = AsyncMarker.Sync;
878+
procedure.function.dartAsyncMarker = AsyncMarker.Sync;
876879

877880
procedure.isAbstract = false;
878881
procedure.isNoSuchMethodForwarder = true;

pkg/front_end/lib/src/fasta/builder/enum_builder.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ library fasta.enum_builder;
77
import 'package:kernel/ast.dart'
88
show
99
Arguments,
10+
AsyncMarker,
1011
Class,
1112
Constructor,
1213
ConstructorInvocation,
@@ -239,7 +240,8 @@ class EnumBuilder extends SourceClassBuilder {
239240
charOffset,
240241
charEndOffset,
241242
toStringReference,
242-
null);
243+
null,
244+
AsyncMarker.Sync);
243245
members["toString"] = toStringBuilder;
244246
String className = name;
245247
if (enumConstantInfos != null) {

pkg/front_end/lib/src/fasta/builder/procedure_builder.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
226226
int charEndOffset,
227227
Procedure referenceFrom,
228228
this._tearOffReferenceFrom,
229+
AsyncMarker asyncModifier,
229230
[String nativeMethodName])
230231
: super(
231232
metadata,
@@ -241,7 +242,9 @@ class SourceProcedureBuilder extends ProcedureBuilderImpl {
241242
charOpenParenOffset,
242243
charEndOffset,
243244
referenceFrom,
244-
nativeMethodName);
245+
nativeMethodName) {
246+
this.asyncModifier = asyncModifier;
247+
}
245248

246249
bool _typeEnsured = false;
247250
Set<ClassMember> _overrideDependencies;

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6546,27 +6546,6 @@ String getNodeName(Object node) {
65466546
}
65476547
}
65486548

6549-
AsyncMarker asyncMarkerFromTokens(Token asyncToken, Token starToken) {
6550-
if (asyncToken == null || identical(asyncToken.stringValue, "sync")) {
6551-
if (starToken == null) {
6552-
return AsyncMarker.Sync;
6553-
} else {
6554-
assert(identical(starToken.stringValue, "*"));
6555-
return AsyncMarker.SyncStar;
6556-
}
6557-
} else if (identical(asyncToken.stringValue, "async")) {
6558-
if (starToken == null) {
6559-
return AsyncMarker.Async;
6560-
} else {
6561-
assert(identical(starToken.stringValue, "*"));
6562-
return AsyncMarker.AsyncStar;
6563-
}
6564-
} else {
6565-
return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens",
6566-
asyncToken.charOffset, null);
6567-
}
6568-
}
6569-
65706549
/// A data holder used to hold the information about a label that is pushed on
65716550
/// the stack.
65726551
class Label {

pkg/front_end/lib/src/fasta/source/outline_builder.dart

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import 'package:_fe_analyzer_shared/src/parser/value_kind.dart';
2424
import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show Token;
2525

2626
import 'package:kernel/ast.dart'
27-
show InvalidType, Nullability, ProcedureKind, Variance;
27+
show AsyncMarker, InvalidType, Nullability, ProcedureKind, Variance;
2828

2929
import '../builder/constructor_reference_builder.dart';
3030
import '../builder/enum_builder.dart';
@@ -797,6 +797,7 @@ class OutlineBuilder extends StackListenerImpl {
797797
void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
798798
debugEvent("endTopLevelMethod");
799799
MethodBody kind = pop();
800+
AsyncMarker asyncModifier = pop();
800801
List<FormalParameterBuilder> formals = pop();
801802
int formalsOffset = pop();
802803
List<TypeVariableBuilder> typeVariables = pop();
@@ -841,6 +842,7 @@ class OutlineBuilder extends StackListenerImpl {
841842
formalsOffset,
842843
endToken.charOffset,
843844
nativeMethodName,
845+
asyncModifier,
844846
isTopLevel: true);
845847
nativeMethodName = null;
846848
}
@@ -973,6 +975,7 @@ class OutlineBuilder extends StackListenerImpl {
973975
pop();
974976
}
975977
assert(checkState(beginToken, [
978+
ValueKinds.AsyncModifier,
976979
ValueKinds.FormalsOrNull,
977980
ValueKinds.Integer, // formals offset
978981
ValueKinds.TypeVariableListOrNull,
@@ -988,6 +991,7 @@ class OutlineBuilder extends StackListenerImpl {
988991
ValueKinds.Integer, // var/final/const offset
989992
ValueKinds.MetadataListOrNull,
990993
]));
994+
AsyncMarker asyncModifier = pop();
991995
List<FormalParameterBuilder> formals = pop();
992996
int formalsOffset = pop();
993997
List<TypeVariableBuilder> typeVariables = pop();
@@ -1181,6 +1185,7 @@ class OutlineBuilder extends StackListenerImpl {
11811185
formalsOffset,
11821186
endToken.charOffset,
11831187
nativeMethodName,
1188+
asyncModifier,
11841189
isTopLevel: false);
11851190
}
11861191
nativeMethodName = null;
@@ -1926,6 +1931,7 @@ class OutlineBuilder extends StackListenerImpl {
19261931
if (kind == MethodBody.RedirectingFactoryBody) {
19271932
redirectionTarget = nullIfParserRecovery(pop());
19281933
}
1934+
AsyncMarker asyncModifier = pop();
19291935
List<FormalParameterBuilder> formals = pop();
19301936
int formalsOffset = pop();
19311937
pop(); // type variables
@@ -1943,17 +1949,19 @@ class OutlineBuilder extends StackListenerImpl {
19431949
}
19441950
String documentationComment = getDocumentationComment(beginToken);
19451951
libraryBuilder.addFactoryMethod(
1946-
documentationComment,
1947-
metadata,
1948-
modifiers,
1949-
name,
1950-
formals,
1951-
redirectionTarget,
1952-
beginToken.charOffset,
1953-
charOffset,
1954-
formalsOffset,
1955-
endToken.charOffset,
1956-
nativeMethodName);
1952+
documentationComment,
1953+
metadata,
1954+
modifiers,
1955+
name,
1956+
formals,
1957+
redirectionTarget,
1958+
beginToken.charOffset,
1959+
charOffset,
1960+
formalsOffset,
1961+
endToken.charOffset,
1962+
nativeMethodName,
1963+
asyncModifier,
1964+
);
19571965
nativeMethodName = null;
19581966
inConstructor = false;
19591967
}
@@ -2060,6 +2068,7 @@ class OutlineBuilder extends StackListenerImpl {
20602068
@override
20612069
void handleAsyncModifier(Token asyncToken, Token starToken) {
20622070
debugEvent("AsyncModifier");
2071+
push(asyncMarkerFromTokens(asyncToken, starToken));
20632072
}
20642073

20652074
void addProblem(Message message, int charOffset, int length,

pkg/front_end/lib/src/fasta/source/source_library_builder.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:_fe_analyzer_shared/src/util/resolve_relative_uri.dart'
1616
import 'package:kernel/ast.dart'
1717
show
1818
Arguments,
19+
AsyncMarker,
1920
Class,
2021
Constructor,
2122
ConstructorInvocation,
@@ -2120,6 +2121,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
21202121
int charOpenParenOffset,
21212122
int charEndOffset,
21222123
String nativeMethodName,
2124+
AsyncMarker asyncModifier,
21232125
{bool isTopLevel}) {
21242126
MetadataCollector metadataCollector = loader.target.metadataCollector;
21252127
if (returnType == null) {
@@ -2194,6 +2196,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
21942196
charEndOffset,
21952197
referenceFrom,
21962198
tearOffReferenceFrom,
2199+
asyncModifier,
21972200
nativeMethodName);
21982201
metadataCollector?.setDocumentationComment(
21992202
procedureBuilder.procedure, documentationComment);
@@ -2216,7 +2219,8 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
22162219
int charOffset,
22172220
int charOpenParenOffset,
22182221
int charEndOffset,
2219-
String nativeMethodName) {
2222+
String nativeMethodName,
2223+
AsyncMarker asyncModifier) {
22202224
TypeBuilder returnType = addNamedType(
22212225
currentTypeParameterScopeBuilder.parent.name,
22222226
const NullabilityBuilder.omitted(),
@@ -2278,6 +2282,7 @@ class SourceLibraryBuilder extends LibraryBuilderImpl {
22782282
charEndOffset,
22792283
referenceFrom,
22802284
null,
2285+
asyncModifier,
22812286
nativeMethodName);
22822287
}
22832288

pkg/front_end/lib/src/fasta/source/source_loader.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import 'package:_fe_analyzer_shared/src/scanner/scanner.dart'
2929
import 'package:kernel/ast.dart'
3030
show
3131
Arguments,
32+
AsyncMarker,
3233
BottomType,
3334
Class,
3435
Component,
@@ -398,7 +399,8 @@ class SourceLoader extends Loader {
398399
-1,
399400
-1,
400401
null,
401-
null)
402+
null,
403+
AsyncMarker.Sync)
402404
..parent = parent;
403405
BodyBuilder listener = dietListener.createListener(
404406
builder, dietListener.memberScope,

pkg/front_end/lib/src/fasta/source/stack_listener_impl.dart

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,27 @@ import 'source_library_builder.dart';
2525
abstract class StackListenerImpl extends StackListener {
2626
SourceLibraryBuilder get libraryBuilder;
2727

28+
AsyncMarker asyncMarkerFromTokens(Token asyncToken, Token starToken) {
29+
if (asyncToken == null || identical(asyncToken.stringValue, "sync")) {
30+
if (starToken == null) {
31+
return AsyncMarker.Sync;
32+
} else {
33+
assert(identical(starToken.stringValue, "*"));
34+
return AsyncMarker.SyncStar;
35+
}
36+
} else if (identical(asyncToken.stringValue, "async")) {
37+
if (starToken == null) {
38+
return AsyncMarker.Async;
39+
} else {
40+
assert(identical(starToken.stringValue, "*"));
41+
return AsyncMarker.AsyncStar;
42+
}
43+
} else {
44+
return unhandled(asyncToken.lexeme, "asyncMarkerFromTokens",
45+
asyncToken.charOffset, null);
46+
}
47+
}
48+
2849
// TODO(ahe): This doesn't belong here. Only implemented by body_builder.dart
2950
// and ast_builder.dart.
3051
void finishFunction(

pkg/front_end/lib/src/fasta/source/value_kinds.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ class ValueKinds {
6464
static const ValueKind IdentifierOrNull =
6565
const SingleValueKind<type.Identifier>(NullValue.Identifier);
6666
static const ValueKind Integer = const SingleValueKind<int>();
67+
static const ValueKind AsyncModifier =
68+
const SingleValueKind<type.AsyncMarker>();
6769
static const ValueKind Formals =
6870
const SingleValueKind<List<type.FormalParameterBuilder>>();
6971
static const ValueKind FormalsOrNull =

pkg/front_end/testcases/extensions/deferred_explicit_access.dart.outline.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import self as self;
1111

1212
import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
1313

14-
static method main() → dynamic
14+
static method main() → dynamic async
1515
;
1616
static method expect(dynamic expected, dynamic actual) → dynamic
1717
;

pkg/front_end/testcases/extensions/deferred_import_hidden.dart.outline.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import self as self;
33

44
import "org-dartlang-testcase:///deferred_explicit_access_lib.dart" deferred as prefix;
55

6-
static method main() → dynamic
6+
static method main() → dynamic async
77
;
88
static method expect(dynamic expected, dynamic actual) → dynamic
99
;

pkg/front_end/testcases/general/async_function.dart.outline.expect

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,17 @@ import "dart:core" as core;
66
import "dart:async";
77

88
static field core::List<core::String*>* stringList;
9-
static method asyncString() → asy::Future<core::String*>*
9+
static method asyncString() → asy::Future<core::String*>* async
1010
;
11-
static method asyncString2() → asy::Future<core::String*>*
11+
static method asyncString2() → asy::Future<core::String*>* async
1212
;
13-
static method syncStarString() → core::Iterable<core::String*>*
13+
static method syncStarString() → core::Iterable<core::String*>* sync*
1414
;
15-
static method syncStarString2() → core::Iterable<core::String*>*
15+
static method syncStarString2() → core::Iterable<core::String*>* sync*
1616
;
17-
static method asyncStarString() → asy::Stream<core::String*>*
17+
static method asyncStarString() → asy::Stream<core::String*>* async*
1818
;
19-
static method asyncStarString2() → asy::Stream<core::String*>*
19+
static method asyncStarString2() → asy::Stream<core::String*>* async*
2020
;
21-
static method main() → dynamic
21+
static method main() → dynamic async
2222
;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
library;
22
import self as self;
33

4-
static method foo() → dynamic
4+
static method foo() → dynamic async
55
;

pkg/front_end/testcases/general/async_nested.dart.outline.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ class Node extends core::Object {
2323
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
2424
abstract member-signature get runtimeType() → core::Type*;
2525
}
26-
static method main() → void
26+
static method main() → void async
2727
;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
library;
22
import self as self;
33

4-
static method main() → dynamic
4+
static method main() → dynamic async
55
;

pkg/front_end/testcases/general/await_complex.dart.outline.expect

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,27 +43,27 @@ static set topLevelSetter(dynamic val) → void
4343
;
4444
static method dummy() → dynamic
4545
;
46-
static method staticMembers() → dynamic
46+
static method staticMembers() → dynamic async
4747
;
48-
static method topLevelMembers() → dynamic
48+
static method topLevelMembers() → dynamic async
4949
;
50-
static method instanceMembers() → dynamic
50+
static method instanceMembers() → dynamic async
5151
;
52-
static method others() → dynamic
52+
static method others() → dynamic async
5353
;
54-
static method conditionals() → dynamic
54+
static method conditionals() → dynamic async
5555
;
56-
static method asserts() → dynamic
56+
static method asserts() → dynamic async
5757
;
58-
static method controlFlow() → dynamic
58+
static method controlFlow() → dynamic async
5959
;
60-
static method future<T extends core::Object* = dynamic>(self::future::T* value) → FutureOr<self::future::T*>*
60+
static method future<T extends core::Object* = dynamic>(self::future::T* value) → FutureOr<self::future::T*>* async
6161
;
6262
static method id<T extends core::Object* = dynamic>(self::id::T* value) → FutureOr<self::id::T*>*
6363
;
64-
static method intStream() → asy::Stream<core::int*>*
64+
static method intStream() → asy::Stream<core::int*>* async*
6565
;
66-
static method main() → dynamic
66+
static method main() → dynamic async
6767
;
6868
static method expect(dynamic expected, dynamic actual) → dynamic
6969
;

pkg/front_end/testcases/general/await_in_cascade.dart.outline.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import "dart:async";
88
class C extends core::Object {
99
synthetic constructor •() → self::C*
1010
;
11-
method m() → asy::Future<core::List<core::int*>*>*
11+
method m() → asy::Future<core::List<core::int*>*>* async
1212
;
13-
method _m() → asy::Future<core::int*>*
13+
method _m() → asy::Future<core::int*>* async
1414
;
1515
abstract member-signature get _identityHashCode() → core::int*;
1616
abstract member-signature method _instanceOf(dynamic instantiatorTypeArguments, dynamic functionTypeArguments, dynamic type) → core::bool*;
@@ -23,7 +23,7 @@ class C extends core::Object {
2323
abstract member-signature method noSuchMethod(core::Invocation* invocation) → dynamic;
2424
abstract member-signature get runtimeType() → core::Type*;
2525
}
26-
static method main() → dynamic
26+
static method main() → dynamic async
2727
;
2828
static method expect(dynamic expected, dynamic actual) → dynamic
2929
;

0 commit comments

Comments
 (0)