Skip to content

Commit 9fb03a0

Browse files
committed
Registrable: cleanup + improvements
1 parent 97110fd commit 9fb03a0

File tree

6 files changed

+171
-124
lines changed

6 files changed

+171
-124
lines changed

src/Generator/Generators/Registrable/Lua/Sol/LuaSolGenerator.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
namespace CppSharp.Generators.Registrable.Lua.Sol
55
{
6-
76
public class LuaSolGenerator : Generator
87
{
98
public const string Id = "Lua::Sol";

src/Generator/Generators/Registrable/Lua/Sol/LuaSolGeneratorOptions.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,17 @@ public LuaSolGeneratorOptions(LuaSolGenerator generator) : base()
88
{
99
NamingStrategy = new LuaSolNamingStrategy(generator);
1010
}
11+
12+
public override string DefaultRootContextType => "::sol::state_view&";
13+
14+
public override string DefaultRootContextName => "state";
15+
16+
public override string DefaultTemplateContextDefaultType => "::sol::table";
17+
18+
public override string DefaultTemplateContextDefaultValue => "::sol::nil";
19+
20+
public override string DefaultCmakeVariableHeader => "LUA_SOL_BINDINGS_HEADER";
21+
22+
public override string DefaultCmakeVariableSource => "LUA_SOL_BINDINGS_SOURCE";
1123
}
1224
}

src/Generator/Generators/Registrable/Lua/Sol/LuaSolHeaders.cs

Lines changed: 8 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ public LuaSolHeaders(LuaSolGenerator generator, IEnumerable<TranslationUnit> uni
1212

1313
public override string FileExtension => "h";
1414

15+
protected override bool TemplateAllowed { get { return true; } }
16+
1517
public override void Process()
1618
{
1719
GenerateFilePreamble(CommentKind.BCPL);
@@ -20,32 +22,18 @@ public override void Process()
2022
WriteLine("#pragma once");
2123
PopBlock(NewLineKind.BeforeNextBlock);
2224

23-
//NewLine();
24-
//PushBlock(BlockKind.Includes);
25-
//GenerateIncludes();
26-
//PopBlock(NewLineKind.BeforeNextBlock);
27-
2825
TranslationUnit.Visit(this);
29-
30-
//PushBlock(BlockKind.Footer);
31-
//PopBlock();
32-
33-
//PushBlock(BlockKind.Class);
34-
//PopBlock(NewLineKind.IfNotEmpty);
35-
36-
//RegistrableGeneratorContext mycontext = new RegistrableGeneratorContext();
37-
//string a = (string)mycontext[new InfoEntry("")].Pop();
3826
}
3927

4028
#region TranslationUnit
4129

42-
public virtual void GenerateTranslationUnitNamespaceBegin(TranslationUnit translationUnit)
30+
public override void GenerateTranslationUnitNamespaceBegin(TranslationUnit translationUnit)
4331
{
4432
PushBlock(BlockKind.Namespace);
4533
WriteLine($"namespace {TranslationUnit.Module.OutputNamespace} {{");
4634
}
4735

48-
public virtual void GenerateTranslationUnitNamespaceEnd(TranslationUnit translationUnit)
36+
public override void GenerateTranslationUnitNamespaceEnd(TranslationUnit translationUnit)
4937
{
5038
WriteLine($"}} // namespace {TranslationUnit.Module.OutputNamespace}");
5139
PopBlock();
@@ -58,14 +46,14 @@ public virtual void GenerateTranslationUnitRegistrationFunctionDeclaration(Trans
5846
NewLine();
5947
}
6048

61-
public virtual void GenerateTranslationUnit(TranslationUnit translationUnit)
49+
public override void GenerateTranslationUnit(TranslationUnit translationUnit)
6250
{
6351
GenerateTranslationUnitNamespaceBegin(translationUnit);
6452
GenerateTranslationUnitRegistrationFunctionDeclaration(translationUnit);
6553
GenerateTranslationUnitNamespaceEnd(translationUnit);
6654
}
6755

68-
public virtual bool CanGenerateTranslationUnit(TranslationUnit unit)
56+
public override bool CanGenerateTranslationUnit(TranslationUnit unit)
6957
{
7058
if (AlreadyVisited(unit))
7159
{
@@ -88,76 +76,17 @@ public override bool VisitTranslationUnit(TranslationUnit unit)
8876

8977
#endregion
9078

91-
//
92-
9379
public virtual void GenerateMain()
9480
{
9581
VisitNamespace(TranslationUnit);
9682
}
9783

9884
public virtual void GenerateIncludes()
9985
{
100-
foreach (var include in Generator.GeneratorOptions.CommonIncludes)
101-
{
102-
WriteLineIndent(include.ToString());
103-
}
104-
}
105-
106-
//public override bool VisitNamespace(Namespace @namespace)
107-
//{
108-
// base.VisitNamespace(@namespace);
109-
// return true;
110-
//}
111-
112-
public override bool VisitMethodDecl(Method method)
113-
{
114-
return true;
115-
}
116-
117-
public override bool VisitFunctionDecl(Function function)
118-
{
119-
//if (FunctionIsTemplate(function))
120-
//{
121-
// Console.WriteLine("test");
122-
//}
123-
return true;
124-
}
125-
126-
public override bool VisitClassTemplateDecl(ClassTemplate template)
127-
{
128-
return true;
129-
}
130-
131-
public override bool VisitVariableDecl(Variable variable)
132-
{
133-
return true;
134-
}
135-
136-
public override bool VisitTypeAliasTemplateDecl(TypeAliasTemplate typeAliasTemplate)
137-
{
138-
return true;
139-
}
140-
141-
public override bool VisitTypedefNameDecl(TypedefNameDecl typedef)
142-
{
143-
return true;
144-
}
145-
146-
public override bool VisitFunctionTemplateDecl(FunctionTemplate template)
147-
{
148-
return true;
149-
}
150-
151-
public static bool FunctionIsTemplate(Function function)
152-
{
153-
foreach (var template in function.Namespace.Templates)
86+
if (Generator.GeneratorOptions.BaseInclude != null)
15487
{
155-
if (template.TemplatedDecl == function)
156-
{
157-
return true;
158-
}
88+
WriteLineIndent(Generator.GeneratorOptions.BaseInclude.ToString());
15989
}
160-
return false;
16190
}
16291
}
16392
}

src/Generator/Generators/Registrable/Lua/Sol/LuaSolSources.cs

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,11 @@ public virtual void GenerateTranslationUnitRegistrationFunctionBody(TranslationU
118118
{
119119
GenerateFunctions(translationUnit, overload.ToList());
120120
}
121+
122+
foreach (var typedef in translationUnit.Typedefs)
123+
{
124+
typedef.Visit(this);
125+
}
121126
});
122127
}
123128

@@ -205,6 +210,11 @@ public virtual void GenerateNamespaceDeclarationList(Namespace @namespace, Detac
205210
{
206211
GenerateFunctions(@namespace, overload.ToList());
207212
}
213+
214+
foreach (var typedef in @namespace.Typedefs)
215+
{
216+
typedef.Visit(this);
217+
}
208218
});
209219
}
210220

@@ -235,7 +245,7 @@ public virtual void GenerateNamespaceVariables(Namespace @namespace)
235245

236246
public virtual void GenerateNamespaceEnd(Namespace @namespace)
237247
{
238-
GenerateNamespaceDeclarationList(@namespace, DetachmentOption.On);
248+
//GenerateNamespaceDeclarationList(@namespace, DetachmentOption.On);
239249
}
240250

241251
public virtual void GenerateNamespaceGlobalStateRegistration(Namespace @namespace)
@@ -1215,5 +1225,66 @@ public virtual void GenerateMethod(Class @class, Method method)
12151225
}
12161226

12171227
#endregion
1228+
1229+
#region Typedef
1230+
1231+
public virtual bool CanGenerateTypedefNameDecl(TypedefNameDecl typedef)
1232+
{
1233+
if (AlreadyVisited(typedef))
1234+
{
1235+
return false;
1236+
}
1237+
else if (typedef.Access != AccessSpecifier.Public)
1238+
{
1239+
return false;
1240+
}
1241+
else if (!NonTemplateAllowed)
1242+
{
1243+
return false;
1244+
}
1245+
return typedef.IsGenerated;
1246+
}
1247+
1248+
public virtual void GenerateTypedefNameDecl(TypedefNameDecl typedef)
1249+
{
1250+
var type = typedef.Type;
1251+
if (type is TemplateSpecializationType templateSpecializationType)
1252+
{
1253+
string typedefName = typedef.Name;
1254+
string typedefNameQuoted = $"\"{typedefName}\"";
1255+
string typedefRegistrationFunctionName = NamingStrategy.GetFullyQualifiedName(templateSpecializationType.GetClassTemplateSpecialization(), new FQNOption()
1256+
{
1257+
IgnoreTemplateTypenameKeyword = true
1258+
});
1259+
string typedefBindingContext = NamingStrategy.GetBindingContext(typedef, GenerationContext);
1260+
string typedefRootContextName = NamingStrategy.GetRootContextName(GenerationContext);
1261+
1262+
WriteLine($"global{typedefRegistrationFunctionName}{{}}({typedefRootContextName}, {typedefBindingContext}, {typedefNameQuoted}); /* directly */");
1263+
}
1264+
}
1265+
1266+
public override bool VisitTypedefNameDecl(TypedefNameDecl typedef)
1267+
{
1268+
if (!CanGenerateTypedefNameDecl(typedef))
1269+
{
1270+
return false;
1271+
}
1272+
1273+
GenerateTypedefNameDecl(typedef);
1274+
1275+
return true;
1276+
}
1277+
1278+
public override bool VisitTypedefDecl(TypedefDecl typedef)
1279+
{
1280+
return VisitTypedefNameDecl(typedef);
1281+
}
1282+
1283+
public override bool VisitTypeAliasDecl(TypeAlias typeAlias)
1284+
{
1285+
return VisitTypedefNameDecl(typeAlias);
1286+
}
1287+
1288+
#endregion
12181289
}
12191290
}
Lines changed: 67 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,86 @@
11
using CppSharp.Generators.C;
2-
using System.Collections.Generic;
32

