Problems reported:

parser/general/ambiguous_builder_01:5:1: A function declaration needs an explicit list of parameters.
x.y = 42;
^

parser/general/ambiguous_builder_01:5:2: Expected a function body, but got '.'.
x.y = 42;
 ^

parser/general/ambiguous_builder_01:5:2: Expected a declaration, but got '.'.
x.y = 42;
 ^

parser/general/ambiguous_builder_01:5:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
x.y = 42;
  ^

parser/general/ambiguous_builder_01:6:1: A function declaration needs an explicit list of parameters.
x.z = true;
^

parser/general/ambiguous_builder_01:6:2: Expected a function body, but got '.'.
x.z = true;
 ^

parser/general/ambiguous_builder_01:6:2: Expected a declaration, but got '.'.
x.z = true;
 ^

parser/general/ambiguous_builder_01:6:3: Variables must be declared using the keywords 'const', 'final', 'var' or a type name.
x.z = true;
  ^

beginCompilationUnit(x)
  beginMetadataStar(x)
  endMetadataStar(0)
  beginTopLevelMember(x)
    beginTopLevelMethod(, null)
      handleNoType()
      handleIdentifier(x, topLevelFunctionDeclaration)
      handleNoTypeVariables(.)
      handleRecoverableError(MissingFunctionParameters, x, x)
      beginFormalParameters((, MemberKind.TopLevelMethod)
      endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
      handleAsyncModifier(null, null)
      handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {token: .}], ., .)
      handleInvalidFunctionBody({)
    endTopLevelMethod(x, null, })
  endTopLevelDeclaration(.)
  beginMetadataStar(.)
  endMetadataStar(0)
  beginTopLevelMember(.)
    handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '.'., null, {token: .}], ., .)
    handleInvalidTopLevelDeclaration(.)
  endTopLevelDeclaration(y)
  beginMetadataStar(y)
  endMetadataStar(0)
  beginTopLevelMember(y)
    handleRecoverableError(MissingConstFinalVarOrType, y, y)
    handleNoType(.)
    handleIdentifier(y, topLevelVariableDeclaration)
    beginFieldInitializer(=)
      handleLiteralInt(42)
    endFieldInitializer(=, ;)
  endTopLevelFields(null, null, null, null, 1, y, ;)
endTopLevelDeclaration(x)
beginMetadataStar(x)
endMetadataStar(0)
beginTopLevelMember(x)
  beginTopLevelMethod(;, null)
    handleNoType(;)
    handleIdentifier(x, topLevelFunctionDeclaration)
    handleNoTypeVariables(.)
    handleRecoverableError(MissingFunctionParameters, x, x)
    beginFormalParameters((, MemberKind.TopLevelMethod)
    endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
    handleAsyncModifier(null, null)
    handleRecoverableError(Message[ExpectedFunctionBody, Expected a function body, but got '.'., null, {token: .}], ., .)
    handleInvalidFunctionBody({)
  endTopLevelMethod(x, null, })
endTopLevelDeclaration(.)
beginMetadataStar(.)
endMetadataStar(0)
beginTopLevelMember(.)
  handleRecoverableError(Message[ExpectedDeclaration, Expected a declaration, but got '.'., null, {token: .}], ., .)
  handleInvalidTopLevelDeclaration(.)
endTopLevelDeclaration(z)
beginMetadataStar(z)
endMetadataStar(0)
beginTopLevelMember(z)
  handleRecoverableError(MissingConstFinalVarOrType, z, z)
  handleNoType(.)
  handleIdentifier(z, topLevelVariableDeclaration)
  beginFieldInitializer(=)
    handleLiteralBool(true)
  endFieldInitializer(=, ;)
endTopLevelFields(null, null, null, null, 1, z, ;)
endTopLevelDeclaration(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginTopLevelMethod(;, null)
  handleVoidKeyword(void)
  handleIdentifier(foo, topLevelFunctionDeclaration)
  handleNoTypeVariables(()
  beginFormalParameters((, MemberKind.TopLevelMethod)
  endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
  handleAsyncModifier(null, null)
  beginBlockFunctionBody({)
    beginIfStatement(if)
      handleIdentifier(x, expression)
      handleNoTypeArguments(!=)
      handleNoArguments(!=)
      handleSend(x, !=)
      beginBinaryExpression(!=)
      handleLiteralNull(null)
      endBinaryExpression(!=)
      handleParenthesizedCondition(()
      beginThenStatement({)
        beginBlock({, BlockKind(statement))
        endBlock(0, {, }, BlockKind(statement))
      endThenStatement(})
    endIfStatement(if, null)
  endBlockFunctionBody(1, {, })
endTopLevelMethod(void, null, })
endTopLevelDeclaration()
endCompilationUnit(7, )
