/* ./tests/suites/toyir/tsf_ir.c -- generated by tsf_define from ./tests/suites/toyir/tsf_ir.t */

#include "tsf_ir.h"
#include "tsf_define_helpers.h"
#include <stdio.h>

static tsf_type_t *Operand__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Type__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *CodeOffset__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *VariableDecl__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *DebugData__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Procedure__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProcedureDecl__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProcedureDefn__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProgramElement__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Program__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__mov__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__add__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__alloc__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__ret__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__jump__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__call__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__call__args__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *integer__array__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__branchZero__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProcedureDefn__variables__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *VariableDecl__array__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProcedureDefn__code__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Instruction__array__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProcedureDefn__debug__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *DebugData__array__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *Program__globals__build_type(void) TSF_ATTRIBUTE_NOINLINE;
static tsf_type_t *ProgramElement__array__build_type(void) TSF_ATTRIBUTE_NOINLINE;

tsf_type_t *Operand__build_type(void) {
    tsf_type_t *result = tsf_type_create_aoe(TSF_TK_INTEGER);
    return result;
}

tsf_type_t *Type__build_type(void) {
    tsf_type_t *result = tsf_type_create_aoe(TSF_TK_STRING);
    return result;
}

tsf_type_t *CodeOffset__build_type(void) {
    tsf_type_t *result = tsf_type_create_aoe(TSF_TK_INTEGER);
    return result;
}

tsf_type_t *VariableDecl__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(VariableDecl_t), (void(*)(void*))VariableDecl__destruct);
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "type", Type__get_type, tsf_offsetof(VariableDecl_t, type));
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "name", TSF_TK_STRING, tsf_offsetof(VariableDecl_t, name));
    tsf_type_set_name_aoe(&result, "VariableDecl");
    return result;
}

tsf_type_t *Instruction__build_type(void) {
    tsf_type_t *result = tsf_type_create_choice_with_native_map_aoe(&result, tsf_true, tsf_offsetof(Instruction_t, value), tsf_offsetof(Instruction_t, u), sizeof(Instruction_t));
    tsf_choice_type_append_primitive_aoe(&result, "nop", TSF_TK_VOID);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "mov", Instruction__mov__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "add", Instruction__add__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "alloc", Instruction__alloc__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "ret", Instruction__ret__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "jump", Instruction__jump__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "call", Instruction__call__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "branchZero", Instruction__branchZero__get_type);
    tsf_type_set_name_aoe(&result, "Instruction");
    return result;
}

tsf_type_t *Instruction__mov__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_aoe(sizeof(Instruction__mov_t));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "dest", Operand__get_type, tsf_offsetof(Instruction__mov_t, dest));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "src", Operand__get_type, tsf_offsetof(Instruction__mov_t, src));
    tsf_type_set_name_aoe(&result, "Instruction__mov");
    return result;
}

tsf_type_t *Instruction__add__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_aoe(sizeof(Instruction__add_t));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "dest", Operand__get_type, tsf_offsetof(Instruction__add_t, dest));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "src", Operand__get_type, tsf_offsetof(Instruction__add_t, src));
    tsf_type_set_name_aoe(&result, "Instruction__add");
    return result;
}

tsf_type_t *Instruction__alloc__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(Instruction__alloc_t), (void(*)(void*))Instruction__alloc__destruct);
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "type", Type__get_type, tsf_offsetof(Instruction__alloc_t, type));
    tsf_type_set_name_aoe(&result, "Instruction__alloc");
    return result;
}

tsf_type_t *Instruction__ret__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_aoe(sizeof(Instruction__ret_t));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "src", Operand__get_type, tsf_offsetof(Instruction__ret_t, src));
    tsf_type_set_name_aoe(&result, "Instruction__ret");
    return result;
}

tsf_type_t *Instruction__jump__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_aoe(sizeof(Instruction__jump_t));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "target", CodeOffset__get_type, tsf_offsetof(Instruction__jump_t, target));
    tsf_type_set_name_aoe(&result, "Instruction__jump");
    return result;
}

tsf_type_t *Instruction__call__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(Instruction__call_t), (void(*)(void*))Instruction__call__destruct);
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "dest", Operand__get_type, tsf_offsetof(Instruction__call_t, dest));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "callee", Operand__get_type, tsf_offsetof(Instruction__call_t, callee));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "args", Instruction__call__args__get_type, tsf_offsetof(Instruction__call_t, args));
    tsf_type_set_name_aoe(&result, "Instruction__call");
    return result;
}

tsf_type_t *integer__array__build_type(void) {
    tsf_type_t *result = tsf_type_create_array_aoe(tsf_type_create_aoe(TSF_TK_INTEGER));
    return result;
}

tsf_type_t *Instruction__branchZero__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_aoe(sizeof(Instruction__branchZero_t));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "src", Operand__get_type, tsf_offsetof(Instruction__branchZero_t, src));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "target", CodeOffset__get_type, tsf_offsetof(Instruction__branchZero_t, target));
    tsf_type_set_name_aoe(&result, "Instruction__branchZero");
    return result;
}

tsf_type_t *DebugData__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(DebugData_t), (void(*)(void*))DebugData__destruct);
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "startOffset", TSF_TK_INTEGER, tsf_offsetof(DebugData_t, startOffset));
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "spanSize", TSF_TK_INTEGER, tsf_offsetof(DebugData_t, spanSize));
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "data", TSF_TK_STRING, tsf_offsetof(DebugData_t, data));
    tsf_type_set_name_aoe(&result, "DebugData");
    return result;
}

tsf_type_t *Procedure__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(Procedure_t), (void(*)(void*))Procedure__destruct);
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "name", TSF_TK_STRING, tsf_offsetof(Procedure_t, name));
    tsf_type_set_name_aoe(&result, "Procedure");
    return result;
}

tsf_type_t *ProcedureDecl__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(ProcedureDecl_t), (void(*)(void*))ProcedureDecl__destruct);
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "name", TSF_TK_STRING, tsf_offsetof(ProcedureDecl_t, name));
    tsf_type_set_name_aoe(&result, "ProcedureDecl");
    return result;
}

tsf_type_t *ProcedureDefn__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(ProcedureDefn_t), (void(*)(void*))ProcedureDefn__destruct);
    tsf_struct_type_append_primitive_with_native_map_aoe(&result, "name", TSF_TK_STRING, tsf_offsetof(ProcedureDefn_t, name));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "variables", ProcedureDefn__variables__get_type, tsf_offsetof(ProcedureDefn_t, variables));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "code", ProcedureDefn__code__get_type, tsf_offsetof(ProcedureDefn_t, code));
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "debug", ProcedureDefn__debug__get_type, tsf_offsetof(ProcedureDefn_t, debug));
    tsf_type_set_name_aoe(&result, "ProcedureDefn");
    return result;
}

tsf_type_t *VariableDecl__array__build_type(void) {
    tsf_type_t *result = tsf_type_create_array_aoe(tsf_type_dup(VariableDecl__get_type()));
    return result;
}

tsf_type_t *Instruction__array__build_type(void) {
    tsf_type_t *result = tsf_type_create_array_aoe(tsf_type_dup(Instruction__get_type()));
    return result;
}

tsf_type_t *DebugData__array__build_type(void) {
    tsf_type_t *result = tsf_type_create_array_aoe(tsf_type_dup(DebugData__get_type()));
    return result;
}

tsf_type_t *ProgramElement__build_type(void) {
    tsf_type_t *result = tsf_type_create_choice_with_native_map_aoe(&result, tsf_true, tsf_offsetof(ProgramElement_t, value), tsf_offsetof(ProgramElement_t, u), sizeof(ProgramElement_t));
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "procedureDecl", ProcedureDecl__get_type);
    tsf_choice_type_append_from_callback_and_dup_aoe(&result, "procedureDefn", ProcedureDefn__get_type);
    tsf_type_set_name_aoe(&result, "ProgramElement");
    return result;
}

tsf_type_t *Program__build_type(void) {
    tsf_type_t *result = tsf_type_create_struct_with_native_size_and_destructor_aoe(sizeof(Program_t), (void(*)(void*))Program__destruct);
    tsf_struct_type_append_from_callback_and_dup_with_native_map_aoe(&result, "globals", Program__globals__get_type, tsf_offsetof(Program_t, globals));
    tsf_type_set_name_aoe(&result, "Program");
    return result;
}

tsf_type_t *ProgramElement__array__build_type(void) {
    tsf_type_t *result = tsf_type_create_array_aoe(tsf_type_dup(ProgramElement__get_type()));
    return result;
}

tsf_type_t *Instruction__call__args__build_type(void) {
    tsf_type_t *result = tsf_type_dup(integer__array__get_type());
    return result;
}

tsf_type_t *ProcedureDefn__variables__build_type(void) {
    tsf_type_t *result = tsf_type_dup(VariableDecl__array__get_type());
    return result;
}

tsf_type_t *ProcedureDefn__code__build_type(void) {
    tsf_type_t *result = tsf_type_dup(Instruction__array__get_type());
    return result;
}

tsf_type_t *ProcedureDefn__debug__build_type(void) {
    tsf_type_t *result = tsf_type_dup(DebugData__array__get_type());
    return result;
}

tsf_type_t *Program__globals__build_type(void) {
    tsf_type_t *result = tsf_type_dup(ProgramElement__array__get_type());
    return result;
}

static tsf_type_t * volatile Operand__type = NULL;
static tsf_genrtr_t * volatile Operand__genrtr = NULL;
static tsf_parser_t * volatile Operand__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Operand__type__oc = PTHREAD_ONCE_INIT;
static void Operand__type__builder(void) {
    Operand__type = Operand__build_type();
}
#else
static void *Operand__type__builder(void) {
    return Operand__build_type();
}
#endif
tsf_type_t *Operand__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Operand__type, Operand__type__builder);
#else
    pthread_once(&Operand__type__oc, Operand__type__builder);
    return Operand__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Operand__genrtr__oc = PTHREAD_ONCE_INIT;
static void Operand__genrtr__builder(void) {
    Operand__genrtr = tsf_generator_create(Operand__get_type());
}
#else
static void *Operand__genrtr__builder(void) {
    return tsf_generator_create(Operand__get_type());
}
#endif
tsf_genrtr_t *Operand__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&Operand__genrtr, Operand__genrtr__builder);
#else
    pthread_once(&Operand__genrtr__oc, Operand__genrtr__builder);
    return Operand__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Operand__parser__oc = PTHREAD_ONCE_INIT;
static void Operand__parser__builder(void) {
    Operand__parser = tsf_parser_create(Operand__get_type());
}
#else
static void *Operand__parser__builder(void) {
    return tsf_parser_create(Operand__get_type());
}
#endif
tsf_parser_t *Operand__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&Operand__parser, Operand__parser__builder);
#else
    pthread_once(&Operand__parser__oc, Operand__parser__builder);
    return Operand__parser;
#endif
}

tsf_bool_t Operand__write(tsf_stream_file_output_t *out, Operand_t *data) {
    return tsf_typed_data_write(out, Operand__get_generator(), data);
}

Operand_t *Operand__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, Operand__get_parser());
}

tsf_bool_t Operand__read_into(tsf_stream_file_input_t *in, Operand_t *result) {
    return tsf_typed_data_read_into(in, Operand__get_parser(), result);
}

static tsf_type_t * volatile Type__type = NULL;
static tsf_genrtr_t * volatile Type__genrtr = NULL;
static tsf_parser_t * volatile Type__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Type__type__oc = PTHREAD_ONCE_INIT;
static void Type__type__builder(void) {
    Type__type = Type__build_type();
}
#else
static void *Type__type__builder(void) {
    return Type__build_type();
}
#endif
tsf_type_t *Type__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Type__type, Type__type__builder);
#else
    pthread_once(&Type__type__oc, Type__type__builder);
    return Type__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Type__genrtr__oc = PTHREAD_ONCE_INIT;
static void Type__genrtr__builder(void) {
    Type__genrtr = tsf_generator_create(Type__get_type());
}
#else
static void *Type__genrtr__builder(void) {
    return tsf_generator_create(Type__get_type());
}
#endif
tsf_genrtr_t *Type__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&Type__genrtr, Type__genrtr__builder);
#else
    pthread_once(&Type__genrtr__oc, Type__genrtr__builder);
    return Type__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Type__parser__oc = PTHREAD_ONCE_INIT;
static void Type__parser__builder(void) {
    Type__parser = tsf_parser_create(Type__get_type());
}
#else
static void *Type__parser__builder(void) {
    return tsf_parser_create(Type__get_type());
}
#endif
tsf_parser_t *Type__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&Type__parser, Type__parser__builder);
#else
    pthread_once(&Type__parser__oc, Type__parser__builder);
    return Type__parser;
#endif
}
void Type__destruct(Type_t *data) {
    free(*data);
}

tsf_bool_t Type__write(tsf_stream_file_output_t *out, Type_t *data) {
    return tsf_typed_data_write(out, Type__get_generator(), data);
}

Type_t *Type__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, Type__get_parser());
}

tsf_bool_t Type__read_into(tsf_stream_file_input_t *in, Type_t *result) {
    return tsf_typed_data_read_into(in, Type__get_parser(), result);
}

static tsf_type_t * volatile CodeOffset__type = NULL;
static tsf_genrtr_t * volatile CodeOffset__genrtr = NULL;
static tsf_parser_t * volatile CodeOffset__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t CodeOffset__type__oc = PTHREAD_ONCE_INIT;
static void CodeOffset__type__builder(void) {
    CodeOffset__type = CodeOffset__build_type();
}
#else
static void *CodeOffset__type__builder(void) {
    return CodeOffset__build_type();
}
#endif
tsf_type_t *CodeOffset__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&CodeOffset__type, CodeOffset__type__builder);
#else
    pthread_once(&CodeOffset__type__oc, CodeOffset__type__builder);
    return CodeOffset__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t CodeOffset__genrtr__oc = PTHREAD_ONCE_INIT;
static void CodeOffset__genrtr__builder(void) {
    CodeOffset__genrtr = tsf_generator_create(CodeOffset__get_type());
}
#else
static void *CodeOffset__genrtr__builder(void) {
    return tsf_generator_create(CodeOffset__get_type());
}
#endif
tsf_genrtr_t *CodeOffset__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&CodeOffset__genrtr, CodeOffset__genrtr__builder);
#else
    pthread_once(&CodeOffset__genrtr__oc, CodeOffset__genrtr__builder);
    return CodeOffset__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t CodeOffset__parser__oc = PTHREAD_ONCE_INIT;
static void CodeOffset__parser__builder(void) {
    CodeOffset__parser = tsf_parser_create(CodeOffset__get_type());
}
#else
static void *CodeOffset__parser__builder(void) {
    return tsf_parser_create(CodeOffset__get_type());
}
#endif
tsf_parser_t *CodeOffset__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&CodeOffset__parser, CodeOffset__parser__builder);
#else
    pthread_once(&CodeOffset__parser__oc, CodeOffset__parser__builder);
    return CodeOffset__parser;
#endif
}

tsf_bool_t CodeOffset__write(tsf_stream_file_output_t *out, CodeOffset_t *data) {
    return tsf_typed_data_write(out, CodeOffset__get_generator(), data);
}

CodeOffset_t *CodeOffset__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, CodeOffset__get_parser());
}

tsf_bool_t CodeOffset__read_into(tsf_stream_file_input_t *in, CodeOffset_t *result) {
    return tsf_typed_data_read_into(in, CodeOffset__get_parser(), result);
}

static tsf_type_t * volatile VariableDecl__type = NULL;
static tsf_genrtr_t * volatile VariableDecl__genrtr = NULL;
static tsf_parser_t * volatile VariableDecl__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t VariableDecl__type__oc = PTHREAD_ONCE_INIT;
static void VariableDecl__type__builder(void) {
    VariableDecl__type = VariableDecl__build_type();
}
#else
static void *VariableDecl__type__builder(void) {
    return VariableDecl__build_type();
}
#endif
tsf_type_t *VariableDecl__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&VariableDecl__type, VariableDecl__type__builder);
#else
    pthread_once(&VariableDecl__type__oc, VariableDecl__type__builder);
    return VariableDecl__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t VariableDecl__genrtr__oc = PTHREAD_ONCE_INIT;
static void VariableDecl__genrtr__builder(void) {
    VariableDecl__genrtr = tsf_generator_create(VariableDecl__get_type());
}
#else
static void *VariableDecl__genrtr__builder(void) {
    return tsf_generator_create(VariableDecl__get_type());
}
#endif
tsf_genrtr_t *VariableDecl__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&VariableDecl__genrtr, VariableDecl__genrtr__builder);
#else
    pthread_once(&VariableDecl__genrtr__oc, VariableDecl__genrtr__builder);
    return VariableDecl__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t VariableDecl__parser__oc = PTHREAD_ONCE_INIT;
static void VariableDecl__parser__builder(void) {
    VariableDecl__parser = tsf_parser_create(VariableDecl__get_type());
}
#else
static void *VariableDecl__parser__builder(void) {
    return tsf_parser_create(VariableDecl__get_type());
}
#endif
tsf_parser_t *VariableDecl__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&VariableDecl__parser, VariableDecl__parser__builder);
#else
    pthread_once(&VariableDecl__parser__oc, VariableDecl__parser__builder);
    return VariableDecl__parser;
