[parser] Don't use potential type arguments if they came via recovery

A few places in the parser we call `computeTypeParamOrArg` and then
either use the result or not depending on whether there's a `(` after
it. That doesn't work well when `computeTypeParamOrArg` does recovery
by for instance inserting a > though.
This CL fixes that - at least in the places we know about.

Fixes #45848.

Change-Id: Id4b62b965131031f43c8ada0fe05045fc9834db3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/197360
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 93d7a7b..ba63e91 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -6146,7 +6146,7 @@
     potentialTypeArg ??= computeTypeParamOrArg(token);
     afterToken ??= potentialTypeArg.skip(token).next!;
     TypeParamOrArgInfo typeArg;
-    if (optional('(', afterToken)) {
+    if (optional('(', afterToken) && !potentialTypeArg.recovered) {
       typeArg = potentialTypeArg;
     } else {
       typeArg = noTypeParamOrArg;
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
index 6f10b8a..ecacdd9 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info.dart
@@ -78,6 +78,8 @@
   /// Return the number of type arguments
   int get typeArgumentCount;
 
+  bool get recovered => false;
+
   /// Return the simple type associated with this simple type argument
   /// or throw an exception if this is not a simple type argument.
   TypeInfo get typeInfo {
@@ -346,5 +348,7 @@
 /// possible other constructs will pass (e.g., 'a < C, D > 3').
 TypeParamOrArgInfo computeMethodTypeArguments(Token token) {
   TypeParamOrArgInfo typeArg = computeTypeParamOrArg(token);
-  return optional('(', typeArg.skip(token).next!) ? typeArg : noTypeParamOrArg;
+  return optional('(', typeArg.skip(token).next!) && !typeArg.recovered
+      ? typeArg
+      : noTypeParamOrArg;
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
index edd0af2..6c0d76a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/type_info_impl.dart
@@ -923,6 +923,9 @@
   /// and may not be part of the token stream.
   Token? skipEnd;
 
+  @override
+  bool recovered = false;
+
   ComplexTypeParamOrArgInfo(
       Token token, this.inDeclaration, this.allowsVariance)
       : assert(optional('<', token.next!)),
@@ -988,6 +991,7 @@
     // Recovery
     skipEnd = splitCloser(next);
     if (skipEnd == null) {
+      recovered = true;
       if (optional('(', next)) {
         token = next.endGroup!;
         next = token.next!;
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart b/pkg/front_end/parser_testcases/general/issue_45848_01.dart
new file mode 100644
index 0000000..5f0897a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart
@@ -0,0 +1,11 @@
+void f(bool b, int i) {
+  print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+  f(x < y, (o as Function)());
+}
+
+main() {
+  g(0, 1, () => 2);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect
new file mode 100644
index 0000000..9020ccd
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.expect
@@ -0,0 +1,156 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b)
+          handleType(bool, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(i)
+          handleType(int, null)
+          handleIdentifier(i, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b=)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(, i=)
+            handleNoArguments(, i=)
+            handleSend(b, , i=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, i=)
+            handleIdentifier(i, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(i, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(y, ,)
+          endBinaryExpression(<)
+          handleIdentifier(o, expression)
+          handleNoTypeArguments(as)
+          handleNoArguments(as)
+          handleSend(o, as)
+          beginAsOperatorType(as)
+            handleIdentifier(Function, typeReference)
+            handleNoTypeArguments())
+            handleType(Function, null)
+          endAsOperatorType(as)
+          handleAsOperator(as)
+          handleParenthesizedExpression(()
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend((, ))
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleNoTypeVariables(()
+          beginFunctionExpression(()
+            beginFormalParameters((, MemberKind.Local)
+            endFormalParameters(0, (, ), MemberKind.Local)
+            handleAsyncModifier(null, null)
+            handleLiteralInt(2)
+            handleExpressionFunctionBody(=>, null)
+          endFunctionExpression((, ))
+        endArguments(3, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect
new file mode 100644
index 0000000..763288e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.intertwined.expect
@@ -0,0 +1,354 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(i)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(i, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b, expression)
+                                                    listener: handleNoTypeArguments(, i=)
+                                                    parseArgumentsOpt(b)
+                                                      listener: handleNoArguments(, i=)
+                                                    listener: handleSend(b, , i=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b)
+                                                  listener: handleStringPart(, i=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(i, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(i)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(i, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(i)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(x, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(y, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(y)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(y, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              parseParenthesizedExpression(,)
+                                                parseExpressionInParenthesis(,)
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(o, expression)
+                                                                listener: handleNoTypeArguments(as)
+                                                                parseArgumentsOpt(o)
+                                                                  listener: handleNoArguments(as)
+                                                                listener: handleSend(o, as)
+                                                        parseAsOperatorRest(o)
+                                                          listener: beginAsOperatorType(as)
+                                                          computeTypeAfterIsOrAs(as)
+                                                          listener: handleIdentifier(Function, typeReference)
+                                                          listener: handleNoTypeArguments())
+                                                          listener: handleType(Function, null)
+                                                          listener: endAsOperatorType(as)
+                                                          listener: handleAsOperator(as)
+                                                          skipChainedAsIsOperators(Function)
+                                                    ensureCloseParen(Function, ()
+                                                listener: handleParenthesizedExpression(()
+                                        parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
+                                          listener: handleNoTypeArguments(()
+                                          parseArguments())
+                                            parseArgumentsRest(()
+                                              listener: beginArguments(()
+                                              listener: endArguments(0, (, ))
+                                          listener: handleSend((, ))
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              listener: handleNoTypeVariables(()
+                                              parseFunctionExpression(,)
+                                                listener: beginFunctionExpression(()
+                                                parseFormalParametersRequiredOpt(,, MemberKind.Local)
+                                                  parseFormalParametersRest((, MemberKind.Local)
+                                                    listener: beginFormalParameters((, MemberKind.Local)
+                                                    listener: endFormalParameters(0, (, ), MemberKind.Local)
+                                                parseAsyncOptBody(), true, false)
+                                                  parseAsyncModifierOpt())
+                                                    listener: handleAsyncModifier(null, null)
+                                                    inPlainSync()
+                                                  parseFunctionBody(), true, false)
+                                                    parseExpressionFunctionBody(=>, true)
+                                                      parseExpression(=>)
+                                                        parsePrecedenceExpression(=>, 1, true)
+                                                          parseUnaryExpression(=>, true)
+                                                            parsePrimary(=>, expression)
+                                                              parseLiteralInt(=>)
+                                                                listener: handleLiteralInt(2)
+                                                      listener: handleExpressionFunctionBody(=>, null)
+                                                      inGenerator()
+                                                listener: endFunctionExpression((, ))
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.parser.expect
new file mode 100644
index 0000000..856dbc5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b, int i) {
+print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+f(x < y, (o as Function)());
+}
+
+main() {
+g(0, 1, () => 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b[StringToken],[SimpleToken] int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b=[StringToken]$[SimpleToken]b[StringToken], i=[StringToken]$[SimpleToken]i[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] Function[KeywordToken])[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] ([BeginToken])[SimpleToken] =>[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.scanner.expect
new file mode 100644
index 0000000..856dbc5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b, int i) {
+print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+f(x < y, (o as Function)());
+}
+
+main() {
+g(0, 1, () => 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b[StringToken],[SimpleToken] int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b=[StringToken]$[SimpleToken]b[StringToken], i=[StringToken]$[SimpleToken]i[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] Function[KeywordToken])[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] ([BeginToken])[SimpleToken] =>[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart
new file mode 100644
index 0000000..b19742b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart
@@ -0,0 +1,11 @@
+void f(bool b, int i) {
+  print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+  f((x < y), (o as Function)());
+}
+
+main() {
+  g(0, 1, () => 2);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect
new file mode 100644
index 0000000..53f02db
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.expect
@@ -0,0 +1,157 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b)
+          handleType(bool, null)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(i)
+          handleType(int, null)
+          handleIdentifier(i, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b=)
+            handleIdentifier(b, expression)
+            handleNoTypeArguments(, i=)
+            handleNoArguments(, i=)
+            handleSend(b, , i=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, i=)
+            handleIdentifier(i, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(i, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(y, ))
+          endBinaryExpression(<)
+          handleParenthesizedExpression(()
+          handleIdentifier(o, expression)
+          handleNoTypeArguments(as)
+          handleNoArguments(as)
+          handleSend(o, as)
+          beginAsOperatorType(as)
+            handleIdentifier(Function, typeReference)
+            handleNoTypeArguments())
+            handleType(Function, null)
+          endAsOperatorType(as)
+          handleAsOperator(as)
+          handleParenthesizedExpression(()
+          handleNoTypeArguments(()
+          beginArguments(()
+          endArguments(0, (, ))
+          handleSend((, ))
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleNoTypeVariables(()
+          beginFunctionExpression(()
+            beginFormalParameters((, MemberKind.Local)
+            endFormalParameters(0, (, ), MemberKind.Local)
+            handleAsyncModifier(null, null)
+            handleLiteralInt(2)
+            handleExpressionFunctionBody(=>, null)
+          endFunctionExpression((, ))
+        endArguments(3, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect
new file mode 100644
index 0000000..b59bb49
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.intertwined.expect
@@ -0,0 +1,363 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(i)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(i, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, i, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b, expression)
+                                                    listener: handleNoTypeArguments(, i=)
+                                                    parseArgumentsOpt(b)
+                                                      listener: handleNoArguments(, i=)
+                                                    listener: handleSend(b, , i=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b)
+                                                  listener: handleStringPart(, i=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(i, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(i)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(i, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(i)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(()
+                                              parseParenthesizedExpression(()
+                                                parseExpressionInParenthesis(()
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(x, expression)
+                                                                listener: handleNoTypeArguments(<)
+                                                                parseArgumentsOpt(x)
+                                                                  listener: handleNoArguments(<)
+                                                                listener: handleSend(x, <)
+                                                        listener: beginBinaryExpression(<)
+                                                        parsePrecedenceExpression(<, 9, true)
+                                                          parseUnaryExpression(<, true)
+                                                            parsePrimary(<, expression)
+                                                              parseSendOrFunctionLiteral(<, expression)
+                                                                parseSend(<, expression)
+                                                                  ensureIdentifier(<, expression)
+                                                                    listener: handleIdentifier(y, expression)
+                                                                  listener: handleNoTypeArguments())
+                                                                  parseArgumentsOpt(y)
+                                                                    listener: handleNoArguments())
+                                                                  listener: handleSend(y, ))
+                                                        listener: endBinaryExpression(<)
+                                                    ensureCloseParen(y, ()
+                                                listener: handleParenthesizedExpression(()
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              parseParenthesizedExpression(,)
+                                                parseExpressionInParenthesis(,)
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(o, expression)
+                                                                listener: handleNoTypeArguments(as)
+                                                                parseArgumentsOpt(o)
+                                                                  listener: handleNoArguments(as)
+                                                                listener: handleSend(o, as)
+                                                        parseAsOperatorRest(o)
+                                                          listener: beginAsOperatorType(as)
+                                                          computeTypeAfterIsOrAs(as)
+                                                          listener: handleIdentifier(Function, typeReference)
+                                                          listener: handleNoTypeArguments())
+                                                          listener: handleType(Function, null)
+                                                          listener: endAsOperatorType(as)
+                                                          listener: handleAsOperator(as)
+                                                          skipChainedAsIsOperators(Function)
+                                                    ensureCloseParen(Function, ()
+                                                listener: handleParenthesizedExpression(()
+                                        parseArgumentOrIndexStar(), Instance of 'NoTypeParamOrArg', false)
+                                          listener: handleNoTypeArguments(()
+                                          parseArguments())
+                                            parseArgumentsRest(()
+                                              listener: beginArguments(()
+                                              listener: endArguments(0, (, ))
+                                          listener: handleSend((, ))
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              listener: handleNoTypeVariables(()
+                                              parseFunctionExpression(,)
+                                                listener: beginFunctionExpression(()
+                                                parseFormalParametersRequiredOpt(,, MemberKind.Local)
+                                                  parseFormalParametersRest((, MemberKind.Local)
+                                                    listener: beginFormalParameters((, MemberKind.Local)
+                                                    listener: endFormalParameters(0, (, ), MemberKind.Local)
+                                                parseAsyncOptBody(), true, false)
+                                                  parseAsyncModifierOpt())
+                                                    listener: handleAsyncModifier(null, null)
+                                                    inPlainSync()
+                                                  parseFunctionBody(), true, false)
+                                                    parseExpressionFunctionBody(=>, true)
+                                                      parseExpression(=>)
+                                                        parsePrecedenceExpression(=>, 1, true)
+                                                          parseUnaryExpression(=>, true)
+                                                            parsePrimary(=>, expression)
+                                                              parseLiteralInt(=>)
+                                                                listener: handleLiteralInt(2)
+                                                      listener: handleExpressionFunctionBody(=>, null)
+                                                      inGenerator()
+                                                listener: endFunctionExpression((, ))
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.parser.expect
new file mode 100644
index 0000000..e21e7ef
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b, int i) {
+print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+f((x < y), (o as Function)());
+}
+
+main() {
+g(0, 1, () => 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b[StringToken],[SimpleToken] int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b=[StringToken]$[SimpleToken]b[StringToken], i=[StringToken]$[SimpleToken]i[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] Function[KeywordToken])[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] ([BeginToken])[SimpleToken] =>[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.scanner.expect
new file mode 100644
index 0000000..e21e7ef
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_01_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b, int i) {
+print('b=$b, i=$i');
+}
+
+g(int x, int y, Object o) {
+f((x < y), (o as Function)());
+}
+
+main() {
+g(0, 1, () => 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b[StringToken],[SimpleToken] int[StringToken] i[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b=[StringToken]$[SimpleToken]b[StringToken], i=[StringToken]$[SimpleToken]i[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] Function[KeywordToken])[SimpleToken]([BeginToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] ([BeginToken])[SimpleToken] =>[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart b/pkg/front_end/parser_testcases/general/issue_45848_02.dart
new file mode 100644
index 0000000..00ff9cf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart
@@ -0,0 +1,11 @@
+void f(bool b1, bool b2) {
+  print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+  f(x < y, 0 > (o as int));
+}
+
+main() {
+  g(0, 1, 2);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect
new file mode 100644
index 0000000..bbefeb2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.expect
@@ -0,0 +1,148 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b1)
+          handleType(bool, null)
+          handleIdentifier(b1, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b2)
+          handleType(bool, null)
+          handleIdentifier(b2, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b1=)
+            handleIdentifier(b1, expression)
+            handleNoTypeArguments(, b2=)
+            handleNoArguments(, b2=)
+            handleSend(b1, , b2=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, b2=)
+            handleIdentifier(b2, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(b2, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(y, ,)
+          endBinaryExpression(<)
+          handleLiteralInt(0)
+          beginBinaryExpression(>)
+            handleIdentifier(o, expression)
+            handleNoTypeArguments(as)
+            handleNoArguments(as)
+            handleSend(o, as)
+            beginAsOperatorType(as)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments())
+              handleType(int, null)
+            endAsOperatorType(as)
+            handleAsOperator(as)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleLiteralInt(2)
+        endArguments(3, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect
new file mode 100644
index 0000000..db77e3c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.intertwined.expect
@@ -0,0 +1,333 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b1)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b1, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b2)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b2, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b1=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b1, expression)
+                                                    listener: handleNoTypeArguments(, b2=)
+                                                    parseArgumentsOpt(b1)
+                                                      listener: handleNoArguments(, b2=)
+                                                    listener: handleSend(b1, , b2=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b1)
+                                                  listener: handleStringPart(, b2=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b2, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(b2)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(b2, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b2)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(x, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(y, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(y)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(y, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(0)
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseSendOrFunctionLiteral((, expression)
+                                                                parseSend((, expression)
+                                                                  ensureIdentifier((, expression)
+                                                                    listener: handleIdentifier(o, expression)
+                                                                  listener: handleNoTypeArguments(as)
+                                                                  parseArgumentsOpt(o)
+                                                                    listener: handleNoArguments(as)
+                                                                  listener: handleSend(o, as)
+                                                          parseAsOperatorRest(o)
+                                                            listener: beginAsOperatorType(as)
+                                                            computeTypeAfterIsOrAs(as)
+                                                            listener: handleIdentifier(int, typeReference)
+                                                            listener: handleNoTypeArguments())
+                                                            listener: handleType(int, null)
+                                                            listener: endAsOperatorType(as)
+                                                            listener: handleAsOperator(as)
+                                                            skipChainedAsIsOperators(int)
+                                                      ensureCloseParen(int, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(2)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.parser.expect
new file mode 100644
index 0000000..57875d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+f(x < y, 0 > (o as int));
+}
+
+main() {
+g(0, 1, 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] 0[StringToken] >[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.scanner.expect
new file mode 100644
index 0000000..57875d1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+f(x < y, 0 > (o as int));
+}
+
+main() {
+g(0, 1, 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] 0[StringToken] >[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart
new file mode 100644
index 0000000..284430ed
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart
@@ -0,0 +1,11 @@
+void f(bool b1, bool b2) {
+  print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+  f((x < y), 0 > (o as int));
+}
+
+main() {
+  g(0, 1, 2);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect
new file mode 100644
index 0000000..71b505f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.expect
@@ -0,0 +1,149 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b1)
+          handleType(bool, null)
+          handleIdentifier(b1, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b2)
+          handleType(bool, null)
+          handleIdentifier(b2, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b1=)
+            handleIdentifier(b1, expression)
+            handleNoTypeArguments(, b2=)
+            handleNoArguments(, b2=)
+            handleSend(b1, , b2=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, b2=)
+            handleIdentifier(b2, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(b2, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(y, ))
+          endBinaryExpression(<)
+          handleParenthesizedExpression(()
+          handleLiteralInt(0)
+          beginBinaryExpression(>)
+            handleIdentifier(o, expression)
+            handleNoTypeArguments(as)
+            handleNoArguments(as)
+            handleSend(o, as)
+            beginAsOperatorType(as)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments())
+              handleType(int, null)
+            endAsOperatorType(as)
+            handleAsOperator(as)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleLiteralInt(2)
+        endArguments(3, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect
new file mode 100644
index 0000000..3389d26
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.intertwined.expect
@@ -0,0 +1,342 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b1)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b1, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b2)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b2, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b1=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b1, expression)
+                                                    listener: handleNoTypeArguments(, b2=)
+                                                    parseArgumentsOpt(b1)
+                                                      listener: handleNoArguments(, b2=)
+                                                    listener: handleSend(b1, , b2=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b1)
+                                                  listener: handleStringPart(, b2=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b2, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(b2)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(b2, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b2)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(()
+                                              parseParenthesizedExpression(()
+                                                parseExpressionInParenthesis(()
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(x, expression)
+                                                                listener: handleNoTypeArguments(<)
+                                                                parseArgumentsOpt(x)
+                                                                  listener: handleNoArguments(<)
+                                                                listener: handleSend(x, <)
+                                                        listener: beginBinaryExpression(<)
+                                                        parsePrecedenceExpression(<, 9, true)
+                                                          parseUnaryExpression(<, true)
+                                                            parsePrimary(<, expression)
+                                                              parseSendOrFunctionLiteral(<, expression)
+                                                                parseSend(<, expression)
+                                                                  ensureIdentifier(<, expression)
+                                                                    listener: handleIdentifier(y, expression)
+                                                                  listener: handleNoTypeArguments())
+                                                                  parseArgumentsOpt(y)
+                                                                    listener: handleNoArguments())
+                                                                  listener: handleSend(y, ))
+                                                        listener: endBinaryExpression(<)
+                                                    ensureCloseParen(y, ()
+                                                listener: handleParenthesizedExpression(()
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(0)
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseSendOrFunctionLiteral((, expression)
+                                                                parseSend((, expression)
+                                                                  ensureIdentifier((, expression)
+                                                                    listener: handleIdentifier(o, expression)
+                                                                  listener: handleNoTypeArguments(as)
+                                                                  parseArgumentsOpt(o)
+                                                                    listener: handleNoArguments(as)
+                                                                  listener: handleSend(o, as)
+                                                          parseAsOperatorRest(o)
+                                                            listener: beginAsOperatorType(as)
+                                                            computeTypeAfterIsOrAs(as)
+                                                            listener: handleIdentifier(int, typeReference)
+                                                            listener: handleNoTypeArguments())
+                                                            listener: handleType(int, null)
+                                                            listener: endAsOperatorType(as)
+                                                            listener: handleAsOperator(as)
+                                                            skipChainedAsIsOperators(int)
+                                                      ensureCloseParen(int, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(2)
+                                    listener: endArguments(3, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.parser.expect
new file mode 100644
index 0000000..c34aac4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+f((x < y), 0 > (o as int));
+}
+
+main() {
+g(0, 1, 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] 0[StringToken] >[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.scanner.expect
new file mode 100644
index 0000000..c34aac4
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_02_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o) {
+f((x < y), 0 > (o as int));
+}
+
+main() {
+g(0, 1, 2);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] 0[StringToken] >[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart b/pkg/front_end/parser_testcases/general/issue_45848_03.dart
new file mode 100644
index 0000000..a403ba2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart
@@ -0,0 +1,11 @@
+void f(bool b1, bool b2) {
+  print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+  f(x < y, (o as int) > (p as int));
+}
+
+main() {
+  g(0, 1, 2, 3);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect
new file mode 100644
index 0000000..6058857
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.expect
@@ -0,0 +1,168 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b1)
+          handleType(bool, null)
+          handleIdentifier(b1, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b2)
+          handleType(bool, null)
+          handleIdentifier(b2, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b1=)
+            handleIdentifier(b1, expression)
+            handleNoTypeArguments(, b2=)
+            handleNoArguments(, b2=)
+            handleSend(b1, , b2=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, b2=)
+            handleIdentifier(b2, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(b2, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(p)
+          handleType(Object, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments(,)
+            handleNoArguments(,)
+            handleSend(y, ,)
+          endBinaryExpression(<)
+          handleIdentifier(o, expression)
+          handleNoTypeArguments(as)
+          handleNoArguments(as)
+          handleSend(o, as)
+          beginAsOperatorType(as)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments())
+            handleType(int, null)
+          endAsOperatorType(as)
+          handleAsOperator(as)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(>)
+            handleIdentifier(p, expression)
+            handleNoTypeArguments(as)
+            handleNoArguments(as)
+            handleSend(p, as)
+            beginAsOperatorType(as)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments())
+              handleType(int, null)
+            endAsOperatorType(as)
+            handleAsOperator(as)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleLiteralInt(2)
+          handleLiteralInt(3)
+        endArguments(4, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect
new file mode 100644
index 0000000..364051c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.intertwined.expect
@@ -0,0 +1,376 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b1)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b1, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b2)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b2, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b1=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b1, expression)
+                                                    listener: handleNoTypeArguments(, b2=)
+                                                    parseArgumentsOpt(b1)
+                                                      listener: handleNoArguments(, b2=)
+                                                    listener: handleSend(b1, , b2=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b1)
+                                                  listener: handleStringPart(, b2=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b2, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(b2)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(b2, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b2)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(p)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseSendOrFunctionLiteral((, expression)
+                                              looksLikeFunctionBody())
+                                              parseSend((, expression)
+                                                ensureIdentifier((, expression)
+                                                  listener: handleIdentifier(x, expression)
+                                                listener: handleNoTypeArguments(<)
+                                                parseArgumentsOpt(x)
+                                                  listener: handleNoArguments(<)
+                                                listener: handleSend(x, <)
+                                        listener: beginBinaryExpression(<)
+                                        parsePrecedenceExpression(<, 9, true)
+                                          parseUnaryExpression(<, true)
+                                            parsePrimary(<, expression)
+                                              parseSendOrFunctionLiteral(<, expression)
+                                                parseSend(<, expression)
+                                                  ensureIdentifier(<, expression)
+                                                    listener: handleIdentifier(y, expression)
+                                                  listener: handleNoTypeArguments(,)
+                                                  parseArgumentsOpt(y)
+                                                    listener: handleNoArguments(,)
+                                                  listener: handleSend(y, ,)
+                                        listener: endBinaryExpression(<)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              parseParenthesizedExpression(,)
+                                                parseExpressionInParenthesis(,)
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(o, expression)
+                                                                listener: handleNoTypeArguments(as)
+                                                                parseArgumentsOpt(o)
+                                                                  listener: handleNoArguments(as)
+                                                                listener: handleSend(o, as)
+                                                        parseAsOperatorRest(o)
+                                                          listener: beginAsOperatorType(as)
+                                                          computeTypeAfterIsOrAs(as)
+                                                          listener: handleIdentifier(int, typeReference)
+                                                          listener: handleNoTypeArguments())
+                                                          listener: handleType(int, null)
+                                                          listener: endAsOperatorType(as)
+                                                          listener: handleAsOperator(as)
+                                                          skipChainedAsIsOperators(int)
+                                                    ensureCloseParen(int, ()
+                                                listener: handleParenthesizedExpression(()
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseSendOrFunctionLiteral((, expression)
+                                                                parseSend((, expression)
+                                                                  ensureIdentifier((, expression)
+                                                                    listener: handleIdentifier(p, expression)
+                                                                  listener: handleNoTypeArguments(as)
+                                                                  parseArgumentsOpt(p)
+                                                                    listener: handleNoArguments(as)
+                                                                  listener: handleSend(p, as)
+                                                          parseAsOperatorRest(p)
+                                                            listener: beginAsOperatorType(as)
+                                                            computeTypeAfterIsOrAs(as)
+                                                            listener: handleIdentifier(int, typeReference)
+                                                            listener: handleNoTypeArguments())
+                                                            listener: handleType(int, null)
+                                                            listener: endAsOperatorType(as)
+                                                            listener: handleAsOperator(as)
+                                                            skipChainedAsIsOperators(int)
+                                                      ensureCloseParen(int, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(2)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(3)
+                                    listener: endArguments(4, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.parser.expect
new file mode 100644
index 0000000..7d232eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+f(x < y, (o as int) > (p as int));
+}
+
+main() {
+g(0, 1, 2, 3);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken],[SimpleToken] Object[StringToken] p[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken] >[SimpleToken] ([BeginToken]p[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.scanner.expect
new file mode 100644
index 0000000..7d232eb
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+f(x < y, (o as int) > (p as int));
+}
+
+main() {
+g(0, 1, 2, 3);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken],[SimpleToken] Object[StringToken] p[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken] >[SimpleToken] ([BeginToken]p[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart
new file mode 100644
index 0000000..c20b2c6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart
@@ -0,0 +1,11 @@
+void f(bool b1, bool b2) {
+  print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+  f((x < y), (o as int) > (p as int));
+}
+
+main() {
+  g(0, 1, 2, 3);
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect
new file mode 100644
index 0000000..d5df020
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.expect
@@ -0,0 +1,169 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b1)
+          handleType(bool, null)
+          handleIdentifier(b1, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(b2)
+          handleType(bool, null)
+          handleIdentifier(b2, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(print, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          beginLiteralString('b1=)
+            handleIdentifier(b1, expression)
+            handleNoTypeArguments(, b2=)
+            handleNoArguments(, b2=)
+            handleSend(b1, , b2=)
+            handleInterpolationExpression($, null)
+            handleStringPart(, b2=)
+            handleIdentifier(b2, expression)
+            handleNoTypeArguments(')
+            handleNoArguments(')
+            handleSend(b2, ')
+            handleInterpolationExpression($, null)
+            handleStringPart(')
+          endLiteralString(2, ))
+        endArguments(1, (, ))
+        handleSend(print, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(g)
+  beginMetadataStar(g)
+  endMetadataStar(0)
+  beginTopLevelMember(g)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(g, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(x)
+          handleType(int, null)
+          handleIdentifier(x, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(y)
+          handleType(int, null)
+          handleIdentifier(y, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(o)
+          handleType(Object, null)
+          handleIdentifier(o, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+        beginMetadataStar(Object)
+        endMetadataStar(0)
+        beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(Object, typeReference)
+          handleNoTypeArguments(p)
+          handleType(Object, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleIdentifier(x, expression)
+          handleNoTypeArguments(<)
+          handleNoArguments(<)
+          handleSend(x, <)
+          beginBinaryExpression(<)
+            handleIdentifier(y, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(y, ))
+          endBinaryExpression(<)
+          handleParenthesizedExpression(()
+          handleIdentifier(o, expression)
+          handleNoTypeArguments(as)
+          handleNoArguments(as)
+          handleSend(o, as)
+          beginAsOperatorType(as)
+            handleIdentifier(int, typeReference)
+            handleNoTypeArguments())
+            handleType(int, null)
+          endAsOperatorType(as)
+          handleAsOperator(as)
+          handleParenthesizedExpression(()
+          beginBinaryExpression(>)
+            handleIdentifier(p, expression)
+            handleNoTypeArguments(as)
+            handleNoArguments(as)
+            handleSend(p, as)
+            beginAsOperatorType(as)
+              handleIdentifier(int, typeReference)
+              handleNoTypeArguments())
+              handleType(int, null)
+            endAsOperatorType(as)
+            handleAsOperator(as)
+            handleParenthesizedExpression(()
+          endBinaryExpression(>)
+        endArguments(2, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(g, null, })
+  endTopLevelDeclaration(main)
+  beginMetadataStar(main)
+  endMetadataStar(0)
+  beginTopLevelMember(main)
+    beginTopLevelMethod(}, null)
+      handleNoType(})
+      handleIdentifier(main, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(g, expression)
+        handleNoTypeArguments(()
+        beginArguments(()
+          handleLiteralInt(0)
+          handleLiteralInt(1)
+          handleLiteralInt(2)
+          handleLiteralInt(3)
+        endArguments(4, (, ))
+        handleSend(g, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(main, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect
new file mode 100644
index 0000000..e73f340
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.intertwined.expect
@@ -0,0 +1,385 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(f, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b1)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b1, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, b1, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(b2)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(b2, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, b2, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(2, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, print)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(print)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(print, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(print)
+                                parseArguments(print)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralString(()
+                                              parseSingleLiteralString(()
+                                                listener: beginLiteralString('b1=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b1, expression)
+                                                    listener: handleNoTypeArguments(, b2=)
+                                                    parseArgumentsOpt(b1)
+                                                      listener: handleNoArguments(, b2=)
+                                                    listener: handleSend(b1, , b2=)
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b1)
+                                                  listener: handleStringPart(, b2=)
+                                                parseIdentifierExpression($)
+                                                  parseSend($, expression)
+                                                    ensureIdentifier($, expression)
+                                                      listener: handleIdentifier(b2, expression)
+                                                    listener: handleNoTypeArguments(')
+                                                    parseArgumentsOpt(b2)
+                                                      listener: handleNoArguments(')
+                                                    listener: handleSend(b2, ')
+                                                listener: handleInterpolationExpression($, null)
+                                                parseStringPart(b2)
+                                                  listener: handleStringPart(')
+                                                listener: endLiteralString(2, ))
+                                    listener: endArguments(1, (, ))
+                              listener: handleSend(print, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(g)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(g)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(g)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, g, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(g, topLevelFunctionDeclaration)
+        parseMethodTypeVar(g)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(g, g, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(g, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(x)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(x, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(y)
+                listener: handleType(int, null)
+                ensureIdentifier(int, formalParameterDeclaration)
+                  listener: handleIdentifier(y, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, y, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(o)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(o, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, o, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(Object)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(Object, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(Object, typeReference)
+                listener: handleNoTypeArguments(p)
+                listener: handleType(Object, null)
+                ensureIdentifier(Object, formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, p, null, null, FormalParameterKind.mandatory, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(f)
+                                parseArguments(f)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(()
+                                              parseParenthesizedExpression(()
+                                                parseExpressionInParenthesis(()
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(x, expression)
+                                                                listener: handleNoTypeArguments(<)
+                                                                parseArgumentsOpt(x)
+                                                                  listener: handleNoArguments(<)
+                                                                listener: handleSend(x, <)
+                                                        listener: beginBinaryExpression(<)
+                                                        parsePrecedenceExpression(<, 9, true)
+                                                          parseUnaryExpression(<, true)
+                                                            parsePrimary(<, expression)
+                                                              parseSendOrFunctionLiteral(<, expression)
+                                                                parseSend(<, expression)
+                                                                  ensureIdentifier(<, expression)
+                                                                    listener: handleIdentifier(y, expression)
+                                                                  listener: handleNoTypeArguments())
+                                                                  parseArgumentsOpt(y)
+                                                                    listener: handleNoArguments())
+                                                                  listener: handleSend(y, ))
+                                                        listener: endBinaryExpression(<)
+                                                    ensureCloseParen(y, ()
+                                                listener: handleParenthesizedExpression(()
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseParenthesizedExpressionOrFunctionLiteral(,)
+                                              parseParenthesizedExpression(,)
+                                                parseExpressionInParenthesis(,)
+                                                  parseExpressionInParenthesisRest(()
+                                                    parseExpression(()
+                                                      parsePrecedenceExpression((, 1, true)
+                                                        parseUnaryExpression((, true)
+                                                          parsePrimary((, expression)
+                                                            parseSendOrFunctionLiteral((, expression)
+                                                              parseSend((, expression)
+                                                                ensureIdentifier((, expression)
+                                                                  listener: handleIdentifier(o, expression)
+                                                                listener: handleNoTypeArguments(as)
+                                                                parseArgumentsOpt(o)
+                                                                  listener: handleNoArguments(as)
+                                                                listener: handleSend(o, as)
+                                                        parseAsOperatorRest(o)
+                                                          listener: beginAsOperatorType(as)
+                                                          computeTypeAfterIsOrAs(as)
+                                                          listener: handleIdentifier(int, typeReference)
+                                                          listener: handleNoTypeArguments())
+                                                          listener: handleType(int, null)
+                                                          listener: endAsOperatorType(as)
+                                                          listener: handleAsOperator(as)
+                                                          skipChainedAsIsOperators(int)
+                                                    ensureCloseParen(int, ()
+                                                listener: handleParenthesizedExpression(()
+                                        listener: beginBinaryExpression(>)
+                                        parsePrecedenceExpression(>, 9, true)
+                                          parseUnaryExpression(>, true)
+                                            parsePrimary(>, expression)
+                                              parseParenthesizedExpressionOrFunctionLiteral(>)
+                                                parseParenthesizedExpression(>)
+                                                  parseExpressionInParenthesis(>)
+                                                    parseExpressionInParenthesisRest(()
+                                                      parseExpression(()
+                                                        parsePrecedenceExpression((, 1, true)
+                                                          parseUnaryExpression((, true)
+                                                            parsePrimary((, expression)
+                                                              parseSendOrFunctionLiteral((, expression)
+                                                                parseSend((, expression)
+                                                                  ensureIdentifier((, expression)
+                                                                    listener: handleIdentifier(p, expression)
+                                                                  listener: handleNoTypeArguments(as)
+                                                                  parseArgumentsOpt(p)
+                                                                    listener: handleNoArguments(as)
+                                                                  listener: handleSend(p, as)
+                                                          parseAsOperatorRest(p)
+                                                            listener: beginAsOperatorType(as)
+                                                            computeTypeAfterIsOrAs(as)
+                                                            listener: handleIdentifier(int, typeReference)
+                                                            listener: handleNoTypeArguments())
+                                                            listener: handleType(int, null)
+                                                            listener: endAsOperatorType(as)
+                                                            listener: handleAsOperator(as)
+                                                            skipChainedAsIsOperators(int)
+                                                      ensureCloseParen(int, ()
+                                                  listener: handleParenthesizedExpression(()
+                                        listener: endBinaryExpression(>)
+                                    listener: endArguments(2, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(g, null, })
+  listener: endTopLevelDeclaration(main)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(main)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(main)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, }, Instance of 'NoType', null, main, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(main, topLevelFunctionDeclaration)
+        parseMethodTypeVar(main)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(main, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, g)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(g)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(g, expression)
+                              listener: handleNoTypeArguments(()
+                              parseArgumentsOpt(g)
+                                parseArguments(g)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    parseExpression(()
+                                      parsePrecedenceExpression((, 1, true)
+                                        parseUnaryExpression((, true)
+                                          parsePrimary((, expression)
+                                            parseLiteralInt(()
+                                              listener: handleLiteralInt(0)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(1)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(2)
+                                    parseExpression(,)
+                                      parsePrecedenceExpression(,, 1, true)
+                                        parseUnaryExpression(,, true)
+                                          parsePrimary(,, expression)
+                                            parseLiteralInt(,)
+                                              listener: handleLiteralInt(3)
+                                    listener: endArguments(4, (, ))
+                              listener: handleSend(g, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(main, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(3, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.parser.expect
new file mode 100644
index 0000000..c1efd8b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.parser.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+f((x < y), (o as int) > (p as int));
+}
+
+main() {
+g(0, 1, 2, 3);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken],[SimpleToken] Object[StringToken] p[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken] >[SimpleToken] ([BeginToken]p[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.scanner.expect
new file mode 100644
index 0000000..c1efd8b
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_03_prime.dart.scanner.expect
@@ -0,0 +1,25 @@
+void f(bool b1, bool b2) {
+print('b1=$b1, b2=$b2');
+}
+
+g(int x, int y, Object o, Object p) {
+f((x < y), (o as int) > (p as int));
+}
+
+main() {
+g(0, 1, 2, 3);
+}
+
+
+void[KeywordToken] f[StringToken]([BeginToken]bool[StringToken] b1[StringToken],[SimpleToken] bool[StringToken] b2[StringToken])[SimpleToken] {[BeginToken]
+print[StringToken]([BeginToken]'b1=[StringToken]$[SimpleToken]b1[StringToken], b2=[StringToken]$[SimpleToken]b2[StringToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+g[StringToken]([BeginToken]int[StringToken] x[StringToken],[SimpleToken] int[StringToken] y[StringToken],[SimpleToken] Object[StringToken] o[StringToken],[SimpleToken] Object[StringToken] p[StringToken])[SimpleToken] {[BeginToken]
+f[StringToken]([BeginToken]([BeginToken]x[StringToken] <[BeginToken] y[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]o[StringToken] as[KeywordToken] int[StringToken])[SimpleToken] >[SimpleToken] ([BeginToken]p[StringToken] as[KeywordToken] int[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+g[StringToken]([BeginToken]0[StringToken],[SimpleToken] 1[StringToken],[SimpleToken] 2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart b/pkg/front_end/parser_testcases/general/issue_45848_04.dart
new file mode 100644
index 0000000..267de12
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart
@@ -0,0 +1,5 @@
+void f<T>() {}
+
+void m() {
+  f<>();
+}
\ No newline at end of file
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect
new file mode 100644
index 0000000..5804baa
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.expect
@@ -0,0 +1,55 @@
+Problems reported:
+
+parser/general/issue_45848_04:4:5: Expected a type, but got '>'.
+  f<>();
+    ^
+
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          handleTypeVariablesDefined(T, 1)
+          handleNoType(T)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(m, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        beginTypeArguments(<)
+          handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
+          handleIdentifier(, typeReference)
+          handleNoTypeArguments(>)
+          handleType(, null)
+        endTypeArguments(1, <, >)
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect
new file mode 100644
index 0000000..7711399
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.intertwined.expect
@@ -0,0 +1,99 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(>, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, m, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(m, topLevelFunctionDeclaration)
+        parseMethodTypeVar(m)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(m, m, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(m, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: beginTypeArguments(<)
+                              reportRecoverableErrorWithToken(>, Instance of 'Template<(Token) => Message>')
+                                listener: handleRecoverableError(Message[ExpectedType, Expected a type, but got '>'., null, {lexeme: >}], >, >)
+                              rewriter()
+                              listener: handleIdentifier(, typeReference)
+                              listener: handleNoTypeArguments(>)
+                              listener: handleType(, null)
+                              listener: endTypeArguments(1, <, >)
+                              parseArgumentsOpt(>)
+                                parseArguments(>)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.parser.expect
new file mode 100644
index 0000000..7ffb0fe
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.parser.expect
@@ -0,0 +1,13 @@
+NOTICE: Stream was rewritten by parser!
+
+void f<T>() {}
+
+void m() {
+f<>();
+}
+
+void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] m[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+f[StringToken]<[BeginToken][SyntheticStringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.scanner.expect
new file mode 100644
index 0000000..753215e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04.dart.scanner.expect
@@ -0,0 +1,11 @@
+void f<T>() {}
+
+void m() {
+f<>();
+}
+
+void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] m[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+f[StringToken]<[BeginToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken][SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart
new file mode 100644
index 0000000..2e637e0
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart
@@ -0,0 +1,5 @@
+void f<T>() {}
+
+void m() {
+  f<x>();
+}
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect
new file mode 100644
index 0000000..72c0d1a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.expect
@@ -0,0 +1,48 @@
+beginCompilationUnit(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(, null)
+      handleVoidKeyword(void)
+      handleIdentifier(f, topLevelFunctionDeclaration)
+      beginTypeVariables(<)
+        beginMetadataStar(T)
+        endMetadataStar(0)
+        handleIdentifier(T, typeVariableDeclaration)
+        beginTypeVariable(T)
+          handleTypeVariablesDefined(T, 1)
+          handleNoType(T)
+        endTypeVariable(>, 0, null, null)
+      endTypeVariables(<, >)
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+      endBlockFunctionBody(0, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration(void)
+  beginMetadataStar(void)
+  endMetadataStar(0)
+  beginTopLevelMember(void)
+    beginTopLevelMethod(}, null)
+      handleVoidKeyword(void)
+      handleIdentifier(m, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        handleIdentifier(f, expression)
+        beginTypeArguments(<)
+          handleIdentifier(x, typeReference)
+          handleNoTypeArguments(>)
+          handleType(x, null)
+        endTypeArguments(1, <, >)
+        beginArguments(()
+        endArguments(0, (, ))
+        handleSend(f, ;)
+        handleExpressionStatement(;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(void, null, })
+  endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect
new file mode 100644
index 0000000..8a8a859
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.intertwined.expect
@@ -0,0 +1,96 @@
+parseUnit(void)
+  skipErrorTokens(void)
+  listener: beginCompilationUnit(void)
+  syntheticPreviousToken(void)
+  parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+    parseMetadataStar()
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(, null, , Instance of 'VoidType', null, f, false)
+        listener: beginTopLevelMethod(, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(f, topLevelFunctionDeclaration)
+        parseMethodTypeVar(f)
+          listener: beginTypeVariables(<)
+          listener: beginMetadataStar(T)
+          listener: endMetadataStar(0)
+          listener: handleIdentifier(T, typeVariableDeclaration)
+          listener: beginTypeVariable(T)
+          listener: handleTypeVariablesDefined(T, 1)
+          listener: handleNoType(T)
+          listener: endTypeVariable(>, 0, null, null)
+          listener: endTypeVariables(<, >)
+        parseGetterOrFormalParameters(>, f, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(>, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(0, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration(void)
+  parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+    parseMetadataStar(})
+      listener: beginMetadataStar(void)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(void)
+      parseTopLevelMethod(}, null, }, Instance of 'VoidType', null, m, false)
+        listener: beginTopLevelMethod(}, null)
+        listener: handleVoidKeyword(void)
+        ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(m, topLevelFunctionDeclaration)
+        parseMethodTypeVar(m)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(m, m, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(m, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, f)
+          parseStatement({)
+            parseStatementX({)
+              parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+                looksLikeLocalFunction(f)
+                parseExpressionStatement({)
+                  parseExpression({)
+                    parsePrecedenceExpression({, 1, true)
+                      parseUnaryExpression({, true)
+                        parsePrimary({, expression)
+                          parseSendOrFunctionLiteral({, expression)
+                            looksLikeFunctionBody(;)
+                            parseSend({, expression)
+                              ensureIdentifier({, expression)
+                                listener: handleIdentifier(f, expression)
+                              listener: beginTypeArguments(<)
+                              listener: handleIdentifier(x, typeReference)
+                              listener: handleNoTypeArguments(>)
+                              listener: handleType(x, null)
+                              listener: endTypeArguments(1, <, >)
+                              parseArgumentsOpt(>)
+                                parseArguments(>)
+                                  parseArgumentsRest(()
+                                    listener: beginArguments(()
+                                    listener: endArguments(0, (, ))
+                              listener: handleSend(f, ;)
+                  ensureSemicolon())
+                  listener: handleExpressionStatement(;)
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(void, null, })
+  listener: endTopLevelDeclaration()
+  reportAllErrorTokens(void)
+  listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.parser.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.parser.expect
new file mode 100644
index 0000000..c268ee5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.parser.expect
@@ -0,0 +1,13 @@
+void f<T>() {}
+
+void m() {
+f<x>();
+}
+
+
+void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] m[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+f[StringToken]<[BeginToken]x[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.scanner.expect
new file mode 100644
index 0000000..c268ee5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/general/issue_45848_04_prime.dart.scanner.expect
@@ -0,0 +1,13 @@
+void f<T>() {}
+
+void m() {
+f<x>();
+}
+
+
+void[KeywordToken] f[StringToken]<[BeginToken]T[StringToken]>[SimpleToken]([BeginToken])[SimpleToken] {[BeginToken]}[SimpleToken]
+
+void[KeywordToken] m[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+f[StringToken]<[BeginToken]x[StringToken]>[SimpleToken]([BeginToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]