blob: 54f5f9bb1730bf1a570621992f9928155a9aa0cc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
// slang-ast-boilerplate.cpp
#include "slang-ast-all.h"
#include "slang-ast-builder.h"
#include "slang-ast-forward-declarations.h"
namespace Slang
{
template<typename T>
struct Helper
{
static void* create(ASTBuilder* builder) { return builder->createImpl<T>(); }
static void destruct(void* obj) { ((T*)obj)->~T(); }
};
#if 0 // FIDDLE TEMPLATE:
%for _,T in ipairs(Slang.NodeBase.subclasses) do
const SyntaxClassInfo $T::kSyntaxClassInfo = {
"$T",
$(T.getDebugVisType),
ASTNodeType::$T,
$(#T.subclasses),
% if T.isAbstract then
nullptr, // create
nullptr, // destruct
% else
&Helper<$T>::create,
&Helper<$T>::destruct,
% end
};
%end
#else // FIDDLE OUTPUT:
#define FIDDLE_GENERATED_OUTPUT_ID 0
#include "slang-ast-boilerplate.cpp.fiddle"
#endif // FIDDLE END
static SyntaxClassInfo const* kAllSyntaxClasses[] = {
#if 0 // FIDDLE TEMPLATE:
%for _,T in ipairs(Slang.NodeBase.subclasses) do
&$T::kSyntaxClassInfo,
%end
#else // FIDDLE OUTPUT:
#define FIDDLE_GENERATED_OUTPUT_ID 1
#include "slang-ast-boilerplate.cpp.fiddle"
#endif // FIDDLE END
};
SyntaxClassBase::SyntaxClassBase(ASTNodeType tag)
{
assert(int(tag) >= 0 && int(tag) < SLANG_COUNT_OF(kAllSyntaxClasses));
_info = kAllSyntaxClasses[int(tag)];
}
} // namespace Slang
|