#endif
}
void VariableDecl__destruct(VariableDecl_t *data) {
    Type__destruct(&data->type);
    free(*&data->name);
}

tsf_bool_t VariableDecl__write(tsf_stream_file_output_t *out, VariableDecl_t *data) {
    return tsf_typed_data_write(out, VariableDecl__get_generator(), data);
}

VariableDecl_t *VariableDecl__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, VariableDecl__get_parser());
}

tsf_bool_t VariableDecl__read_into(tsf_stream_file_input_t *in, VariableDecl_t *result) {
    return tsf_typed_data_read_into(in, VariableDecl__get_parser(), result);
}

static tsf_type_t * volatile Instruction__type = NULL;
static tsf_genrtr_t * volatile Instruction__genrtr = NULL;
static tsf_parser_t * volatile Instruction__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__type__builder(void) {
    Instruction__type = Instruction__build_type();
}
#else
static void *Instruction__type__builder(void) {
    return Instruction__build_type();
}
#endif
tsf_type_t *Instruction__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__type, Instruction__type__builder);
#else
    pthread_once(&Instruction__type__oc, Instruction__type__builder);
    return Instruction__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__genrtr__oc = PTHREAD_ONCE_INIT;
static void Instruction__genrtr__builder(void) {
    Instruction__genrtr = tsf_generator_create(Instruction__get_type());
}
#else
static void *Instruction__genrtr__builder(void) {
    return tsf_generator_create(Instruction__get_type());
}
#endif
tsf_genrtr_t *Instruction__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&Instruction__genrtr, Instruction__genrtr__builder);
#else
    pthread_once(&Instruction__genrtr__oc, Instruction__genrtr__builder);
    return Instruction__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__parser__oc = PTHREAD_ONCE_INIT;
static void Instruction__parser__builder(void) {
    Instruction__parser = tsf_parser_create(Instruction__get_type());
}
#else
static void *Instruction__parser__builder(void) {
    return tsf_parser_create(Instruction__get_type());
}
#endif
tsf_parser_t *Instruction__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&Instruction__parser, Instruction__parser__builder);
#else
    pthread_once(&Instruction__parser__oc, Instruction__parser__builder);
    return Instruction__parser;
#endif
}
void Instruction__destruct(Instruction_t *data) {
    switch (data->value) {
    case 3:
        Instruction__alloc__destruct(&data->u.alloc);
        break;
    case 6:
        Instruction__call__destruct(&data->u.call);
        break;
    default:
        break;
    }
}

tsf_bool_t Instruction__write(tsf_stream_file_output_t *out, Instruction_t *data) {
    return tsf_typed_data_write(out, Instruction__get_generator(), data);
}

Instruction_t *Instruction__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, Instruction__get_parser());
}

tsf_bool_t Instruction__read_into(tsf_stream_file_input_t *in, Instruction_t *result) {
    return tsf_typed_data_read_into(in, Instruction__get_parser(), result);
}

static tsf_type_t * volatile DebugData__type = NULL;
static tsf_genrtr_t * volatile DebugData__genrtr = NULL;
static tsf_parser_t * volatile DebugData__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t DebugData__type__oc = PTHREAD_ONCE_INIT;
static void DebugData__type__builder(void) {
    DebugData__type = DebugData__build_type();
}
#else
static void *DebugData__type__builder(void) {
    return DebugData__build_type();
}
#endif
tsf_type_t *DebugData__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&DebugData__type, DebugData__type__builder);
#else
    pthread_once(&DebugData__type__oc, DebugData__type__builder);
    return DebugData__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t DebugData__genrtr__oc = PTHREAD_ONCE_INIT;
static void DebugData__genrtr__builder(void) {
    DebugData__genrtr = tsf_generator_create(DebugData__get_type());
}
#else
static void *DebugData__genrtr__builder(void) {
    return tsf_generator_create(DebugData__get_type());
}
#endif
tsf_genrtr_t *DebugData__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&DebugData__genrtr, DebugData__genrtr__builder);
#else
    pthread_once(&DebugData__genrtr__oc, DebugData__genrtr__builder);
    return DebugData__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t DebugData__parser__oc = PTHREAD_ONCE_INIT;
static void DebugData__parser__builder(void) {
    DebugData__parser = tsf_parser_create(DebugData__get_type());
}
#else
static void *DebugData__parser__builder(void) {
    return tsf_parser_create(DebugData__get_type());
}
#endif
tsf_parser_t *DebugData__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&DebugData__parser, DebugData__parser__builder);
#else
    pthread_once(&DebugData__parser__oc, DebugData__parser__builder);
    return DebugData__parser;
#endif
}
void DebugData__destruct(DebugData_t *data) {
    free(*&data->data);
}

tsf_bool_t DebugData__write(tsf_stream_file_output_t *out, DebugData_t *data) {
    return tsf_typed_data_write(out, DebugData__get_generator(), data);
}

DebugData_t *DebugData__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, DebugData__get_parser());
}

tsf_bool_t DebugData__read_into(tsf_stream_file_input_t *in, DebugData_t *result) {
    return tsf_typed_data_read_into(in, DebugData__get_parser(), result);
}

static tsf_type_t * volatile Procedure__type = NULL;
static tsf_genrtr_t * volatile Procedure__genrtr = NULL;
static tsf_parser_t * volatile Procedure__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Procedure__type__oc = PTHREAD_ONCE_INIT;
static void Procedure__type__builder(void) {
    Procedure__type = Procedure__build_type();
}
#else
static void *Procedure__type__builder(void) {
    return Procedure__build_type();
}
#endif
tsf_type_t *Procedure__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Procedure__type, Procedure__type__builder);
#else
    pthread_once(&Procedure__type__oc, Procedure__type__builder);
    return Procedure__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Procedure__genrtr__oc = PTHREAD_ONCE_INIT;
