-
Notifications
You must be signed in to change notification settings - Fork 789
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fixes #9, Internal error in FSI: FS0192: binding null type in envBind…
…TypeRef #9 Fixes #10, internal error: binding null type in envBindTypeRef Both issues were caused by the same underlying issue. RefEmit automagically applies escaping to names that contain a ',' So ``,`` becomes ``\,``. When we tried to create a ref to a nested type we didn't add the ',' escaping so we couldnot bind to the created type. The fix is very straightforward, change BasicQualifiedName to correctly escape names with comma's.
- Loading branch information
1 parent
c651690
commit 4267370
Showing
3 changed files
with
85 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
79 changes: 79 additions & 0 deletions
79
.../Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/backtickmoduleandtypenames.fsx
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
//<Expects status=success></Expects> | ||
open System | ||
open System.Reflection | ||
|
||
open Microsoft.FSharp.Quotations | ||
open Microsoft.FSharp.Quotations.Patterns | ||
open Microsoft.FSharp.Quotations.DerivedPatterns | ||
|
||
let failures = ref false | ||
let report_failure () = | ||
stderr.WriteLine " NO"; failures := true | ||
let test s b = stderr.Write(s:string); if b then stderr.WriteLine " OK" else report_failure() | ||
|
||
(*--------------------*) | ||
|
||
// Test cases for Github Issue # 10 module cannot contain , | ||
|
||
// Comma in module name | ||
module ``,`` = | ||
let x = 3 | ||
|
||
// Lots of comma's in module name | ||
module ``,,,,,,,,,,,`` = | ||
let x = 5 | ||
|
||
// Lots of comma's and other characters in module name | ||
module ``One, 2, Three, 4, Five`` = | ||
let x = 7 | ||
|
||
// Nested modules with commas | ||
module ``Nested modules with commas`` = | ||
module ``One, `` = | ||
module ``Two, `` = | ||
module ``Three, `` = | ||
let x = 9 | ||
|
||
module ``Comma in type name`` = | ||
type ``,`` = | ||
static member x = 13 | ||
|
||
// Lots of comma's in type name | ||
module ``Lots of comma's in type name`` = | ||
type ``,,,,,,,`` = | ||
static member x = 15 | ||
|
||
// Lots of comma's and other characters in type name | ||
module ``Lots of comma's and other characters in type name`` = | ||
type ``One, 2, Three, 4, Five`` = | ||
static member x = 17 | ||
|
||
do | ||
let eval expr value = if (expr) = value then true else false | ||
|
||
test "Comma in module name" (eval ``,``.x 3) | ||
test "Lots of comma's in module name" (eval ``,,,,,,,,,,,``.x 5) | ||
test "Lots of comma's and other characters in module name" (eval ``One, 2, Three, 4, Five``.x 7) | ||
test "Nested modules with commas" (eval ``Nested modules with commas``.``One, ``.``Two, ``.``Three, ``.x 9) | ||
|
||
test "Comma in type name" (eval ``Comma in type name``.``,``.x 13) | ||
test "Lots of comma's in type name" (eval ``Lots of comma's in type name``.``,,,,,,,``.x 15) | ||
test "Lots of comma's and other characters in type name" (eval ``Lots of comma's and other characters in type name``.``One, 2, Three, 4, Five``.x 17) | ||
|
||
let eval expr value = (match expr with | PropertyGet (a, b, c) -> (if (b.GetGetMethod(true) :> MethodBase).Invoke(null, null) :?>int = value then true else false) | _ -> false) | ||
|
||
test "Comma in module name from quotation" (eval <@@ ``,``.x @@> 3) | ||
test "Lots of comma's in module name from quotation" (eval <@@ ``,,,,,,,,,,,``.x @@> 5) | ||
test "Lots of comma's and other characters in module name from quotation" (eval <@@ ``One, 2, Three, 4, Five``.x @@> 7) | ||
test "Nested modules with commas from quotation" (eval <@@ ``Nested modules with commas``.``One, ``.``Two, ``.``Three, ``.x @@> 9) | ||
|
||
test "Comma in type name from quotation" (eval <@@ ``Comma in type name``.``,``.x @@> 13) | ||
test "Lots of comma's in type name from quotation" (eval <@@ ``Lots of comma's in type name``.``,,,,,,,``.x @@> 15) | ||
test "Lots of comma's and other characters in type name from quotation" (eval <@@ ``Lots of comma's and other characters in type name``.``One, 2, Three, 4, Five``.x @@> 17) | ||
|
||
let aa = | ||
if !failures then (stdout.WriteLine "Test Failed"; exit 1) | ||
|
||
do (stdout.WriteLine "Test Passed"; | ||
System.IO.File.WriteAllText("test.ok","ok"); | ||
exit 0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters