[parser] Add missing handling of null-aware elements in if-else

Part of https://github.com/dart-lang/sdk/issues/55954

Change-Id: Ie22ff9ddf50f47e20b1cfbf11f01bdc900123619
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/388003
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Chloe Stefantsova <cstefantsova@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
index a8add65..dfe8876 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/literal_entry_info_impl.dart
@@ -254,6 +254,8 @@
       return new Nested(ifCondition, const IfElseComplete());
     } else if (optional('...', next) || optional('...?', next)) {
       return const ElseSpread();
+    } else if (optional('?', next)) {
+      return new Nested(nullAwareEntry, const IfElseComplete());
     }
     return const ElseEntry();
   }
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart
new file mode 100644
index 0000000..cef91a2
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart
@@ -0,0 +1,110 @@
+test1(List list, bool Function(dynamic) p, int? a) {
+  return {
+    for (var element in list)
+      if (p(element))
+        ?a
+  };
+}
+
+test2(List list, bool Function(dynamic) p, int? a, int? b) {
+  return {
+    for (var element in list)
+      if (p(element))
+        ?a
+      else
+        ?b
+  };
+}
+
+test3(List list, bool t, int? a) {
+  return {
+    if (t)
+      for (var element in list)
+        ?a
+  };
+}
+
+test4(List list, bool t, int? a, int? b) {
+  return {
+    if (t)
+      for (var element in list)
+        ?a
+    else
+      for (var element in list)
+        ?b
+  };
+}
+
+test5(List list, bool Function(dynamic) p, int? a) {
+  return {
+    for (var element in list)
+      if (p(element))
+        ?a: "value"
+  };
+}
+
+test6(List list, bool Function(dynamic) p, int? a, int? b) {
+  return {
+    for (var element in list)
+      if (p(element))
+        ?a: "value"
+      else
+        ?b: "value"
+  };
+}
+
+test7(List list, bool t, int? a) {
+  return {
+    if (t)
+      for (var element in list)
+        ?a: "value"
+  };
+}
+
+test8(List list, bool t, int? a, int? b) {
+  return {
+    if (t)
+      for (var element in list)
+        ?a: "value"
+    else
+      for (var element in list)
+        ?b: "value"
+  };
+}
+
+test9(List list, bool Function(dynamic) p, int? a) {
+  return {
+    for (var element in list)
+      if (p(element))
+        "key": ?a
+  };
+}
+
+test10(List list, bool Function(dynamic) p, int? a, int? b) {
+  return {
+    for (var element in list)
+      if (p(element))
+        "key": ?a
+      else
+        "key": ?b
+  };
+}
+
+test11(List list, bool t, int? a) {
+  return {
+    if (t)
+      for (var element in list)
+        "key": ?a
+  };
+}
+
+test12(List list, bool t, int? a, int? b) {
+  return {
+    if (t)
+      for (var element in list)
+        "key": ?a
+    else
+      for (var element in list)
+        "key": ?b
+  };
+}
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.expect b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.expect
new file mode 100644
index 0000000..71036ae
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.expect
@@ -0,0 +1,1211 @@
+beginCompilationUnit(test1)
+  beginMetadataStar(test1)
+  endMetadataStar(0)
+  beginTopLevelMember(test1)
+    beginTopLevelMethod(, null, null)
+      handleNoType()
+      handleIdentifier(test1, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(a, })
+              handleNullAwareElement(?)
+            endIfControlFlow(a)
+          endForInControlFlow(a)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test1, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test2)
+  endMetadataStar(0)
+  beginTopLevelMember(test2)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test2, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(a, else)
+              handleNullAwareElement(?)
+              handleElseControlFlow(else)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(b, })
+              handleNullAwareElement(?)
+            endIfElseControlFlow(b)
+          endForInControlFlow(b)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test2, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test3)
+  endMetadataStar(0)
+  beginTopLevelMember(test3)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test3, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(a, })
+              handleNullAwareElement(?)
+            endForInControlFlow(a)
+          endIfControlFlow(a)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test3, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test4)
+  endMetadataStar(0)
+  beginTopLevelMember(test4)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test4, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(a, else)
+              handleNullAwareElement(?)
+            endForInControlFlow(a)
+            handleElseControlFlow(else)
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(b, })
+              handleNullAwareElement(?)
+            endForInControlFlow(b)
+          endIfElseControlFlow(b)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test4, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test5)
+  endMetadataStar(0)
+  beginTopLevelMember(test5)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test5, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(a, :)
+              beginLiteralString("value")
+              endLiteralString(0, })
+              handleLiteralMapEntry(:, "value", ?, null)
+            endIfControlFlow("value")
+          endForInControlFlow("value")
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test5, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test6)
+  endMetadataStar(0)
+  beginTopLevelMember(test6)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test6, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(a, :)
+              beginLiteralString("value")
+              endLiteralString(0, else)
+              handleLiteralMapEntry(:, "value", ?, null)
+              handleElseControlFlow(else)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(b, :)
+              beginLiteralString("value")
+              endLiteralString(0, })
+              handleLiteralMapEntry(:, "value", ?, null)
+            endIfElseControlFlow("value")
+          endForInControlFlow("value")
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test6, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test7)
+  endMetadataStar(0)
+  beginTopLevelMember(test7)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test7, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(a, :)
+              beginLiteralString("value")
+              endLiteralString(0, })
+              handleLiteralMapEntry(:, "value", ?, null)
+            endForInControlFlow("value")
+          endIfControlFlow("value")
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test7, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test8)
+  endMetadataStar(0)
+  beginTopLevelMember(test8)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test8, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(a, :)
+              beginLiteralString("value")
+              endLiteralString(0, else)
+              handleLiteralMapEntry(:, "value", ?, null)
+            endForInControlFlow("value")
+            handleElseControlFlow(else)
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(:)
+              handleNoArguments(:)
+              handleSend(b, :)
+              beginLiteralString("value")
+              endLiteralString(0, })
+              handleLiteralMapEntry(:, "value", ?, null)
+            endForInControlFlow("value")
+          endIfElseControlFlow("value")
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test8, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test9)
+  endMetadataStar(0)
+  beginTopLevelMember(test9)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test9, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(a, })
+              handleLiteralMapEntry(:, a, null, ?)
+            endIfControlFlow(a)
+          endForInControlFlow(a)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test9, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test10)
+  endMetadataStar(0)
+  beginTopLevelMember(test10)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test10, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          beginFunctionType(bool)
+            handleNoTypeVariables(()
+            handleIdentifier(bool, typeReference)
+            handleNoTypeArguments(Function)
+            handleType(bool, null)
+            beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+              beginMetadataStar(dynamic)
+              endMetadataStar(0)
+              beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                handleIdentifier(dynamic, typeReference)
+                handleNoTypeArguments())
+                handleType(dynamic, null)
+                handleNoName())
+                handleFormalParameterWithoutValue())
+              endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+            endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+          endFunctionType(Function, null)
+          handleIdentifier(p, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginForControlFlow(null, for)
+            beginMetadataStar(var)
+            endMetadataStar(0)
+            handleNoType(var)
+            beginVariablesDeclaration(element, null, var)
+              handleIdentifier(element, localVariableDeclaration)
+              beginInitializedIdentifier(element)
+                handleNoVariableInitializer(element)
+              endInitializedIdentifier(element)
+            endVariablesDeclaration(1, null)
+            handleForInitializerLocalVariableDeclaration(element, true)
+            beginForInExpression(list)
+              handleIdentifier(list, expression)
+              handleNoTypeArguments())
+              handleNoArguments())
+              handleSend(list, ))
+            endForInExpression())
+            handleForInLoopParts(null, for, (, null, in)
+            beginIfControlFlow(if)
+              handleIdentifier(p, expression)
+              handleNoTypeArguments(()
+              beginArguments(()
+                handleIdentifier(element, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(element, ))
+              endArguments(1, (, ))
+              handleSend(p, ))
+              handleParenthesizedCondition((, null, null)
+              handleThenControlFlow())
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(a, else)
+              handleLiteralMapEntry(:, a, null, ?)
+              handleElseControlFlow(else)
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(b, })
+              handleLiteralMapEntry(:, b, null, ?)
+            endIfElseControlFlow(b)
+          endForInControlFlow(b)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test10, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test11)
+  endMetadataStar(0)
+  beginTopLevelMember(test11)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test11, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(a, })
+              handleLiteralMapEntry(:, a, null, ?)
+            endForInControlFlow(a)
+          endIfControlFlow(a)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test11, null, })
+  endTopLevelDeclaration(})
+  beginMetadataStar(test12)
+  endMetadataStar(0)
+  beginTopLevelMember(test12)
+    beginTopLevelMethod(}, null, null)
+      handleNoType(})
+      handleIdentifier(test12, topLevelFunctionDeclaration)
+      handleNoTypeVariables(()
+      beginFormalParameters((, MemberKind.TopLevelMethod)
+        beginMetadataStar(List)
+        endMetadataStar(0)
+        beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(List, typeReference)
+          handleNoTypeArguments(list)
+          handleType(List, null)
+          handleIdentifier(list, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(bool)
+        endMetadataStar(0)
+        beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(bool, typeReference)
+          handleNoTypeArguments(t)
+          handleType(bool, null)
+          handleIdentifier(t, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(a, formalParameterDeclaration)
+          handleFormalParameterWithoutValue(,)
+        endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+        beginMetadataStar(int)
+        endMetadataStar(0)
+        beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+          handleIdentifier(int, typeReference)
+          handleNoTypeArguments(?)
+          handleType(int, ?)
+          handleIdentifier(b, formalParameterDeclaration)
+          handleFormalParameterWithoutValue())
+        endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+      endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+      handleAsyncModifier(null, null)
+      beginBlockFunctionBody({)
+        beginReturnStatement(return)
+          handleNoTypeArguments({)
+          beginIfControlFlow(if)
+            handleIdentifier(t, expression)
+            handleNoTypeArguments())
+            handleNoArguments())
+            handleSend(t, ))
+            handleParenthesizedCondition((, null, null)
+            handleThenControlFlow())
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(a, expression)
+              handleNoTypeArguments(else)
+              handleNoArguments(else)
+              handleSend(a, else)
+              handleLiteralMapEntry(:, a, null, ?)
+            endForInControlFlow(a)
+            handleElseControlFlow(else)
+            beginForControlFlow(null, for)
+              beginMetadataStar(var)
+              endMetadataStar(0)
+              handleNoType(var)
+              beginVariablesDeclaration(element, null, var)
+                handleIdentifier(element, localVariableDeclaration)
+                beginInitializedIdentifier(element)
+                  handleNoVariableInitializer(element)
+                endInitializedIdentifier(element)
+              endVariablesDeclaration(1, null)
+              handleForInitializerLocalVariableDeclaration(element, true)
+              beginForInExpression(list)
+                handleIdentifier(list, expression)
+                handleNoTypeArguments())
+                handleNoArguments())
+                handleSend(list, ))
+              endForInExpression())
+              handleForInLoopParts(null, for, (, null, in)
+              beginLiteralString("key")
+              endLiteralString(0, :)
+              handleIdentifier(b, expression)
+              handleNoTypeArguments(})
+              handleNoArguments(})
+              handleSend(b, })
+              handleLiteralMapEntry(:, b, null, ?)
+            endForInControlFlow(b)
+          endIfElseControlFlow(b)
+          handleLiteralSetOrMap(1, {, null, }, false)
+        endReturnStatement(true, return, ;)
+      endBlockFunctionBody(1, {, })
+    endTopLevelMethod(test12, null, })
+  endTopLevelDeclaration(})
+endCompilationUnit(12, )
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect
new file mode 100644
index 0000000..91ed87c
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.intertwined.expect
@@ -0,0 +1,2406 @@
+parseUnit(test1)
+  skipErrorTokens(test1)
+  listener: beginCompilationUnit(test1)
+  syntheticPreviousToken(test1)
+  parseTopLevelDeclarationImpl(, DirectiveContext(DirectiveState.Unknown))
+    parseMetadataStar()
+      listener: beginMetadataStar(test1)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl()
+      listener: beginTopLevelMember(test1)
+      isReservedKeyword(()
+      parseTopLevelMethod(, null, null, , NoType(), null, test1, false)
+        listener: beginTopLevelMethod(, null, null)
+        listener: handleNoType()
+        ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test1, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test1)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test1, test1, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test1, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(a, })
+                          listener: handleNullAwareElement(?)
+                          listener: endIfControlFlow(a)
+                          listener: endForInControlFlow(a)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test1, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test2)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test2)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test2, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test2, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test2)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test2, test2, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test2, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(else)
+                                      listener: handleSend(a, else)
+                          listener: handleNullAwareElement(?)
+                          listener: handleElseControlFlow(else)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(b, })
+                          listener: handleNullAwareElement(?)
+                          listener: endIfElseControlFlow(b)
+                          listener: endForInControlFlow(b)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test2, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test3)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test3)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test3, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test3, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test3)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test3, test3, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test3, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(a, })
+                          listener: handleNullAwareElement(?)
+                          listener: endForInControlFlow(a)
+                          listener: endIfControlFlow(a)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test3, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test4)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test4)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test4, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test4, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test4)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test4, test4, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test4, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(else)
+                                      listener: handleSend(a, else)
+                          listener: handleNullAwareElement(?)
+                          listener: endForInControlFlow(a)
+                          listener: handleElseControlFlow(else)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(b, })
+                          listener: handleNullAwareElement(?)
+                          listener: endForInControlFlow(b)
+                          listener: endIfElseControlFlow(b)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test4, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test5)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test5)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test5, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test5, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test5)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test5, test5, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test5, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(a, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, })
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: endIfControlFlow("value")
+                          listener: endForInControlFlow("value")
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test5, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test6)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test6)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test6, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test6, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test6)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test6, test6, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test6, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(a, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, else)
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: handleElseControlFlow(else)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(b, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, })
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: endIfElseControlFlow("value")
+                          listener: endForInControlFlow("value")
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test6, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test7)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test7)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test7, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test7, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test7)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test7, test7, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test7, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(a, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, })
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: endForInControlFlow("value")
+                          listener: endIfControlFlow("value")
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test7, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test8)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test8)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test8, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test8, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test8)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test8, test8, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test8, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(a, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, else)
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: endForInControlFlow("value")
+                          listener: handleElseControlFlow(else)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(:)
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(:)
+                                      listener: handleSend(b, :)
+                          parseExpression(:)
+                            parsePrecedenceExpression(:, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(:, true, ConstantPatternContext.none)
+                                parsePrimary(:, expression, ConstantPatternContext.none)
+                                  parseLiteralString(:)
+                                    parseSingleLiteralString(:)
+                                      listener: beginLiteralString("value")
+                                      listener: endLiteralString(0, })
+                          listener: handleLiteralMapEntry(:, "value", ?, null)
+                          listener: endForInControlFlow("value")
+                          listener: endIfElseControlFlow("value")
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test8, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test9)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test9)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test9, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test9, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test9)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test9, test9, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test9, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseLiteralString())
+                                    parseSingleLiteralString())
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(a, })
+                          listener: handleLiteralMapEntry(:, a, null, ?)
+                          listener: endIfControlFlow(a)
+                          listener: endForInControlFlow(a)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test9, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test10)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test10)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test10, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test10, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test10)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test10, test10, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test10, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: beginFunctionType(bool)
+                listener: handleNoTypeVariables(()
+                ensureIdentifier(,, typeReference)
+                  listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(Function)
+                listener: handleType(bool, null)
+                parseFormalParametersRequiredOpt(Function, MemberKind.GeneralizedFunctionType)
+                  parseFormalParametersRest((, MemberKind.GeneralizedFunctionType)
+                    listener: beginFormalParameters((, MemberKind.GeneralizedFunctionType)
+                    parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                      parseMetadataStar(()
+                        listener: beginMetadataStar(dynamic)
+                        listener: endMetadataStar(0)
+                      listener: beginFormalParameter(dynamic, MemberKind.GeneralizedFunctionType, null, null, null)
+                      listener: handleIdentifier(dynamic, typeReference)
+                      listener: handleNoTypeArguments())
+                      listener: handleType(dynamic, null)
+                      listener: handleNoName())
+                      listener: handleFormalParameterWithoutValue())
+                      listener: endFormalParameter(null, null, null, ), null, null, FormalParameterKind.requiredPositional, MemberKind.GeneralizedFunctionType)
+                    listener: endFormalParameters(1, (, ), MemberKind.GeneralizedFunctionType)
+                listener: endFunctionType(Function, null)
+                ensureIdentifier(), formalParameterDeclaration)
+                  listener: handleIdentifier(p, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, p, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        looksLikeFunctionBody())
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(p, expression)
+                                          listener: handleNoTypeArguments(()
+                                          parseArgumentsOpt(p)
+                                            parseArguments(p)
+                                              parseArgumentsRest(()
+                                                listener: beginArguments(()
+                                                parseExpression(()
+                                                  parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                                    parseUnaryExpression((, true, ConstantPatternContext.none)
+                                                      parsePrimary((, expression, ConstantPatternContext.none)
+                                                        parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                                          parseSend((, expression, ConstantPatternContext.none)
+                                                            isNextIdentifier(()
+                                                            ensureIdentifier((, expression)
+                                                              listener: handleIdentifier(element, expression)
+                                                            listener: handleNoTypeArguments())
+                                                            parseArgumentsOpt(element)
+                                                              listener: handleNoArguments())
+                                                            listener: handleSend(element, ))
+                                                listener: endArguments(1, (, ))
+                                          listener: handleSend(p, ))
+                              ensureCloseParen(), ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseLiteralString())
+                                    parseSingleLiteralString())
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(else)
+                                      listener: handleSend(a, else)
+                          listener: handleLiteralMapEntry(:, a, null, ?)
+                          listener: handleElseControlFlow(else)
+                          parseExpression(else)
+                            parsePrecedenceExpression(else, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(else, true, ConstantPatternContext.none)
+                                parsePrimary(else, expression, ConstantPatternContext.none)
+                                  parseLiteralString(else)
+                                    parseSingleLiteralString(else)
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(b, })
+                          listener: handleLiteralMapEntry(:, b, null, ?)
+                          listener: endIfElseControlFlow(b)
+                          listener: endForInControlFlow(b)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test10, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test11)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test11)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test11, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test11, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test11)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test11, test11, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test11, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(3, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseLiteralString())
+                                    parseSingleLiteralString())
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(a, })
+                          listener: handleLiteralMapEntry(:, a, null, ?)
+                          listener: endForInControlFlow(a)
+                          listener: endIfControlFlow(a)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test11, null, })
+  listener: endTopLevelDeclaration(})
+  parseTopLevelDeclarationImpl(}, DirectiveContext(DirectiveState.Declarations))
+    parseMetadataStar(})
+      listener: beginMetadataStar(test12)
+      listener: endMetadataStar(0)
+    parseTopLevelMemberImpl(})
+      listener: beginTopLevelMember(test12)
+      isReservedKeyword(()
+      parseTopLevelMethod(}, null, null, }, NoType(), null, test12, false)
+        listener: beginTopLevelMethod(}, null, null)
+        listener: handleNoType(})
+        ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+          listener: handleIdentifier(test12, topLevelFunctionDeclaration)
+        parseMethodTypeVar(test12)
+          listener: handleNoTypeVariables(()
+        parseGetterOrFormalParameters(test12, test12, false, MemberKind.TopLevelMethod)
+          parseFormalParameters(test12, MemberKind.TopLevelMethod)
+            parseFormalParametersRest((, MemberKind.TopLevelMethod)
+              listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+              parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(()
+                  listener: beginMetadataStar(List)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(List, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(List, typeReference)
+                listener: handleNoTypeArguments(list)
+                listener: handleType(List, null)
+                ensureIdentifier(List, formalParameterDeclaration)
+                  listener: handleIdentifier(list, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, list, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(bool)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(bool, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(bool, typeReference)
+                listener: handleNoTypeArguments(t)
+                listener: handleType(bool, null)
+                ensureIdentifier(bool, formalParameterDeclaration)
+                  listener: handleIdentifier(t, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, t, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(a, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue(,)
+                listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              parseFormalParameter(,, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+                parseMetadataStar(,)
+                  listener: beginMetadataStar(int)
+                  listener: endMetadataStar(0)
+                listener: beginFormalParameter(int, MemberKind.TopLevelMethod, null, null, null)
+                listener: handleIdentifier(int, typeReference)
+                listener: handleNoTypeArguments(?)
+                listener: handleType(int, ?)
+                ensureIdentifier(?, formalParameterDeclaration)
+                  listener: handleIdentifier(b, formalParameterDeclaration)
+                listener: handleFormalParameterWithoutValue())
+                listener: endFormalParameter(null, null, null, b, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+              listener: endFormalParameters(4, (, ), MemberKind.TopLevelMethod)
+        parseAsyncModifierOpt())
+          listener: handleAsyncModifier(null, null)
+          inPlainSync()
+        parseFunctionBody(), false, false)
+          listener: beginBlockFunctionBody({)
+          notEofOrValue(}, return)
+          parseStatement({)
+            parseStatementX({)
+              parseReturnStatement({)
+                listener: beginReturnStatement(return)
+                parseExpression(return)
+                  parsePrecedenceExpression(return, 1, true, ConstantPatternContext.none)
+                    parseUnaryExpression(return, true, ConstantPatternContext.none)
+                      parsePrimary(return, expression, ConstantPatternContext.none)
+                        listener: handleNoTypeArguments({)
+                        parseLiteralSetOrMapSuffix(return, null)
+                          listener: beginIfControlFlow(if)
+                          ensureParenthesizedCondition(if, allowCase: false)
+                            parseExpressionInParenthesisRest((, allowCase: false)
+                              parseExpression(()
+                                parsePrecedenceExpression((, 1, true, ConstantPatternContext.none)
+                                  parseUnaryExpression((, true, ConstantPatternContext.none)
+                                    parsePrimary((, expression, ConstantPatternContext.none)
+                                      parseSendOrFunctionLiteral((, expression, ConstantPatternContext.none)
+                                        parseSend((, expression, ConstantPatternContext.none)
+                                          isNextIdentifier(()
+                                          ensureIdentifier((, expression)
+                                            listener: handleIdentifier(t, expression)
+                                          listener: handleNoTypeArguments())
+                                          parseArgumentsOpt(t)
+                                            listener: handleNoArguments())
+                                          listener: handleSend(t, ))
+                              ensureCloseParen(t, ()
+                              listener: handleParenthesizedCondition((, null, null)
+                          listener: handleThenControlFlow())
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseLiteralString())
+                                    parseSingleLiteralString())
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(a, expression)
+                                      listener: handleNoTypeArguments(else)
+                                      parseArgumentsOpt(a)
+                                        listener: handleNoArguments(else)
+                                      listener: handleSend(a, else)
+                          listener: handleLiteralMapEntry(:, a, null, ?)
+                          listener: endForInControlFlow(a)
+                          listener: handleElseControlFlow(else)
+                          listener: beginForControlFlow(null, for)
+                          parseForLoopPartsStart(null, for, ForPartsContext(null))
+                            parseExpressionStatementOrDeclaration((, ForPartsContext(null))
+                              parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
+                                listener: beginMetadataStar(var)
+                                listener: endMetadataStar(0)
+                                listener: handleNoType(var)
+                                listener: beginVariablesDeclaration(element, null, var)
+                          parseForLoopPartsMid(var, null, for)
+                            parseVariablesDeclarationRest(var, false)
+                              parseOptionallyInitializedIdentifier(var)
+                                ensureIdentifier(var, localVariableDeclaration)
+                                  listener: handleIdentifier(element, localVariableDeclaration)
+                                listener: beginInitializedIdentifier(element)
+                                parseVariableInitializerOpt(element)
+                                  listener: handleNoVariableInitializer(element)
+                                listener: endInitializedIdentifier(element)
+                              listener: endVariablesDeclaration(1, null)
+                            listener: handleForInitializerLocalVariableDeclaration(element, true)
+                          parseForInLoopPartsRest(element, null, for, null, element)
+                            listener: beginForInExpression(list)
+                            parseExpression(in)
+                              parsePrecedenceExpression(in, 1, true, ConstantPatternContext.none)
+                                parseUnaryExpression(in, true, ConstantPatternContext.none)
+                                  parsePrimary(in, expression, ConstantPatternContext.none)
+                                    parseSendOrFunctionLiteral(in, expression, ConstantPatternContext.none)
+                                      parseSend(in, expression, ConstantPatternContext.none)
+                                        isNextIdentifier(in)
+                                        ensureIdentifier(in, expression)
+                                          listener: handleIdentifier(list, expression)
+                                        listener: handleNoTypeArguments())
+                                        parseArgumentsOpt(list)
+                                          listener: handleNoArguments())
+                                        listener: handleSend(list, ))
+                            ensureCloseParen(list, ()
+                            listener: endForInExpression())
+                            listener: handleForInLoopParts(null, for, (, null, in)
+                          parseExpression())
+                            parsePrecedenceExpression(), 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(), true, ConstantPatternContext.none)
+                                parsePrimary(), expression, ConstantPatternContext.none)
+                                  parseLiteralString())
+                                    parseSingleLiteralString())
+                                      listener: beginLiteralString("key")
+                                      listener: endLiteralString(0, :)
+                          parseExpression(?)
+                            parsePrecedenceExpression(?, 1, true, ConstantPatternContext.none)
+                              parseUnaryExpression(?, true, ConstantPatternContext.none)
+                                parsePrimary(?, expression, ConstantPatternContext.none)
+                                  parseSendOrFunctionLiteral(?, expression, ConstantPatternContext.none)
+                                    parseSend(?, expression, ConstantPatternContext.none)
+                                      isNextIdentifier(?)
+                                      ensureIdentifier(?, expression)
+                                        listener: handleIdentifier(b, expression)
+                                      listener: handleNoTypeArguments(})
+                                      parseArgumentsOpt(b)
+                                        listener: handleNoArguments(})
+                                      listener: handleSend(b, })
+                          listener: handleLiteralMapEntry(:, b, null, ?)
+                          listener: endForInControlFlow(b)
+                          listener: endIfElseControlFlow(b)
+                          listener: handleLiteralSetOrMap(1, {, null, }, false)
+                ensureSemicolon(})
+                listener: endReturnStatement(true, return, ;)
+                inGenerator()
+          notEofOrValue(}, })
+          listener: endBlockFunctionBody(1, {, })
+        listener: endTopLevelMethod(test12, null, })
+  listener: endTopLevelDeclaration(})
+  reportAllErrorTokens(test1)
+  listener: endCompilationUnit(12, )
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.parser.expect b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.parser.expect
new file mode 100644
index 0000000..dcd3e0d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.parser.expect
@@ -0,0 +1,223 @@
+test1(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+?a
+};
+}
+
+test2(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+?a
+else
+?b
+};
+}
+
+test3(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+?a
+};
+}
+
+test4(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+?a
+else
+for (var element in list)
+?b
+};
+}
+
+test5(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+?a: "value"
+};
+}
+
+test6(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+?a: "value"
+else
+?b: "value"
+};
+}
+
+test7(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+?a: "value"
+};
+}
+
+test8(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+?a: "value"
+else
+for (var element in list)
+?b: "value"
+};
+}
+
+test9(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+"key": ?a
+};
+}
+
+test10(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+"key": ?a
+else
+"key": ?b
+};
+}
+
+test11(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+"key": ?a
+};
+}
+
+test12(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+"key": ?a
+else
+for (var element in list)
+"key": ?b
+};
+}
+
+
+test1[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test2[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+else[KeywordToken]
+?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test3[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test4[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test5[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test6[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+else[KeywordToken]
+?[SimpleToken]b[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test7[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test8[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]b[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test9[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test10[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+else[KeywordToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test11[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test12[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.scanner.expect b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.scanner.expect
new file mode 100644
index 0000000..dcd3e0d
--- /dev/null
+++ b/pkg/front_end/parser_testcases/null_aware_elements/nested.dart.scanner.expect
@@ -0,0 +1,223 @@
+test1(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+?a
+};
+}
+
+test2(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+?a
+else
+?b
+};
+}
+
+test3(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+?a
+};
+}
+
+test4(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+?a
+else
+for (var element in list)
+?b
+};
+}
+
+test5(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+?a: "value"
+};
+}
+
+test6(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+?a: "value"
+else
+?b: "value"
+};
+}
+
+test7(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+?a: "value"
+};
+}
+
+test8(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+?a: "value"
+else
+for (var element in list)
+?b: "value"
+};
+}
+
+test9(List list, bool Function(dynamic) p, int? a) {
+return {
+for (var element in list)
+if (p(element))
+"key": ?a
+};
+}
+
+test10(List list, bool Function(dynamic) p, int? a, int? b) {
+return {
+for (var element in list)
+if (p(element))
+"key": ?a
+else
+"key": ?b
+};
+}
+
+test11(List list, bool t, int? a) {
+return {
+if (t)
+for (var element in list)
+"key": ?a
+};
+}
+
+test12(List list, bool t, int? a, int? b) {
+return {
+if (t)
+for (var element in list)
+"key": ?a
+else
+for (var element in list)
+"key": ?b
+};
+}
+
+
+test1[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test2[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+else[KeywordToken]
+?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test3[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test4[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test5[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test6[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+else[KeywordToken]
+?[SimpleToken]b[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test7[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test8[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]a[StringToken]:[SimpleToken] "value"[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+?[SimpleToken]b[StringToken]:[SimpleToken] "value"[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test9[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test10[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] Function[KeywordToken]([BeginToken]dynamic[KeywordToken])[SimpleToken] p[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+if[KeywordToken] ([BeginToken]p[StringToken]([BeginToken]element[StringToken])[SimpleToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+else[KeywordToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test11[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test12[StringToken]([BeginToken]List[StringToken] list[StringToken],[SimpleToken] bool[StringToken] t[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] a[StringToken],[SimpleToken] int[StringToken]?[SimpleToken] b[StringToken])[SimpleToken] {[BeginToken]
+return[KeywordToken] {[BeginToken]
+if[KeywordToken] ([BeginToken]t[StringToken])[SimpleToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]a[StringToken]
+else[KeywordToken]
+for[KeywordToken] ([BeginToken]var[KeywordToken] element[StringToken] in[KeywordToken] list[StringToken])[SimpleToken]
+"key"[StringToken]:[SimpleToken] ?[SimpleToken]b[StringToken]
+}[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]