Skip to content

Commit f389759

Browse files
Cherry-pick various changes from NextGen branch
1 parent fad9429 commit f389759

25 files changed

Lines changed: 409 additions & 327 deletions

SharpGen.Platform/CppParser.cs

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -74,16 +74,7 @@ public CppParser(Logger logger, ConfigFile configRoot)
7474
private void Initialize()
7575
{
7676
foreach (var bindRule in _configRoot.ConfigFilesLoaded.SelectMany(cfg => cfg.Bindings))
77-
{
78-
if (_boundTypes.Contains(bindRule.From))
79-
{
80-
Logger.Warning(LoggingCodes.DuplicateBinding, $"Duplicate type bind for [{bindRule.From}] specified. First binding takes priority.");
81-
}
82-
else
83-
{
84-
_boundTypes.Add(bindRule.From);
85-
}
86-
}
77+
_boundTypes.Add(bindRule.From);
8778

8879
foreach (var configFile in _configRoot.ConfigFilesLoaded)
8980
{
@@ -1095,7 +1086,7 @@ private string ResolveType(string typeId)
10951086
/// <summary>
10961087
/// Converts a gccxml FundamentalType to a shorter form:
10971088
/// signed char => char
1098-
/// long long int => longlong
1089+
/// long long int => long long
10991090
/// short unsigned int => unsigned short
11001091
/// char => char
11011092
/// long unsigned int => unsigned int
@@ -1106,7 +1097,7 @@ private string ResolveType(string typeId)
11061097
/// unsigned char => unsigned char
11071098
/// unsigned int => unsigned int
11081099
/// wchar_t => wchar_t
1109-
/// long long unsigned int => unsigned longlong
1100+
/// long long unsigned int => unsigned long long
11101101
/// double => double
11111102
/// void => void
11121103
/// long double => long double
@@ -1158,7 +1149,7 @@ private string ConvertFundamentalType(string typeName)
11581149
if (longCount == 1 && outputType == "double")
11591150
outputType = "long double"; // 96 bytes, unhandled
11601151
if (longCount == 2)
1161-
outputType = "longlong";
1152+
outputType = "long long";
11621153
if (shortCount == 1)
11631154
outputType = "short";
11641155
if (isUnsigned)

SharpGen.Runtime/Mapping.xml

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,23 @@
1111

1212
<bindings>
1313
<!-- Primitive bindings -->
14-
<bind from="void" to="System.Void" />
15-
<bind from="int" to="System.Int32" />
16-
<bind from="unsigned int" to="System.UInt32" />
17-
<bind from="short" to="System.Int16" />
18-
<bind from="unsigned short" to="System.UInt16" />
19-
<bind from="unsigned char" to="System.Byte" />
14+
<bind from="void" to="void" />
15+
<bind from="int" to="int" />
16+
<bind from="unsigned int" to="uint" />
17+
<bind from="short" to="short" />
18+
<bind from="unsigned short" to="ushort" />
19+
<bind from="unsigned char" to="byte" />
2020
<bind from="long" to="SharpGen.Runtime.NativeLong" />
2121
<bind from="unsigned long" to="SharpGen.Runtime.NativeULong" />
22-
<bind from="longlong" to="System.Int64" />
23-
<bind from="unsigned longlong" to="System.UInt64" />
24-
<bind from="float" to="System.Single" />
25-
<bind from="double" to="System.Double" />
22+
<bind from="long long" to="long" />
23+
<bind from="longlong" to="long" />
24+
<bind from="unsigned long long" to="ulong" />
25+
<bind from="unsigned longlong" to="ulong" />
26+
<bind from="float" to="float" />
27+
<bind from="double" to="double" />
2628
<bind from="size_t" to="SharpGen.Runtime.PointerSize" />
2729
<bind from="ptrdiff_t" to="SharpGen.Runtime.PointerSize" />
28-
<bind from="bool" to="System.Boolean" marshal="System.Byte" />
30+
<bind from="bool" to="bool" marshal="byte" />
2931
<bind from="__function__stdcall" to="SharpGen.Runtime.FunctionCallback" />
3032
<bind from="GUID" to="System.Guid" />
3133
</bindings>
Lines changed: 136 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using SharpGen.CppModel;
1+
using System.Linq;
2+
using SharpGen.Config;
3+
using SharpGen.CppModel;
24
using SharpGen.Transform;
35
using Xunit;
46

@@ -12,30 +14,75 @@ public void ShortNamingRules()
1214
var manager = new NamingRulesManager();
1315

1416
manager.AddShortNameRule("DESC", "Description");
15-
var paramNameList = manager.Rename(
17+
18+
var parameters = new[]
19+
{
20+
new CppParameter("pShaderDESC"),
21+
new CppParameter("pShaderDESC") {Pointer = "*"},
22+
new CppParameter("pShader_DESC") {Pointer = "*"},
23+
new CppParameter("p0") {Pointer = "*"},
24+
new CppParameter("p0") {Pointer = "*"},
25+
new CppParameter("0"),
26+
new CppParameter("break"),
27+
new CppParameter("void"),
28+
new CppParameter("string")
29+
};
30+
31+
Assert.Equal(
32+
new[]
33+
{
34+
"pShaderDESC",
35+
"shaderDESCRef",
36+
"shaderDescriptionRef",
37+
"p0",
38+
"p01",
39+
"arg0",
40+
"@break",
41+
"@void",
42+
"text",
43+
},
44+
manager.Rename(parameters)
45+
);
46+
47+
foreach (var cppParameter in parameters)
48+
cppParameter.Rule.NamingFlags = NamingFlags.NoHungarianNotationHandler;
49+
50+
Assert.Equal(
51+
new[]
52+
{
53+
"pShaderDESC",
54+
"pShaderDESC1",
55+
"pShaderDescription",
56+
"p0",
57+
"p01",
58+
"arg0",
59+
"@break",
60+
"@void",
61+
"text",
62+
},
63+
manager.Rename(parameters)
64+
);
65+
66+
foreach (var cppParameter in parameters)
67+
cppParameter.Rule.NamingFlags = NamingFlags.NoShortNameExpand | NamingFlags.KeepUnderscore |
68+
NamingFlags.NoHungarianNotationHandler | NamingFlags.NoPrematureBreak;
69+
70+
Assert.Equal(
1671
new[]
1772
{
18-
new CppParameter("pShaderDESC"),
19-
new CppParameter("pShaderDESC") {Pointer = "*"},
20-
new CppParameter("pShader_DESC") {Pointer = "*"},
21-
new CppParameter("p0") {Pointer = "*"},
22-
new CppParameter("p0") {Pointer = "*"},
23-
new CppParameter("0"),
24-
new CppParameter("break"),
25-
new CppParameter("void"),
26-
new CppParameter("string")
27-
}
73+
"pShaderDESC",
74+
"pShaderDESC1",
75+
"pShader_Desc",
76+
"p0",
77+
"p01",
78+
"arg0",
79+
"@break",
80+
"@void",
81+
"text",
82+
},
83+
manager.Rename(parameters)
2884
);
29-
Assert.Equal(9, paramNameList.Count);
30-
Assert.Equal("pShaderDESC", paramNameList[0]);
31-
Assert.Equal("shaderDESCRef", paramNameList[1]);
32-
Assert.Equal("shaderDescriptionRef", paramNameList[2]);
33-
Assert.Equal("p0", paramNameList[3]);
34-
Assert.Equal("p01", paramNameList[4]);
35-
Assert.Equal("arg0", paramNameList[5]);
36-
Assert.Equal("@break", paramNameList[6]);
37-
Assert.Equal("@void", paramNameList[7]);
38-
Assert.Equal("text", paramNameList[8]);
85+
3986
Assert.Equal("ShaderDESC", manager.Rename(new CppInterface("ShaderDESC")));
4087
Assert.Equal("ShaderDescription", manager.Rename(new CppInterface("Shader_DESC")));
4188
Assert.Equal("ShaderDescription", manager.Rename(new CppInterface("SHADER_DESC")));
@@ -55,5 +102,72 @@ public void LongerRuleTakesPrecedent()
55102

56103
Assert.Equal("RawDeviceInformation", manager.Rename(new CppStruct("RAW_DEVICE_INFORMATION")));
57104
}
105+
106+
[Fact]
107+
public void Destination()
108+
{
109+
var manager = new NamingRulesManager();
110+
111+
manager.AddShortNameRule("DST", "Destination");
112+
manager.AddShortNameRule("DEST", "Destination");
113+
114+
CppEnum cppEnum = new("COLORMANAGEMENT_PROP");
115+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_SOURCE_COLOR_CONTEXT", "0");
116+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_SOURCE_RENDERING_INTENT", "1");
117+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_DESTINATION_COLOR_CONTEXT", "2");
118+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_DESTINATION_RENDERING_INTENT", "3");
119+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_ALPHA_MODE", "4");
120+
cppEnum.AddEnumItem("COLORMANAGEMENT_PROP_QUALITY", "5");
121+
122+
Assert.Equal("ColormanagementProp", manager.Rename(cppEnum));
123+
124+
Assert.Equal(
125+
new[]
126+
{
127+
"SourceColorContext",
128+
"SourceRenderingIntent",
129+
"DestinationInationColorContext",
130+
"DestinationInationRenderingIntent",
131+
"AlphaMode",
132+
"Quality",
133+
},
134+
RenameEnumItems()
135+
);
136+
137+
foreach (var cppEnumItem in cppEnum.EnumItems)
138+
cppEnumItem.Rule.NamingFlags = NamingFlags.NoShortNameExpand;
139+
140+
Assert.Equal(
141+
new[]
142+
{
143+
"SourceColorContext",
144+
"SourceRenderingIntent",
145+
"DestinationColorContext",
146+
"DestinationRenderingIntent",
147+
"AlphaMode",
148+
"Quality",
149+
},
150+
RenameEnumItems()
151+
);
152+
153+
foreach (var cppEnumItem in cppEnum.EnumItems)
154+
cppEnumItem.Rule.NamingFlags = NamingFlags.NoShortNameExpand | NamingFlags.KeepUnderscore |
155+
NamingFlags.NoHungarianNotationHandler | NamingFlags.NoPrematureBreak;
156+
157+
Assert.Equal(
158+
new[]
159+
{
160+
"Source_Color_Context",
161+
"Source_Rendering_Intent",
162+
"Destination_Color_Context",
163+
"Destination_Rendering_Intent",
164+
"Alpha_Mode",
165+
"Quality",
166+
},
167+
RenameEnumItems()
168+
);
169+
170+
string[] RenameEnumItems() => cppEnum.EnumItems.Select(x => manager.Rename(x, cppEnum.Name)).ToArray();
171+
}
58172
}
59173
}

0 commit comments

Comments
 (0)