static void Procedure__genrtr__builder(void) {
    Procedure__genrtr = tsf_generator_create(Procedure__get_type());
}
#else
static void *Procedure__genrtr__builder(void) {
    return tsf_generator_create(Procedure__get_type());
}
#endif
tsf_genrtr_t *Procedure__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&Procedure__genrtr, Procedure__genrtr__builder);
#else
    pthread_once(&Procedure__genrtr__oc, Procedure__genrtr__builder);
    return Procedure__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Procedure__parser__oc = PTHREAD_ONCE_INIT;
static void Procedure__parser__builder(void) {
    Procedure__parser = tsf_parser_create(Procedure__get_type());
}
#else
static void *Procedure__parser__builder(void) {
    return tsf_parser_create(Procedure__get_type());
}
#endif
tsf_parser_t *Procedure__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&Procedure__parser, Procedure__parser__builder);
#else
    pthread_once(&Procedure__parser__oc, Procedure__parser__builder);
    return Procedure__parser;
#endif
}
void Procedure__destruct(Procedure_t *data) {
    free(*&data->name);
}

tsf_bool_t Procedure__write(tsf_stream_file_output_t *out, Procedure_t *data) {
    return tsf_typed_data_write(out, Procedure__get_generator(), data);
}

Procedure_t *Procedure__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, Procedure__get_parser());
}

tsf_bool_t Procedure__read_into(tsf_stream_file_input_t *in, Procedure_t *result) {
    return tsf_typed_data_read_into(in, Procedure__get_parser(), result);
}

static tsf_type_t * volatile ProcedureDecl__type = NULL;
static tsf_genrtr_t * volatile ProcedureDecl__genrtr = NULL;
static tsf_parser_t * volatile ProcedureDecl__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDecl__type__oc = PTHREAD_ONCE_INIT;
static void ProcedureDecl__type__builder(void) {
    ProcedureDecl__type = ProcedureDecl__build_type();
}
#else
static void *ProcedureDecl__type__builder(void) {
    return ProcedureDecl__build_type();
}
#endif
tsf_type_t *ProcedureDecl__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProcedureDecl__type, ProcedureDecl__type__builder);
#else
    pthread_once(&ProcedureDecl__type__oc, ProcedureDecl__type__builder);
    return ProcedureDecl__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDecl__genrtr__oc = PTHREAD_ONCE_INIT;
static void ProcedureDecl__genrtr__builder(void) {
    ProcedureDecl__genrtr = tsf_generator_create(ProcedureDecl__get_type());
}
#else
static void *ProcedureDecl__genrtr__builder(void) {
    return tsf_generator_create(ProcedureDecl__get_type());
}
#endif
tsf_genrtr_t *ProcedureDecl__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&ProcedureDecl__genrtr, ProcedureDecl__genrtr__builder);
#else
    pthread_once(&ProcedureDecl__genrtr__oc, ProcedureDecl__genrtr__builder);
    return ProcedureDecl__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDecl__parser__oc = PTHREAD_ONCE_INIT;
static void ProcedureDecl__parser__builder(void) {
    ProcedureDecl__parser = tsf_parser_create(ProcedureDecl__get_type());
}
#else
static void *ProcedureDecl__parser__builder(void) {
    return tsf_parser_create(ProcedureDecl__get_type());
}
#endif
tsf_parser_t *ProcedureDecl__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&ProcedureDecl__parser, ProcedureDecl__parser__builder);
#else
    pthread_once(&ProcedureDecl__parser__oc, ProcedureDecl__parser__builder);
    return ProcedureDecl__parser;
#endif
}
void ProcedureDecl__destruct(ProcedureDecl_t *data) {
    free(*&data->name);
}

tsf_bool_t ProcedureDecl__write(tsf_stream_file_output_t *out, ProcedureDecl_t *data) {
    return tsf_typed_data_write(out, ProcedureDecl__get_generator(), data);
}

ProcedureDecl_t *ProcedureDecl__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, ProcedureDecl__get_parser());
}

tsf_bool_t ProcedureDecl__read_into(tsf_stream_file_input_t *in, ProcedureDecl_t *result) {
    return tsf_typed_data_read_into(in, ProcedureDecl__get_parser(), result);
}

static tsf_type_t * volatile ProcedureDefn__type = NULL;
static tsf_genrtr_t * volatile ProcedureDefn__genrtr = NULL;
static tsf_parser_t * volatile ProcedureDefn__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__type__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__type__builder(void) {
    ProcedureDefn__type = ProcedureDefn__build_type();
}
#else
static void *ProcedureDefn__type__builder(void) {
    return ProcedureDefn__build_type();
}
#endif
tsf_type_t *ProcedureDefn__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProcedureDefn__type, ProcedureDefn__type__builder);
#else
    pthread_once(&ProcedureDefn__type__oc, ProcedureDefn__type__builder);
    return ProcedureDefn__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__genrtr__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__genrtr__builder(void) {
    ProcedureDefn__genrtr = tsf_generator_create(ProcedureDefn__get_type());
}
#else
static void *ProcedureDefn__genrtr__builder(void) {
    return tsf_generator_create(ProcedureDefn__get_type());
}
#endif
tsf_genrtr_t *ProcedureDefn__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&ProcedureDefn__genrtr, ProcedureDefn__genrtr__builder);
#else
    pthread_once(&ProcedureDefn__genrtr__oc, ProcedureDefn__genrtr__builder);
    return ProcedureDefn__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__parser__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__parser__builder(void) {
    ProcedureDefn__parser = tsf_parser_create(ProcedureDefn__get_type());
}
#else
static void *ProcedureDefn__parser__builder(void) {
    return tsf_parser_create(ProcedureDefn__get_type());
}
#endif
tsf_parser_t *ProcedureDefn__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&ProcedureDefn__parser, ProcedureDefn__parser__builder);
#else
    pthread_once(&ProcedureDefn__parser__oc, ProcedureDefn__parser__builder);
    return ProcedureDefn__parser;
