1.7 KiB
Navigation
Current Design
AST
is the actual managed node object for the library.
Its raw and really not meant to be used directly.
All user interaction must be with its pointer so the type they deal with is AST*
.
In order to abstract away constant use of AST*
its wrapped in a Code type which can be either:
When its the C generated variant of the library
typedef AST* Code;
tyepdef AST_<name>* Code<name>;
...
or
For C++:
struct Code {
AST* ast;
};
struct Code<name> {
...
AST_<name>* ast;
};
The full definitions of all asts are within:
The C/C++ interface procedures are located with ast.hpp
(for the Code type), and code_types.hpp
for all others.
Serialization
All code types can either serialize using a function of the pattern:
StrBuilder <prefix>_to_strbuilder(Code code);
// or
<prefix>_to_strbuilder(Code code, StrBuilder& result);
Where the first generates strings allocated using Allocator_StringArena and the other appends an existing strings with their backed allocator.
Serialization of for the AST is defined for Code
in ast.cpp
with code_to_strbuilder_ptr
& code_to_strbuilder
.
Serializtion for the rest of the code types is within code_serialization.cpp
.
Gencpp's serialization does not provide coherent formatting of the code. The user should use a formatter after serializing.