Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitb40d937

Browse files
committed
Fix demangling of provided types with only default values -fixesdotnet#98
1 parent515501a commitb40d937

File tree

4 files changed

+74
-66
lines changed

4 files changed

+74
-66
lines changed

‎src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<!-- Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.-->
33
<ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
44
<PropertyGroup>
@@ -65,7 +65,7 @@
6565
</ItemGroup>
6666
<ItemGroup>
6767
<CompileInclude="NUnitFrameworkShims.fs"Condition="'$(TargetFramework)' == 'sl3-wp'" />
68-
<CompileInclude="ManglelingNameOfProvidedTypes.fs" />
68+
<CompileInclude="ManglingNameOfProvidedTypes.fs" />
6969
<CompileInclude="HashIfExpression.fs" />
7070
</ItemGroup>
7171
<ItemGroup>

‎src/fsharp/FSharp.Compiler.Unittests/ManglelingNameOfProvidedTypes.fs‎

Lines changed: 0 additions & 54 deletions
This file was deleted.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
2+
namespaceFSharp.Compiler.Unittests
3+
4+
openSystem
5+
openSystem.Text
6+
openNUnit.Framework
7+
openMicrosoft.FSharp.Compiler
8+
9+
[<TestFixture>]
10+
typeManglingNamesOfProvidedTypesWithSingleParameter()=
11+
12+
[<Test>]
13+
memberthis.MangleWithNonDefaultValue()=
14+
letmangled=
15+
PrettyNaming.computeMangledNameWithoutDefaultArgValues("MyNamespace.Test",[|"xyz"|],[|"Foo", Some"abc"|])
16+
Assert.AreEqual("MyNamespace.Test,Foo=\"xyz\"", mangled)
17+
18+
[<Test>]
19+
memberthis.MangleWithDefaultValue()=
20+
letmangled=
21+
PrettyNaming.computeMangledNameWithoutDefaultArgValues("MyNamespace.Test",[|"xyz"|],[|"Foo", Some"xyz"|])
22+
Assert.AreEqual("MyNamespace.Test,", mangled)
23+
24+
[<Test>]
25+
memberthis.DemangleNonDefaultValue()=
26+
letname,parameters= PrettyNaming.demangleProvidedTypeName"MyNamespace.Test,Foo=\"xyz\""
27+
Assert.AreEqual("MyNamespace.Test", name)
28+
Assert.AreEqual([|"Foo","xyz"|], parameters)
29+
30+
[<Test>]
31+
memberthis.DemangleDefaultValue()=
32+
// If all provided parameters are the default value demangling fails - see #98
33+
letname,parameters= PrettyNaming.demangleProvidedTypeName"MyNamespace.Test,"
34+
Assert.AreEqual("MyNamespace.Test", name)
35+
Assert.AreEqual([||], parameters)
36+
37+
[<TestFixture>]
38+
typeManglingNamesOfProvidedTypesWithMultipleParameter()=
39+
40+
[<Test>]
41+
memberthis.MangleWithNonDefaultValue()=
42+
letmangled=
43+
PrettyNaming.computeMangledNameWithoutDefaultArgValues
44+
("MyNamespace.Test",[|"xyz";"abc"|],
45+
[|"Foo", Some"foo"
46+
"Foo2", Some"foo2"|])
47+
Assert.AreEqual("MyNamespace.Test,Foo=\"xyz\",Foo2=\"abc\"", mangled)
48+
49+
[<Test>]
50+
memberthis.MangleWithDefaultValue()=
51+
letmangled=
52+
PrettyNaming.computeMangledNameWithoutDefaultArgValues
53+
("MyNamespace.Test",[|"xyz";"abc"|],
54+
[|"Foo", Some"xyz"
55+
"Foo2", Some"abc"|])
56+
Assert.AreEqual("MyNamespace.Test,", mangled)
57+
58+
[<Test>]
59+
memberthis.DemangleMultiParameter()=
60+
letname,parameters= PrettyNaming.demangleProvidedTypeName"TestType,Foo=\"xyz\",Foo2=\"abc\""
61+
Assert.AreEqual("TestType", name)
62+
Assert.AreEqual([|"Foo","xyz"
63+
"Foo2","abc"|], parameters)

‎src/fsharp/PrettyNaming.fs‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -445,16 +445,15 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming
445445

446446
letdemangleProvidedTypeName(typeLogicalName:string)=
447447
if typeLogicalName.Contains","then
448-
letpieces= splitAroundQuotation typeLogicalName','
449-
if pieces.[1..]|> Array.forall(fun x-> tryDemangleStaticStringArg x|> Option.isSome)then
450-
letargNamesAndValues=
451-
pieces.[1..]|> Array.map(fun piece->
452-
match tryDemangleStaticStringArg piecewith
453-
| None-> raise(InvalidMangledStaticArg piece)
454-
| Some v-> v)
455-
pieces.[0], argNamesAndValues
456-
else
457-
typeLogicalName,[||]
448+
letpieces= splitAroundQuotation typeLogicalName','
449+
match pieceswith
450+
|[| x;""|]-> x,[||]
451+
|_->
452+
letargNamesAndValues= pieces.[1..]|> Array.choose tryDemangleStaticStringArg
453+
if argNamesAndValues.Length=(pieces.Length-1)then
454+
pieces.[0], argNamesAndValues
455+
else
456+
typeLogicalName,[||]
458457
else
459458
typeLogicalName,[||]
460459

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp