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

Commitf46558c

Browse files
forkilatkin
authored andcommitted
Fix name-mangling of provided types
fixesdotnet#102closesdotnet#203commit6cc3227Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Tue Feb 3 15:30:23 2015 +0100 Do not generate logical type names like "MyNamespace.Test,"commitb40d937Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Sun Jan 25 15:08:36 2015 +0100 Fix demangling of provided types with only default values -fixesdotnet#98commit515501aAuthor: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Sun Jan 25 14:56:45 2015 +0100 Create test case fordotnet#98commit5569580Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Sun Jan 25 14:50:04 2015 +0100 Added some tests to describe current behaviour of NameMangling of provided typescommitbe2d157Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Sun Jan 25 14:22:49 2015 +0100 Extract computeMangledNameWithoutDefaultArgValues to make it testablecommitbbdd2a3Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de>Date: Sun Jan 25 13:13:00 2015 +0100 Cleanup: removed commented code which uses deleted functions
1 parentc9d7c43 commitf46558c

File tree

4 files changed

+96
-25
lines changed

4 files changed

+96
-25
lines changed

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

Lines changed: 2 additions & 1 deletion
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>
@@ -60,6 +60,7 @@
6060
</ItemGroup>
6161
<ItemGroup>
6262
<CompileInclude="NUnitFrameworkShims.fs"Condition="'$(TargetFramework)' == 'sl3-wp'" />
63+
<CompileInclude="ManglingNameOfProvidedTypes.fs" />
6364
<CompileInclude="HashIfExpression.fs" />
6465
</ItemGroup>
6566
<ItemGroup>
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
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+
letname,parameters= PrettyNaming.demangleProvidedTypeName"MyNamespace.Test,"
33+
Assert.AreEqual("MyNamespace.Test", name)
34+
Assert.AreEqual([||], parameters)
35+
36+
[<Test>]
37+
memberthis.DemangleNewDefaultValue()=
38+
letname,parameters= PrettyNaming.demangleProvidedTypeName"MyNamespace.Test"
39+
Assert.AreEqual("MyNamespace.Test", name)
40+
Assert.AreEqual([||], parameters)
41+
42+
[<TestFixture>]
43+
typeManglingNamesOfProvidedTypesWithMultipleParameter()=
44+
45+
[<Test>]
46+
memberthis.MangleWithNonDefaultValue()=
47+
letmangled=
48+
PrettyNaming.computeMangledNameWithoutDefaultArgValues
49+
("MyNamespace.Test",[|"xyz";"abc"|],
50+
[|"Foo", Some"foo"
51+
"Foo2", Some"foo2"|])
52+
Assert.AreEqual("MyNamespace.Test,Foo=\"xyz\",Foo2=\"abc\"", mangled)
53+
54+
[<Test>]
55+
memberthis.MangleWithDefaultValue()=
56+
letmangled=
57+
PrettyNaming.computeMangledNameWithoutDefaultArgValues
58+
("MyNamespace.Test",[|"xyz";"abc"|],
59+
[|"Foo", Some"xyz"
60+
"Foo2", Some"abc"|])
61+
Assert.AreEqual("MyNamespace.Test", mangled)
62+
63+
[<Test>]
64+
memberthis.DemangleMultiParameter()=
65+
letname,parameters= PrettyNaming.demangleProvidedTypeName"TestType,Foo=\"xyz\",Foo2=\"abc\""
66+
Assert.AreEqual("TestType", name)
67+
Assert.AreEqual([|"Foo","xyz"
68+
"Foo2","abc"|], parameters)

‎src/fsharp/PrettyNaming.fs‎

Lines changed: 25 additions & 14 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

@@ -463,8 +462,20 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming
463462
nonDefaultArgs
464463
|> Array.map mangleStaticStringArg
465464
|> String.concat","
466-
typeLogicalName+","+nonDefaultArgsText
467465

468-
//let testDemangleStaticStringArg() =
469-
// for x in [ ""; "\""; "\"\""; "a"; "\\"; "\\\\"; "\\\""; "_"; "\"\"" ] do
470-
// if demangleStaticStringArg (mangleStaticStringArg x) <> x then printfn "failed for <<%s>>" x
466+
if nonDefaultArgsText=""then
467+
typeLogicalName
468+
else
469+
typeLogicalName+","+ nonDefaultArgsText
470+
471+
472+
letcomputeMangledNameWithoutDefaultArgValues(nm,staticArgs,defaultArgValues)=
473+
letnonDefaultArgs=
474+
(staticArgs,defaultArgValues)
475+
||> Array.zip
476+
|> Array.choose(fun(staticArg,(defaultArgName,defaultArgValue))->
477+
letactualArgValue= string staticArg
478+
match defaultArgValuewith
479+
| Some vwhen v= actualArgValue-> None
480+
|_-> Some(defaultArgName, actualArgValue))
481+
mangleProvidedTypeName(nm, nonDefaultArgs)

‎src/fsharp/est.fs‎

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1262,16 +1262,7 @@ module internal ExtensionTyping =
12621262
staticParams.PApply((fun ps-> ps|> Array.map(fun sp-> sp.Name,(if sp.IsOptionalthen Some(string sp.RawDefaultValue)else None))),range=m)
12631263

12641264
letdefaultArgValues= defaultArgValues.PUntaint(id,m)
1265-
1266-
letnonDefaultArgs=
1267-
(staticArgs,defaultArgValues)
1268-
||> Array.zip
1269-
|> Array.choose(fun(staticArg,(defaultArgName,defaultArgValue))->
1270-
letactualArgValue= string staticArg
1271-
match defaultArgValuewith
1272-
| Some vwhen v= actualArgValue-> None
1273-
|_-> Some(defaultArgName, actualArgValue))
1274-
PrettyNaming.mangleProvidedTypeName(nm, nonDefaultArgs)
1265+
PrettyNaming.computeMangledNameWithoutDefaultArgValues(nm,staticArgs,defaultArgValues)
12751266

12761267
/// Apply the given provided method to the given static arguments (the arguments are assumed to have been sorted into application order)
12771268
letTryApplyProvidedMethod(methBeforeArgs:Tainted<ProvidedMethodBase>,staticArgs:obj[],m:range)=

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp