Skip to content

Commit 8afc2b3

Browse files
committed
Registrable: add folder + start development
1 parent 9071cd2 commit 8afc2b3

17 files changed

+1708
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace CppSharp.Generators.Registrable.Lua.Sol
2+
{
3+
public class LuaSolGenerationContext : RegistrableGeneratorContext
4+
{
5+
public LuaSolGenerationContext()
6+
: base()
7+
{
8+
}
9+
}
10+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
using CppSharp.AST;
2+
using System.Collections.Generic;
3+
4+
namespace CppSharp.Generators.Registrable.Lua.Sol
5+
{
6+
7+
public class LuaSolGenerator : Generator
8+
{
9+
public const string Id = "Lua::Sol";
10+
public static readonly GeneratorKind Kind = new(Id, "lua::sol", typeof(LuaSolGenerator), typeof(LuaSolTypePrinter), new[] { "lua::sol" });
11+
12+
public LuaSolGeneratorOptions GeneratorOptions
13+
{
14+
get;
15+
}
16+
17+
public LuaSolGenerator(BindingContext context) : base(context)
18+
{
19+
GeneratorOptions = new LuaSolGeneratorOptions(this);
20+
}
21+
22+
public override List<CodeGenerator> Generate(IEnumerable<TranslationUnit> units)
23+
{
24+
var outputs = new List<CodeGenerator>();
25+
26+
var header = new LuaSolHeaders(this, units);
27+
outputs.Add(header);
28+
29+
var source = new LuaSolSources(this, units);
30+
outputs.Add(source);
31+
32+
return outputs;
33+
}
34+
35+
public override bool SetupPasses() => true;
36+
}
37+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace CppSharp.Generators.Registrable.Lua.Sol
2+
{
3+
public class LuaSolGeneratorOptions : RegistrableGeneratorOptions
4+
{
5+
public LuaSolNamingStrategy NamingStrategy;
6+
7+
public LuaSolGeneratorOptions(LuaSolGenerator generator) : base()
8+
{
9+
NamingStrategy = new LuaSolNamingStrategy(generator);
10+
}
11+
}
12+
}
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
using System.Collections.Generic;
2+
using CppSharp.AST;
3+
4+
namespace CppSharp.Generators.Registrable.Lua.Sol
5+
{
6+
public class LuaSolHeaders : LuaSolSources
7+
{
8+
public LuaSolHeaders(LuaSolGenerator generator, IEnumerable<TranslationUnit> units)
9+
: base(generator, units)
10+
{
11+
}
12+
13+
public override string FileExtension => "h";
14+
15+
public override void Process()
16+
{
17+
GenerateFilePreamble(CommentKind.BCPL);
18+
19+
PushBlock();
20+
WriteLine("#pragma once");
21+
PopBlock(NewLineKind.BeforeNextBlock);
22+
23+
//NewLine();
24+
//PushBlock(BlockKind.Includes);
25+
//GenerateIncludes();
26+
//PopBlock(NewLineKind.BeforeNextBlock);
27+
28+
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();
38+
}
39+
40+
#region TranslationUnit
41+
42+
public virtual void GenerateTranslationUnitNamespaceBegin(TranslationUnit translationUnit)
43+
{
44+
PushBlock(BlockKind.Namespace);
45+
WriteLine($"namespace {TranslationUnit.Module.OutputNamespace} {{");
46+
}
47+
48+
public virtual void GenerateTranslationUnitNamespaceEnd(TranslationUnit translationUnit)
49+
{
50+
WriteLine($"}} // namespace {TranslationUnit.Module.OutputNamespace}");
51+
PopBlock();
52+
}
53+
54+
public virtual void GenerateTranslationUnitRegistrationFunctionDeclaration(TranslationUnit translationUnit)
55+
{
56+
NewLine();
57+
WriteLine(GetTranslationUnitRegistrationFunctionSignature(translationUnit));
58+
NewLine();
59+
}
60+
61+
public virtual void GenerateTranslationUnit(TranslationUnit translationUnit)
62+
{
63+
GenerateTranslationUnitNamespaceBegin(translationUnit);
64+
GenerateTranslationUnitRegistrationFunctionDeclaration(translationUnit);
65+
GenerateTranslationUnitNamespaceEnd(translationUnit);
66+
}
67+
68+
public virtual bool CanGenerateTranslationUnit(TranslationUnit unit)
69+
{
70+
if (AlreadyVisited(unit))
71+
{
72+
return false;
73+
}
74+
return true;
75+
}
76+
77+
public override bool VisitTranslationUnit(TranslationUnit unit)
78+
{
79+
if (!CanGenerateTranslationUnit(unit))
80+
{
81+
return false;
82+
}
83+
84+
GenerateTranslationUnit(unit);
85+
86+
return true;
87+
}
88+
89+
#endregion
90+
91+
//
92+
93+
public virtual void GenerateMain()
94+
{
95+
VisitNamespace(TranslationUnit);
96+
}
97+
98+
public virtual void GenerateIncludes()
99+
{
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)
154+
{
155+
if (template.TemplatedDecl == function)
156+
{
157+
return true;
158+
}
159+
}
160+
return false;
161+
}
162+
}
163+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
namespace CppSharp.Generators.Registrable.Lua.Sol
2+
{
3+
public class LuaSolNamingStrategy : RegistrableNamingStrategy<LuaSolGenerator>
4+
{
5+
public LuaSolNamingStrategy(LuaSolGenerator generator)
6+
: base(generator)
7+
{
8+
}
9+
}
10+
}

0 commit comments

Comments
 (0)