#endif
}
void ProcedureDefn__destruct(ProcedureDefn_t *data) {
    free(*&data->name);
    ProcedureDefn__variables__destruct(&data->variables);
    ProcedureDefn__code__destruct(&data->code);
    ProcedureDefn__debug__destruct(&data->debug);
}

tsf_bool_t ProcedureDefn__write(tsf_stream_file_output_t *out, ProcedureDefn_t *data) {
    return tsf_typed_data_write(out, ProcedureDefn__get_generator(), data);
}

ProcedureDefn_t *ProcedureDefn__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, ProcedureDefn__get_parser());
}

tsf_bool_t ProcedureDefn__read_into(tsf_stream_file_input_t *in, ProcedureDefn_t *result) {
    return tsf_typed_data_read_into(in, ProcedureDefn__get_parser(), result);
}

static tsf_type_t * volatile ProgramElement__type = NULL;
static tsf_genrtr_t * volatile ProgramElement__genrtr = NULL;
static tsf_parser_t * volatile ProgramElement__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProgramElement__type__oc = PTHREAD_ONCE_INIT;
static void ProgramElement__type__builder(void) {
    ProgramElement__type = ProgramElement__build_type();
}
#else
static void *ProgramElement__type__builder(void) {
    return ProgramElement__build_type();
}
#endif
tsf_type_t *ProgramElement__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProgramElement__type, ProgramElement__type__builder);
#else
    pthread_once(&ProgramElement__type__oc, ProgramElement__type__builder);
    return ProgramElement__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProgramElement__genrtr__oc = PTHREAD_ONCE_INIT;
static void ProgramElement__genrtr__builder(void) {
    ProgramElement__genrtr = tsf_generator_create(ProgramElement__get_type());
}
#else
static void *ProgramElement__genrtr__builder(void) {
    return tsf_generator_create(ProgramElement__get_type());
}
#endif
tsf_genrtr_t *ProgramElement__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&ProgramElement__genrtr, ProgramElement__genrtr__builder);
#else
    pthread_once(&ProgramElement__genrtr__oc, ProgramElement__genrtr__builder);
    return ProgramElement__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProgramElement__parser__oc = PTHREAD_ONCE_INIT;
static void ProgramElement__parser__builder(void) {
    ProgramElement__parser = tsf_parser_create(ProgramElement__get_type());
}
#else
static void *ProgramElement__parser__builder(void) {
    return tsf_parser_create(ProgramElement__get_type());
}
#endif
tsf_parser_t *ProgramElement__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&ProgramElement__parser, ProgramElement__parser__builder);
#else
    pthread_once(&ProgramElement__parser__oc, ProgramElement__parser__builder);
    return ProgramElement__parser;
#endif
}
void ProgramElement__destruct(ProgramElement_t *data) {
    switch (data->value) {
    case 0:
        ProcedureDecl__destruct(&data->u.procedureDecl);
        break;
    case 1:
        ProcedureDefn__destruct(&data->u.procedureDefn);
        break;
    default:
        break;
    }
}

tsf_bool_t ProgramElement__write(tsf_stream_file_output_t *out, ProgramElement_t *data) {
    return tsf_typed_data_write(out, ProgramElement__get_generator(), data);
}

ProgramElement_t *ProgramElement__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, ProgramElement__get_parser());
}

tsf_bool_t ProgramElement__read_into(tsf_stream_file_input_t *in, ProgramElement_t *result) {
    return tsf_typed_data_read_into(in, ProgramElement__get_parser(), result);
}

static tsf_type_t * volatile Program__type = NULL;
static tsf_genrtr_t * volatile Program__genrtr = NULL;
static tsf_parser_t * volatile Program__parser = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Program__type__oc = PTHREAD_ONCE_INIT;
static void Program__type__builder(void) {
    Program__type = Program__build_type();
}
#else
static void *Program__type__builder(void) {
    return Program__build_type();
}
#endif
tsf_type_t *Program__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Program__type, Program__type__builder);
#else
    pthread_once(&Program__type__oc, Program__type__builder);
    return Program__type;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Program__genrtr__oc = PTHREAD_ONCE_INIT;
static void Program__genrtr__builder(void) {
    Program__genrtr = tsf_generator_create(Program__get_type());
}
#else
static void *Program__genrtr__builder(void) {
    return tsf_generator_create(Program__get_type());
}
#endif
tsf_genrtr_t *Program__get_generator(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_genrtr_t*)tsf_init_pointer((void**)&Program__genrtr, Program__genrtr__builder);
#else
    pthread_once(&Program__genrtr__oc, Program__genrtr__builder);
    return Program__genrtr;
#endif
}

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Program__parser__oc = PTHREAD_ONCE_INIT;
static void Program__parser__builder(void) {
    Program__parser = tsf_parser_create(Program__get_type());
}
#else
static void *Program__parser__builder(void) {
    return tsf_parser_create(Program__get_type());
}
#endif
tsf_parser_t *Program__get_parser(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_parser_t*)tsf_init_pointer((void**)&Program__parser, Program__parser__builder);
#else
    pthread_once(&Program__parser__oc, Program__parser__builder);
    return Program__parser;
#endif
}
void Program__destruct(Program_t *data) {
    Program__globals__destruct(&data->globals);
}

tsf_bool_t Program__write(tsf_stream_file_output_t *out, Program_t *data) {
    return tsf_typed_data_write(out, Program__get_generator(), data);
}

Program_t *Program__read(tsf_stream_file_input_t *in) {
    return tsf_typed_data_read(in, Program__get_parser());
}

