diff --git a/src/Compiler/lex.fsl b/src/Compiler/lex.fsl index b3ddfad4a13..995f3fe09c0 100644 --- a/src/Compiler/lex.fsl +++ b/src/Compiler/lex.fsl @@ -939,7 +939,9 @@ rule token (args: LexArgs) (skip: bool) = parse | "-" { MINUS } - | "~" { RESERVED } + | "~" + { errorR (Error(FSComp.SR.lexInvalidIdentifier(), lexbuf.LexemeRange)) + RESERVED } | ignored_op_char* '*' '*' op_char* { checkExprOp lexbuf; INFIX_STAR_STAR_OP(lexeme lexbuf) } diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs new file mode 100644 index 00000000000..474693d2043 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs @@ -0,0 +1,3 @@ +module Module + +~x diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl new file mode 100644 index 00000000000..0ef183357aa --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 01.fs.bsl @@ -0,0 +1,17 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Unary - Reserved 01.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (App + (NonAtomic, false, + ArbitraryAfterError ("unfinished identifier", (3,0--3,1)), + Ident x, (3,0--3,2)), (3,0--3,2))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,2), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,0)-(3,1) parse error This is not a valid identifier diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs new file mode 100644 index 00000000000..e848e499d1d --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs @@ -0,0 +1,3 @@ +module Module + +x ~ y diff --git a/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl new file mode 100644 index 00000000000..d246acbd5b9 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Unary - Reserved 02.fs.bsl @@ -0,0 +1,19 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Unary - Reserved 02.fs", false, + QualifiedNameOfFile Module, [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (App + (NonAtomic, false, + App + (NonAtomic, false, Ident x, + ArbitraryAfterError ("unfinished identifier", (3,2--3,3)), + (3,0--3,3)), Ident y, (3,0--3,5)), (3,0--3,5))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(3,2)-(3,3) parse error This is not a valid identifier