Version 2.14.0-74.0.dev

Merge commit '9ff5ac12c6efec99b8d6580c7a7154bb5e265add' into 'dev'
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/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 7b6cb5f..7292d9a 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -460,7 +460,9 @@
       for (var path in watched.paths) {
         bazelWatcherService!.stopWatching(watched.workspace, path);
       }
+      _stopWatchingBazelBinPaths(watched);
     }
+    bazelSearchSubscriptions.remove(rootFolder)?.cancel();
     driverMap.remove(rootFolder);
   }
 
@@ -474,6 +476,11 @@
     }
   }
 
+  List<String> _getPossibelBazelBinPaths(_BazelWatchedFiles watched) => [
+        pathContext.join(watched.workspace, 'bazel-bin'),
+        pathContext.join(watched.workspace, 'blaze-bin'),
+      ];
+
   /// Establishes watch(es) for the Bazel generated files provided in
   /// [notification].
   ///
@@ -493,10 +500,23 @@
   }
 
   /// Notifies the drivers that a generated Bazel file has changed.
-  void _handleBazelWatchEvents(List<WatchEvent> events) {
+  void _handleBazelWatchEvents(List<WatchEvent> allEvents) {
+    // First check if we have any changes to the bazel-*/blaze-* paths.  If
+    // we do, we'll simply recreate all contexts to make sure that we follow the
+    // correct paths.
+    var bazelSymlinkPaths = bazelWatchedPathsPerFolder.values
+        .expand((watched) => _getPossibelBazelBinPaths(watched))
+        .toSet();
+    if (allEvents.any((event) => bazelSymlinkPaths.contains(event.path))) {
+      refresh();
+      return;
+    }
+
+    var fileEvents =
+        allEvents.where((event) => !bazelSymlinkPaths.contains(event.path));
     for (var driver in driverMap.values) {
       var needsUriReset = false;
-      for (var event in events) {
+      for (var event in fileEvents) {
         if (event.type == ChangeType.ADD) {
           driver.addFile(event.path);
           needsUriReset = true;
@@ -599,6 +619,28 @@
         existingExcludedSet.containsAll(excludedPaths);
   }
 
+  /// Starts watching for the `bazel-bin` and `blaze-bin` symlinks.
+  ///
+  /// This is important since these symlinks might not be present when the
+  /// server starts up, in which case `BazelWorkspace` assumes by default the
+  /// Bazel ones.  So we want to detect if the symlinks get created to reset
+  /// everything and repeat the search for the folders.
+  void _startWatchingBazelBinPaths(_BazelWatchedFiles watched) {
+    var watcherService = bazelWatcherService;
+    if (watcherService == null) return;
+    var paths = _getPossibelBazelBinPaths(watched);
+    watcherService.startWatching(
+        watched.workspace, BazelSearchInfo(paths[0], paths));
+  }
+
+  /// Stops watching for the `bazel-bin` and `blaze-bin` symlinks.
+  void _stopWatchingBazelBinPaths(_BazelWatchedFiles watched) {
+    var watcherService = bazelWatcherService;
+    if (watcherService == null) return;
+    var paths = _getPossibelBazelBinPaths(watched);
+    watcherService.stopWatching(watched.workspace, paths[0]);
+  }
+
   /// Listens to files generated by Bazel that were found or searched for.
   ///
   /// This is handled specially because the files are outside the package
@@ -607,13 +649,19 @@
   /// Does nothing if the [driver] is not in a Bazel workspace.
   void _watchBazelFilesIfNeeded(Folder folder, AnalysisDriver analysisDriver) {
     if (!experimentalEnableBazelWatching) return;
+    var watcherService = bazelWatcherService;
+    if (watcherService == null) return;
+
     var workspace = analysisDriver.analysisContext?.contextRoot.workspace;
     if (workspace is BazelWorkspace &&
         !bazelSearchSubscriptions.containsKey(folder)) {
-      var searchSubscription = workspace.bazelCandidateFiles.listen(
+      bazelSearchSubscriptions[folder] = workspace.bazelCandidateFiles.listen(
           (notification) =>
               _handleBazelSearchInfo(folder, workspace.root, notification));
-      bazelSearchSubscriptions[folder] = searchSubscription;
+
+      var watched = _BazelWatchedFiles(workspace.root);
+      bazelWatchedPathsPerFolder[folder] = watched;
+      _startWatchingBazelBinPaths(watched);
     }
   }
 }
diff --git a/pkg/analysis_server/test/integration/server/bazel_changes_test.dart b/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
index f904df3..da935af 100644
--- a/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
+++ b/pkg/analysis_server/test/integration/server/bazel_changes_test.dart
@@ -35,9 +35,9 @@
   late String bazelRoot;
   late String tmpPath;
   late String workspacePath;
-  late String bazelOutPath;
-  late String bazelBinPath;
-  late String bazelGenfilesPath;
+  late String bazelOrBlazeOutPath;
+  late String bazelOrBlazeBinPath;
+  late String bazelOrBlazeGenfilesPath;
   late Directory oldSourceDirectory;
 
   String inTmpDir(String relative) =>
@@ -61,21 +61,19 @@
     sourceDirectory = Directory(inWorkspace('third_party/dart/project'));
     sourceDirectory.createSync(recursive: true);
 
-    bazelRoot = inTmpDir('bazel_root');
+    bazelRoot = inTmpDir('bazel_or_blaze_root');
     Directory(bazelRoot).createSync(recursive: true);
 
-    bazelOutPath = '$bazelRoot/execroot/bazel_workspace/bazel-out';
-    bazelBinPath = '$bazelRoot/execroot/bazel_workspace/bazel-out/bin';
-    bazelGenfilesPath =
-        '$bazelRoot/execroot/bazel_workspace/bazel-out/genfiles';
+    bazelOrBlazeOutPath =
+        '$bazelRoot/execroot/bazel_or_blaze_workspace/bazel_or_blaze-out';
+    bazelOrBlazeBinPath =
+        '$bazelRoot/execroot/bazel_or_blaze_workspace/bazel_or_blaze-out/bin';
+    bazelOrBlazeGenfilesPath =
+        '$bazelRoot/execroot/bazel_or_blaze_workspace/bazel_or_blaze-out/genfiles';
 
-    Directory(inTmpDir(bazelOutPath)).createSync(recursive: true);
-    Directory(inTmpDir(bazelBinPath)).createSync(recursive: true);
-    Directory(inTmpDir(bazelGenfilesPath)).createSync(recursive: true);
-
-    Link(inWorkspace('bazel-out')).createSync(bazelOutPath);
-    Link(inWorkspace('bazel-bin')).createSync(bazelBinPath);
-    Link(inWorkspace('bazel-genfiles')).createSync(bazelGenfilesPath);
+    Directory(inTmpDir(bazelOrBlazeOutPath)).createSync(recursive: true);
+    Directory(inTmpDir(bazelOrBlazeBinPath)).createSync(recursive: true);
+    Directory(inTmpDir(bazelOrBlazeGenfilesPath)).createSync(recursive: true);
 
     commandLogPath = inTmpDir('$bazelRoot/command.log');
   }
@@ -91,6 +89,17 @@
   // not run from a snapshot.
   @TestTimeout(Timeout.factor(2))
   Future<void> test_bazelChanges() async {
+    await testChangesImpl('bazel');
+  }
+
+  // Add a bit more time -- the isolate take a while to start when the test is
+  // not run from a snapshot.
+  @TestTimeout(Timeout.factor(2))
+  Future<void> test_blazeChanges() async {
+    await testChangesImpl('blaze');
+  }
+
+  Future<void> testChangesImpl(String prefix) async {
     var testFile = inWorkspace('${sourceDirectory.path}/lib/test.dart');
 
     var errors = <AnalysisError>[];
@@ -126,8 +135,9 @@
 
     await resetCompleterAndErrors();
     var generatedFilePath = inWorkspace(
-        '$bazelGenfilesPath/third_party/dart/project/lib/generated.dart');
+        '$bazelOrBlazeGenfilesPath/third_party/dart/project/lib/generated.dart');
     writeFile(generatedFilePath, 'my_fun() {}');
+    _createSymlinks(prefix);
     writeFile(commandLogPath, 'Build completed successfully');
 
     await processedNotification.future;
@@ -145,6 +155,7 @@
     // Now delete the file completely.
     await resetCompleterAndErrors();
     File(generatedFilePath).deleteSync();
+    _deleteSymlinks(prefix);
     writeFile(commandLogPath, 'Build did NOT complete successfully');
 
     await processedNotification.future;
@@ -153,9 +164,22 @@
     // And finally re-add the correct file -- errors should go away once again.
     await resetCompleterAndErrors();
     writeFile(generatedFilePath, 'my_fun() {}');
+    _createSymlinks(prefix);
     writeFile(commandLogPath, 'Build completed successfully');
 
     await processedNotification.future;
     expect(errors, isEmpty);
   }
+
+  void _createSymlinks(String prefix) {
+    Link(inWorkspace('$prefix-out')).createSync(bazelOrBlazeOutPath);
+    Link(inWorkspace('$prefix-bin')).createSync(bazelOrBlazeBinPath);
+    Link(inWorkspace('$prefix-genfiles')).createSync(bazelOrBlazeGenfilesPath);
+  }
+
+  void _deleteSymlinks(String prefix) {
+    Link(inWorkspace('$prefix-out')).deleteSync();
+    Link(inWorkspace('$prefix-bin')).deleteSync();
+    Link(inWorkspace('$prefix-genfiles')).deleteSync();
+  }
 }
diff --git a/pkg/analyzer/lib/src/workspace/bazel_watcher.dart b/pkg/analyzer/lib/src/workspace/bazel_watcher.dart
index 50ceb0c..05ce4a6 100644
--- a/pkg/analyzer/lib/src/workspace/bazel_watcher.dart
+++ b/pkg/analyzer/lib/src/workspace/bazel_watcher.dart
@@ -110,10 +110,21 @@
   /// exist.
   _TimestampAndLength? _pollOne(String path) {
     try {
-      var file = _provider.getFile(path);
-      var timestamp = file.modificationStamp;
-      var length = file.lengthSync;
-      return _TimestampAndLength(timestamp, length);
+      // This might seem a bit convoluted but is necessary to deal with a
+      // symlink to a directory (e.g., `bazel-bin`).
+      var resource = _provider.getResource(
+          _provider.getResource(path).resolveSymbolicLinksSync().path);
+      if (resource is File) {
+        var timestamp = resource.modificationStamp;
+        var length = resource.lengthSync;
+        return _TimestampAndLength(timestamp, length);
+      } else if (resource is Folder) {
+        // `ResourceProvider` doesn't currently support getting timestamps of a
+        // folder, so we use a dummy value here. But it's still useful: this
+        // will correctly generate `ADD` or `REMOVE` events (we'll be just
+        // unable to generate any `CHANGE` events).
+        return _TimestampAndLength(0, 0);
+      }
     } on FileSystemException catch (_) {
       // File doesn't exist, so return null.
       return null;
diff --git a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
index 16df3e4..84faee8 100644
--- a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
+++ b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
@@ -233,6 +233,47 @@
     recPort.close();
   }
 
+  void test_bazelFileWatcherWithFolder() async {
+    _addResources([
+      '/workspace/WORKSPACE',
+    ]);
+
+    // The `_addResources`/`_deleteResources` functions recognize a folder by a
+    // trailing `/`, but everywhere else we need to use normalized paths.
+    var addFolder = (path) => _addResources(['$path/']);
+    var deleteFolder = (path) => _deleteResources(['$path/']);
+
+    var candidates = [
+      convertPath('/workspace/bazel-out'),
+      convertPath('/workspace/blaze-out'),
+    ];
+    var watcher = BazelFilePoller(resourceProvider, candidates);
+
+    // First do some tests with the first candidate path.
+    addFolder(candidates[0]);
+    var event = watcher.poll()!;
+
+    expect(event.type, ChangeType.ADD);
+    expect(event.path, candidates[0]);
+
+    deleteFolder(candidates[0]);
+    event = watcher.poll()!;
+
+    expect(event.type, ChangeType.REMOVE);
+    expect(event.path, candidates[0]);
+
+    // Now check that if we add the *second* candidate, we'll get the
+    // notification for it.
+    addFolder(candidates[1]);
+    event = watcher.poll()!;
+
+    expect(event.type, ChangeType.ADD);
+    expect(event.path, candidates[1]);
+
+    // Next poll should be `null` since there were no changes.
+    expect(watcher.poll(), isNull);
+  }
+
   /// Create new files and directories from [paths].
   void _addResources(List<String> paths) {
     for (String path in paths) {
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]
diff --git a/tools/VERSION b/tools/VERSION
index 5eccd6f..5b7eae7 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 73
+PRERELEASE 74
 PRERELEASE_PATCH 0
\ No newline at end of file