tsf_bool_t Program__read_into(tsf_stream_file_input_t *in, Program_t *result) {
    return tsf_typed_data_read_into(in, Program__get_parser(), result);
}

static tsf_type_t * volatile Instruction__mov__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__mov__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__mov__type__builder(void) {
    Instruction__mov__type = Instruction__mov__build_type();
}
#else
static void *Instruction__mov__type__builder(void) {
    return Instruction__mov__build_type();
}
#endif
tsf_type_t *Instruction__mov__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__mov__type, Instruction__mov__type__builder);
#else
    pthread_once(&Instruction__mov__type__oc, Instruction__mov__type__builder);
    return Instruction__mov__type;
#endif
}

static tsf_type_t * volatile Instruction__add__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__add__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__add__type__builder(void) {
    Instruction__add__type = Instruction__add__build_type();
}
#else
static void *Instruction__add__type__builder(void) {
    return Instruction__add__build_type();
}
#endif
tsf_type_t *Instruction__add__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__add__type, Instruction__add__type__builder);
#else
    pthread_once(&Instruction__add__type__oc, Instruction__add__type__builder);
    return Instruction__add__type;
#endif
}

static tsf_type_t * volatile Instruction__alloc__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__alloc__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__alloc__type__builder(void) {
    Instruction__alloc__type = Instruction__alloc__build_type();
}
#else
static void *Instruction__alloc__type__builder(void) {
    return Instruction__alloc__build_type();
}
#endif
tsf_type_t *Instruction__alloc__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__alloc__type, Instruction__alloc__type__builder);
#else
    pthread_once(&Instruction__alloc__type__oc, Instruction__alloc__type__builder);
    return Instruction__alloc__type;
#endif
}
void Instruction__alloc__destruct(Instruction__alloc_t *data) {
    Type__destruct(&data->type);
}

static tsf_type_t * volatile Instruction__ret__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__ret__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__ret__type__builder(void) {
    Instruction__ret__type = Instruction__ret__build_type();
}
#else
static void *Instruction__ret__type__builder(void) {
    return Instruction__ret__build_type();
}
#endif
tsf_type_t *Instruction__ret__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__ret__type, Instruction__ret__type__builder);
#else
    pthread_once(&Instruction__ret__type__oc, Instruction__ret__type__builder);
    return Instruction__ret__type;
#endif
}

static tsf_type_t * volatile Instruction__jump__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__jump__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__jump__type__builder(void) {
    Instruction__jump__type = Instruction__jump__build_type();
}
#else
static void *Instruction__jump__type__builder(void) {
    return Instruction__jump__build_type();
}
#endif
tsf_type_t *Instruction__jump__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__jump__type, Instruction__jump__type__builder);
#else
    pthread_once(&Instruction__jump__type__oc, Instruction__jump__type__builder);
    return Instruction__jump__type;
#endif
}

static tsf_type_t * volatile Instruction__call__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__call__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__call__type__builder(void) {
    Instruction__call__type = Instruction__call__build_type();
}
#else
static void *Instruction__call__type__builder(void) {
    return Instruction__call__build_type();
}
#endif
tsf_type_t *Instruction__call__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__call__type, Instruction__call__type__builder);
#else
    pthread_once(&Instruction__call__type__oc, Instruction__call__type__builder);
    return Instruction__call__type;
#endif
}
void Instruction__call__destruct(Instruction__call_t *data) {
    Instruction__call__args__destruct(&data->args);
}

static tsf_type_t * volatile Instruction__call__args__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__call__args__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__call__args__type__builder(void) {
    Instruction__call__args__type = Instruction__call__args__build_type();
}
#else
static void *Instruction__call__args__type__builder(void) {
    return Instruction__call__args__build_type();
}
#endif
tsf_type_t *Instruction__call__args__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__call__args__type, Instruction__call__args__type__builder);
#else
    pthread_once(&Instruction__call__args__type__oc, Instruction__call__args__type__builder);
    return Instruction__call__args__type;
#endif
}
void Instruction__call__args__destruct(Instruction__call__args_t *data) {
    integer__array__destruct(data);
}

static tsf_type_t * volatile integer__array__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t integer__array__type__oc = PTHREAD_ONCE_INIT;
static void integer__array__type__builder(void) {
    integer__array__type = integer__array__build_type();
}
#else
static void *integer__array__type__builder(void) {
    return integer__array__build_type();
}
#endif
tsf_type_t *integer__array__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&integer__array__type, integer__array__type__builder);
#else
    pthread_once(&integer__array__type__oc, integer__array__type__builder);
    return integer__array__type;
#endif
}
void integer__array__destruct(integer__array_t *data) {
    free(data->data);
}

static tsf_type_t * volatile Instruction__branchZero__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__branchZero__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__branchZero__type__builder(void) {
    Instruction__branchZero__type = Instruction__branchZero__build_type();
}
#else
static void *Instruction__branchZero__type__builder(void) {
    return Instruction__branchZero__build_type();
}
#endif
tsf_type_t *Instruction__branchZero__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__branchZero__type, Instruction__branchZero__type__builder);
#else
    pthread_once(&Instruction__branchZero__type__oc, Instruction__branchZero__type__builder);
    return Instruction__branchZero__type;
#endif
}

static tsf_type_t * volatile ProcedureDefn__variables__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__variables__type__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__variables__type__builder(void) {
    ProcedureDefn__variables__type = ProcedureDefn__variables__build_type();
}
#else
static void *ProcedureDefn__variables__type__builder(void) {
    return ProcedureDefn__variables__build_type();
}
#endif
tsf_type_t *ProcedureDefn__variables__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProcedureDefn__variables__type, ProcedureDefn__variables__type__builder);
#else
    pthread_once(&ProcedureDefn__variables__type__oc, ProcedureDefn__variables__type__builder);
    return ProcedureDefn__variables__type;
