Problems reported:

parser/error_recovery/issue_48380_3:2:30: Expected an identifier, but got ';'.
  v./* about to write foo()*/;
                             ^

parser/error_recovery/issue_48380_3:2:30: Expected '(' after this.
  v./* about to write foo()*/;
                             ^

beginCompilationUnit(enum)
  beginMetadataStar(enum)
  endMetadataStar(0)
  beginUncategorizedTopLevelDeclaration(enum)
    handleIdentifier(E, enumDeclaration)
    beginEnum(enum)
      handleNoTypeVariables({)
      handleEnumNoWithClause()
      handleImplements(null, 0)
      handleEnumHeader(enum, {)
      beginMetadataStar(v)
      endMetadataStar(0)
      handleIdentifier(v, enumValueDeclaration)
      handleNoTypeNameInConstructorReference(.)
      beginConstructorReference(v)
        handleNoTypeArguments(.)
        handleRecoverableError(Message[ExpectedIdentifier, Expected an identifier, but got ';'., Try inserting an identifier before ';'., {lexeme: ;}], ;, ;)
        handleIdentifier(, constructorReferenceContinuationAfterTypeArguments)
      endConstructorReference(v, ., ;, ConstructorReferenceContext.Const)
      handleRecoverableError(Message[ExpectedAfterButGot, Expected '(' after this., null, {string: (}], ;, ;)
      beginArguments(()
      endArguments(0, (, ))
      handleEnumElement({)
      handleEnumElements(;, 1)
      beginMetadataStar(const)
      endMetadataStar(0)
      beginMember()
        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
          handleNoType(const)
          handleIdentifier(E, methodDeclaration)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          handleEmptyFunctionBody(;)
        endEnumConstructor(null, const, (, null, ;)
      endMember()
      beginMetadataStar(const)
      endMetadataStar(0)
      beginMember()
        beginMethod(DeclarationKind.Enum, null, null, null, null, const, null, E)
          handleNoType(const)
          handleIdentifier(E, methodDeclaration)
          handleIdentifier(foo, methodDeclarationContinuation)
          handleQualified(.)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
          endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          handleEmptyFunctionBody(;)
        endEnumConstructor(null, const, (, null, ;)
      endMember()
    endEnum(enum, {, 2)
  endTopLevelDeclaration()
endCompilationUnit(1, )