43
namespace CppSharp.Generators.Registrable
54
{
5+
public enum ImportedClassTemplateMode
6+
{
7+
Direct,
8+
Indirect,
9+
Import
10+
}
11+
612
public abstract class RegistrableGeneratorOptions
713
{
814
public delegate string Delegate(string name);
915

1016
protected Generator generator;
11-
public virtual ISet<CInclude> CommonIncludes { get; }
1217
public virtual string OutputSubDir { get; }
18+
public virtual string RootContextType { get; }
19+
public virtual string RootContextName { get; }
20+
public virtual string RegisterFunctionName { get; }
21+
public virtual CInclude? BaseInclude { get; }
1322
public Delegate BindingIdNamePredicate { get; }
1423
public Delegate BindingIdValuePredicate { get; }
1524
public Delegate BindingNamePredicate { get; }
25+
public string TemplateTypenameState { get; }
26+
public string TemplateTypenameContext { get; }
27+
public string TemplateIdentifierState { get; }
28+
public string TemplateIdentifierContext { get; }
29+
public string TemplateContextDefaultType { get; }
30+
public string TemplateContextDefaultValue { get; }
31+
public ImportedClassTemplateMode ImportedTemplateMode { get; }
32+
public string CppValidatorFileName { get; }
33+
public string CmakeVariableHeader { get; }
34+
public string CmakeVariableSource { get; }
35+
public string EqualityFunctionTemplateFullyQualifiedName { get; }
36+
public string StaticCastFunctionTemplateFullyQualifiedName { get; }
37+
public string DynamicCastFunctionTemplateFullyQualifiedName { get; }
1638

17-
public RegistrableGeneratorOptions()
18-
{
19-
CommonIncludes = new HashSet<CInclude>();
20-
OutputSubDir = null;
21-
BindingIdNamePredicate = DefaultBindingIdNamePredicate();
22-
BindingIdValuePredicate = DefaultBindingIdValuePredicate();
23-
BindingNamePredicate = DefaultBindingNamePredicate();
24-
}
39+
public virtual string DefaultOutputSubdir => "";
40+
public abstract string DefaultRootContextType { get; }
41+
public abstract string DefaultRootContextName { get; }
42+
public virtual string DefaultRegisterFunctionName => "register_";
43+
public virtual CInclude? DefaultBaseInclude => null;
44+
public virtual Delegate DefaultBindingIdNamePredicate => (string name) => $"_cppbind_id_{name}";
45+
public virtual Delegate DefaultBindingIdValuePredicate => (string name) => $"typeid({name}).name()";
46+
public virtual Delegate DefaultBindingNamePredicate => (string name) => $"_cppbind_{name}";
47+
public virtual string DefaultTemplateTypenameState => "CppBindState";
48+
public virtual string DefaultTemplateTypenameContext => "CppBindContext";
49+
public virtual string DefaultTemplateIdentifierState => "cpp_bind_state";
50+
public virtual string DefaultTemplateIdentifierContext => "cpp_bind_context";
51+
public abstract string DefaultTemplateContextDefaultType { get; }
52+
public abstract string DefaultTemplateContextDefaultValue { get; }
53+
public virtual ImportedClassTemplateMode DefaultImportedTemplateMode => ImportedClassTemplateMode.Indirect;
54+
public virtual string DefaulCppValidatorFileName => "_cppbind_validator_";
55+
public virtual string DefaultCmakeVariableHeader => "BINDINGS_HEADER";
56+
public virtual string DefaultCmakeVariableSource => "BINDINGS_SOURCE";
57+
public virtual string DefaultEqualityFunctionTemplateFullyQualifiedName => null;
58+
public virtual string DefaultStaticCastFunctionTemplateFullyQualifiedName => null;
59+
public virtual string DefaultDynamicCastFunctionTemplateFullyQualifiedName => null;
2560

26-
public virtual Delegate DefaultBindingIdNamePredicate()
27-
{
28-
return (string name) =>
29-
{
30-
return $"_cppbind_id_{name}";
31-
};
32-
}
33-
34-
public virtual Delegate DefaultBindingIdValuePredicate()
35-
{
36-
return (string name) =>
37-
{
38-
return $"typeid({name}).name()";
39-
};
40-
}
41-
42-
public virtual Delegate DefaultBindingNamePredicate()
61+
public RegistrableGeneratorOptions()
4362
{
44-
return (string name) =>
45-
{
46-
return $"_cppbind_{name}";
47-
};
63+
OutputSubDir = DefaultOutputSubdir;
64+
RootContextType = DefaultRootContextType;
65+
RootContextName = DefaultRootContextName;
66+
RegisterFunctionName = DefaultRegisterFunctionName;
67+
BaseInclude = DefaultBaseInclude;
68+
BindingIdNamePredicate = DefaultBindingIdNamePredicate;
69+
BindingIdValuePredicate = DefaultBindingIdValuePredicate;
70+
BindingNamePredicate = DefaultBindingNamePredicate;
71+
TemplateTypenameState = DefaultTemplateTypenameState;
72+
TemplateTypenameContext = DefaultTemplateTypenameContext;
73+
TemplateIdentifierState = DefaultTemplateIdentifierState;
74+
TemplateIdentifierContext = DefaultTemplateIdentifierContext;
75+
TemplateContextDefaultType = DefaultTemplateContextDefaultType;
76+
TemplateContextDefaultValue = DefaultTemplateContextDefaultValue;
77+
ImportedTemplateMode = DefaultImportedTemplateMode;
78+
CppValidatorFileName = DefaulCppValidatorFileName;
79+
CmakeVariableHeader = DefaultCmakeVariableHeader;
80+
CmakeVariableSource = DefaultCmakeVariableSource;
81+
EqualityFunctionTemplateFullyQualifiedName = DefaultEqualityFunctionTemplateFullyQualifiedName;
82+
StaticCastFunctionTemplateFullyQualifiedName = DefaultStaticCastFunctionTemplateFullyQualifiedName;
83+
DynamicCastFunctionTemplateFullyQualifiedName = DefaultDynamicCastFunctionTemplateFullyQualifiedName;
4884
}
4985
}
5086
}

0 commit comments

Comments
 (0)