#endif
}
void ProcedureDefn__variables__destruct(ProcedureDefn__variables_t *data) {
    VariableDecl__array__destruct(data);
}

static tsf_type_t * volatile VariableDecl__array__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t VariableDecl__array__type__oc = PTHREAD_ONCE_INIT;
static void VariableDecl__array__type__builder(void) {
    VariableDecl__array__type = VariableDecl__array__build_type();
}
#else
static void *VariableDecl__array__type__builder(void) {
    return VariableDecl__array__build_type();
}
#endif
tsf_type_t *VariableDecl__array__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&VariableDecl__array__type, VariableDecl__array__type__builder);
#else
    pthread_once(&VariableDecl__array__type__oc, VariableDecl__array__type__builder);
    return VariableDecl__array__type;
#endif
}
void VariableDecl__array__destruct(VariableDecl__array_t *data) {
    uint32_t i;
    for (i = data->len; i--;)
        VariableDecl__destruct((data->data + i));
    free(data->data);
}

static tsf_type_t * volatile ProcedureDefn__code__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__code__type__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__code__type__builder(void) {
    ProcedureDefn__code__type = ProcedureDefn__code__build_type();
}
#else
static void *ProcedureDefn__code__type__builder(void) {
    return ProcedureDefn__code__build_type();
}
#endif
tsf_type_t *ProcedureDefn__code__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProcedureDefn__code__type, ProcedureDefn__code__type__builder);
#else
    pthread_once(&ProcedureDefn__code__type__oc, ProcedureDefn__code__type__builder);
    return ProcedureDefn__code__type;
#endif
}
void ProcedureDefn__code__destruct(ProcedureDefn__code_t *data) {
    Instruction__array__destruct(data);
}

static tsf_type_t * volatile Instruction__array__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Instruction__array__type__oc = PTHREAD_ONCE_INIT;
static void Instruction__array__type__builder(void) {
    Instruction__array__type = Instruction__array__build_type();
}
#else
static void *Instruction__array__type__builder(void) {
    return Instruction__array__build_type();
}
#endif
tsf_type_t *Instruction__array__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Instruction__array__type, Instruction__array__type__builder);
#else
    pthread_once(&Instruction__array__type__oc, Instruction__array__type__builder);
    return Instruction__array__type;
#endif
}
void Instruction__array__destruct(Instruction__array_t *data) {
    uint32_t i;
    for (i = data->len; i--;)
        Instruction__destruct((data->data + i));
    free(data->data);
}

static tsf_type_t * volatile ProcedureDefn__debug__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProcedureDefn__debug__type__oc = PTHREAD_ONCE_INIT;
static void ProcedureDefn__debug__type__builder(void) {
    ProcedureDefn__debug__type = ProcedureDefn__debug__build_type();
}
#else
static void *ProcedureDefn__debug__type__builder(void) {
    return ProcedureDefn__debug__build_type();
}
#endif
tsf_type_t *ProcedureDefn__debug__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProcedureDefn__debug__type, ProcedureDefn__debug__type__builder);
#else
    pthread_once(&ProcedureDefn__debug__type__oc, ProcedureDefn__debug__type__builder);
    return ProcedureDefn__debug__type;
#endif
}
void ProcedureDefn__debug__destruct(ProcedureDefn__debug_t *data) {
    DebugData__array__destruct(data);
}

static tsf_type_t * volatile DebugData__array__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t DebugData__array__type__oc = PTHREAD_ONCE_INIT;
static void DebugData__array__type__builder(void) {
    DebugData__array__type = DebugData__array__build_type();
}
#else
static void *DebugData__array__type__builder(void) {
    return DebugData__array__build_type();
}
#endif
tsf_type_t *DebugData__array__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&DebugData__array__type, DebugData__array__type__builder);
#else
    pthread_once(&DebugData__array__type__oc, DebugData__array__type__builder);
    return DebugData__array__type;
#endif
}
void DebugData__array__destruct(DebugData__array_t *data) {
    uint32_t i;
    for (i = data->len; i--;)
        DebugData__destruct((data->data + i));
    free(data->data);
}

static tsf_type_t * volatile Program__globals__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t Program__globals__type__oc = PTHREAD_ONCE_INIT;
static void Program__globals__type__builder(void) {
    Program__globals__type = Program__globals__build_type();
}
#else
static void *Program__globals__type__builder(void) {
    return Program__globals__build_type();
}
#endif
tsf_type_t *Program__globals__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&Program__globals__type, Program__globals__type__builder);
#else
    pthread_once(&Program__globals__type__oc, Program__globals__type__builder);
    return Program__globals__type;
#endif
}
void Program__globals__destruct(Program__globals_t *data) {
    ProgramElement__array__destruct(data);
}

static tsf_type_t * volatile ProgramElement__array__type = NULL;

#ifndef TSF_HAVE_INIT_POINTER
static pthread_once_t ProgramElement__array__type__oc = PTHREAD_ONCE_INIT;
static void ProgramElement__array__type__builder(void) {
    ProgramElement__array__type = ProgramElement__array__build_type();
}
#else
static void *ProgramElement__array__type__builder(void) {
    return ProgramElement__array__build_type();
}
#endif
tsf_type_t *ProgramElement__array__get_type(void) {
#ifdef TSF_HAVE_INIT_POINTER
    return (tsf_type_t*)tsf_init_pointer((void**)&ProgramElement__array__type, ProgramElement__array__type__builder);
#else
    pthread_once(&ProgramElement__array__type__oc, ProgramElement__array__type__builder);
    return ProgramElement__array__type;
#endif
}
void ProgramElement__array__destruct(ProgramElement__array_t *data) {
    uint32_t i;
    for (i = data->len; i--;)
        ProgramElement__destruct((data->data + i));
    free(data->data);
}

