/* ./tests/suites/toyir/tsf_ir_different.h -- generated by tsf_define from ./tests/suites/toyir/tsf_ir_different.t */

#include "tsf.h"

#ifdef __cplusplus
extern "C" {
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DVariableDecl
#define TSF_DEFINE_STRUCT_DECL_DVariableDecl
struct DVariableDecl_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction
#define TSF_DEFINE_STRUCT_DECL_DInstruction
struct DInstruction_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProcedure
#define TSF_DEFINE_STRUCT_DECL_DProcedure
struct DProcedure_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProcedureDecl
#define TSF_DEFINE_STRUCT_DECL_DProcedureDecl
struct DProcedureDecl_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProcedureDefn
#define TSF_DEFINE_STRUCT_DECL_DProcedureDefn
struct DProcedureDefn_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProgramElement
#define TSF_DEFINE_STRUCT_DECL_DProgramElement
struct DProgramElement_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProgram
#define TSF_DEFINE_STRUCT_DECL_DProgram
struct DProgram_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__mov
#define TSF_DEFINE_STRUCT_DECL_DInstruction__mov
struct DInstruction__mov_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__add
#define TSF_DEFINE_STRUCT_DECL_DInstruction__add
struct DInstruction__add_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__alloc
#define TSF_DEFINE_STRUCT_DECL_DInstruction__alloc
struct DInstruction__alloc_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__ret
#define TSF_DEFINE_STRUCT_DECL_DInstruction__ret
struct DInstruction__ret_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__jump
#define TSF_DEFINE_STRUCT_DECL_DInstruction__jump
struct DInstruction__jump_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__call
#define TSF_DEFINE_STRUCT_DECL_DInstruction__call
struct DInstruction__call_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_int16__array
#define TSF_DEFINE_STRUCT_DECL_int16__array
struct int16__array_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__branchZero
#define TSF_DEFINE_STRUCT_DECL_DInstruction__branchZero
struct DInstruction__branchZero_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DVariableDecl__array
#define TSF_DEFINE_STRUCT_DECL_DVariableDecl__array
struct DVariableDecl__array_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DInstruction__array
#define TSF_DEFINE_STRUCT_DECL_DInstruction__array
struct DInstruction__array_s;
#endif

#ifndef TSF_DEFINE_STRUCT_DECL_DProgramElement__array
#define TSF_DEFINE_STRUCT_DECL_DProgramElement__array
struct DProgramElement__array_s;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DVariableDecl
#define TSF_DEFINE_TYPEDEF_DVariableDecl
typedef struct DVariableDecl_s DVariableDecl_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction
#define TSF_DEFINE_TYPEDEF_DInstruction
typedef struct DInstruction_s DInstruction_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProcedure
#define TSF_DEFINE_TYPEDEF_DProcedure
typedef struct DProcedure_s DProcedure_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProcedureDecl
#define TSF_DEFINE_TYPEDEF_DProcedureDecl
typedef struct DProcedureDecl_s DProcedureDecl_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProcedureDefn
#define TSF_DEFINE_TYPEDEF_DProcedureDefn
typedef struct DProcedureDefn_s DProcedureDefn_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProgramElement
#define TSF_DEFINE_TYPEDEF_DProgramElement
typedef struct DProgramElement_s DProgramElement_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProgram
#define TSF_DEFINE_TYPEDEF_DProgram
typedef struct DProgram_s DProgram_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__mov
#define TSF_DEFINE_TYPEDEF_DInstruction__mov
typedef struct DInstruction__mov_s DInstruction__mov_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__add
#define TSF_DEFINE_TYPEDEF_DInstruction__add
typedef struct DInstruction__add_s DInstruction__add_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__alloc
#define TSF_DEFINE_TYPEDEF_DInstruction__alloc
typedef struct DInstruction__alloc_s DInstruction__alloc_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__ret
#define TSF_DEFINE_TYPEDEF_DInstruction__ret
typedef struct DInstruction__ret_s DInstruction__ret_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__jump
#define TSF_DEFINE_TYPEDEF_DInstruction__jump
typedef struct DInstruction__jump_s DInstruction__jump_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__call
#define TSF_DEFINE_TYPEDEF_DInstruction__call
typedef struct DInstruction__call_s DInstruction__call_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_int16__array
#define TSF_DEFINE_TYPEDEF_int16__array
typedef struct int16__array_s int16__array_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__branchZero
#define TSF_DEFINE_TYPEDEF_DInstruction__branchZero
typedef struct DInstruction__branchZero_s DInstruction__branchZero_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DVariableDecl__array
#define TSF_DEFINE_TYPEDEF_DVariableDecl__array
typedef struct DVariableDecl__array_s DVariableDecl__array_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__array
#define TSF_DEFINE_TYPEDEF_DInstruction__array
typedef struct DInstruction__array_s DInstruction__array_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProgramElement__array
#define TSF_DEFINE_TYPEDEF_DProgramElement__array
typedef struct DProgramElement__array_s DProgramElement__array_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DOperand
#define TSF_DEFINE_TYPEDEF_DOperand
typedef int16_t DOperand_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DType
#define TSF_DEFINE_TYPEDEF_DType
typedef char* DType_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DCodeOffset
#define TSF_DEFINE_TYPEDEF_DCodeOffset
typedef int16_t DCodeOffset_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DInstruction__call__args
#define TSF_DEFINE_TYPEDEF_DInstruction__call__args
typedef int16__array_t DInstruction__call__args_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProcedureDefn__variables
#define TSF_DEFINE_TYPEDEF_DProcedureDefn__variables
typedef DVariableDecl__array_t DProcedureDefn__variables_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProcedureDefn__code
#define TSF_DEFINE_TYPEDEF_DProcedureDefn__code
typedef DInstruction__array_t DProcedureDefn__code_t;
#endif

#ifndef TSF_DEFINE_TYPEDEF_DProgram__globals
#define TSF_DEFINE_TYPEDEF_DProgram__globals
typedef DProgramElement__array_t DProgram__globals_t;
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DVariableDecl
#define TSF_DEFINE_STRUCT_DEF_DVariableDecl
struct DVariableDecl_s {
    DType_t type;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__mov
#define TSF_DEFINE_STRUCT_DEF_DInstruction__mov
struct DInstruction__mov_s {
    DOperand_t dest;
    DOperand_t src;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__add
#define TSF_DEFINE_STRUCT_DEF_DInstruction__add
struct DInstruction__add_s {
    DOperand_t dest;
    DOperand_t src;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__alloc
#define TSF_DEFINE_STRUCT_DEF_DInstruction__alloc
struct DInstruction__alloc_s {
    DType_t type;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__ret
#define TSF_DEFINE_STRUCT_DEF_DInstruction__ret
struct DInstruction__ret_s {
    DOperand_t src;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__jump
#define TSF_DEFINE_STRUCT_DEF_DInstruction__jump
struct DInstruction__jump_s {
    DCodeOffset_t target;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_int16__array
#define TSF_DEFINE_STRUCT_DEF_int16__array
struct int16__array_s {
    int16_t *data;
    uint32_t len;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__call
#define TSF_DEFINE_STRUCT_DEF_DInstruction__call
struct DInstruction__call_s {
    DOperand_t dest;
    DOperand_t callee;
    DInstruction__call__args_t args;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__branchZero
#define TSF_DEFINE_STRUCT_DEF_DInstruction__branchZero
struct DInstruction__branchZero_s {
    DOperand_t src;
    DCodeOffset_t target;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction
#define TSF_DEFINE_STRUCT_DEF_DInstruction
struct DInstruction_s {
    tsf_choice_t value;
    union {
        DInstruction__mov_t mov;
        DInstruction__add_t add;
        DInstruction__alloc_t alloc;
        DInstruction__ret_t ret;
        DInstruction__jump_t jump;
        DInstruction__call_t call;
        DInstruction__branchZero_t branchZero;
    } u;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProcedure
#define TSF_DEFINE_STRUCT_DEF_DProcedure
struct DProcedure_s {
    char* name;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProcedureDecl
#define TSF_DEFINE_STRUCT_DEF_DProcedureDecl
struct DProcedureDecl_s {
    char* name;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DVariableDecl__array
#define TSF_DEFINE_STRUCT_DEF_DVariableDecl__array
struct DVariableDecl__array_s {
    DVariableDecl_t *data;
    uint32_t len;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DInstruction__array
#define TSF_DEFINE_STRUCT_DEF_DInstruction__array
struct DInstruction__array_s {
    DInstruction_t *data;
    uint32_t len;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProcedureDefn
#define TSF_DEFINE_STRUCT_DEF_DProcedureDefn
struct DProcedureDefn_s {
    char* name;
    DProcedureDefn__variables_t variables;
    DProcedureDefn__code_t code;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProgramElement
#define TSF_DEFINE_STRUCT_DEF_DProgramElement
struct DProgramElement_s {
    tsf_choice_t value;
    union {
        DProcedureDecl_t procedureDecl;
        DProcedureDefn_t procedureDefn;
    } u;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProgramElement__array
#define TSF_DEFINE_STRUCT_DEF_DProgramElement__array
struct DProgramElement__array_s {
    DProgramElement_t *data;
    uint32_t len;
};
#endif

#ifndef TSF_DEFINE_STRUCT_DEF_DProgram
#define TSF_DEFINE_STRUCT_DEF_DProgram
struct DProgram_s {
    DProgram__globals_t globals;
};
#endif

#ifndef TSF_DEFINE_CHOICE_DEFS_DInstruction
#define TSF_DEFINE_CHOICE_DEFS_DInstruction
#define DInstruction__nop 0
#define DInstruction__mov 1
#define DInstruction__add 2
#define DInstruction__alloc 3
#define DInstruction__ret 4
#define DInstruction__jump 5
#define DInstruction__call 6
#define DInstruction__branchZero 7
static TSF_inline const char *DInstruction__to_str(tsf_choice_t value) {
    switch (value) {
    case 0: return "nop";
    case 1: return "mov";
    case 2: return "add";
    case 3: return "alloc";
    case 4: return "ret";
    case 5: return "jump";
    case 6: return "call";
    case 7: return "branchZero";
    case UINT32_MAX: return "<unknown>";
    default: abort();
    }
}
#endif

#ifndef TSF_DEFINE_CHOICE_DEFS_DProgramElement
#define TSF_DEFINE_CHOICE_DEFS_DProgramElement
#define DProgramElement__procedureDecl 0
#define DProgramElement__procedureDefn 1
static TSF_inline const char *DProgramElement__to_str(tsf_choice_t value) {
    switch (value) {
    case 0: return "procedureDecl";
    case 1: return "procedureDefn";
    case UINT32_MAX: return "<unknown>";
    default: abort();
    }
}
#endif

#ifndef TSF_DEFINE_FUNCS_DOperand
#define TSF_DEFINE_FUNCS_DOperand
tsf_type_t *DOperand__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DOperand__destruct(DOperand_t *data) { }
tsf_genrtr_t *DOperand__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DOperand__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DOperand(tsf_type_t *type) { return tsf_type_instanceof(type, DOperand__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DOperand(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DOperand__get_type()); }
static TSF_inline tsf_buffer_t *DOperand__generate(void *data) { return tsf_generator_generate(DOperand__get_generator(), data); }
static TSF_inline tsf_buffer_t *DOperand__generate_in(void *data, void *region) { return tsf_generator_generate_in(DOperand__get_generator(), data, region); }
static TSF_inline DOperand_t *DOperand__parse(tsf_buffer_t *buf) { return (DOperand_t*)tsf_parser_parse(DOperand__get_parser(), buf); }
static TSF_inline DOperand_t *DOperand__parse_in(tsf_buffer_t *buf, void *region) { return (DOperand_t*)tsf_parser_parse_in(DOperand__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DOperand__parse_into(tsf_buffer_t *buf, DOperand_t *data, void *region) { return tsf_parser_parse_into(DOperand__get_parser(), buf, data, region); }
tsf_bool_t DOperand__write(tsf_stream_file_output_t *out, DOperand_t *data) TSF_ATTRIBUTE_NOINLINE;
DOperand_t *DOperand__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DOperand__read_into(tsf_stream_file_input_t *inp, DOperand_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DType
#define TSF_DEFINE_FUNCS_DType
tsf_type_t *DType__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DType__destruct(DType_t *data);
tsf_genrtr_t *DType__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DType__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DType(tsf_type_t *type) { return tsf_type_instanceof(type, DType__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DType(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DType__get_type()); }
static TSF_inline tsf_buffer_t *DType__generate(void *data) { return tsf_generator_generate(DType__get_generator(), data); }
static TSF_inline tsf_buffer_t *DType__generate_in(void *data, void *region) { return tsf_generator_generate_in(DType__get_generator(), data, region); }
static TSF_inline DType_t *DType__parse(tsf_buffer_t *buf) { return (DType_t*)tsf_parser_parse(DType__get_parser(), buf); }
static TSF_inline DType_t *DType__parse_in(tsf_buffer_t *buf, void *region) { return (DType_t*)tsf_parser_parse_in(DType__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DType__parse_into(tsf_buffer_t *buf, DType_t *data, void *region) { return tsf_parser_parse_into(DType__get_parser(), buf, data, region); }
tsf_bool_t DType__write(tsf_stream_file_output_t *out, DType_t *data) TSF_ATTRIBUTE_NOINLINE;
DType_t *DType__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DType__read_into(tsf_stream_file_input_t *inp, DType_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DCodeOffset
#define TSF_DEFINE_FUNCS_DCodeOffset
tsf_type_t *DCodeOffset__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DCodeOffset__destruct(DCodeOffset_t *data) { }
tsf_genrtr_t *DCodeOffset__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DCodeOffset__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DCodeOffset(tsf_type_t *type) { return tsf_type_instanceof(type, DCodeOffset__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DCodeOffset(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DCodeOffset__get_type()); }
static TSF_inline tsf_buffer_t *DCodeOffset__generate(void *data) { return tsf_generator_generate(DCodeOffset__get_generator(), data); }
static TSF_inline tsf_buffer_t *DCodeOffset__generate_in(void *data, void *region) { return tsf_generator_generate_in(DCodeOffset__get_generator(), data, region); }
static TSF_inline DCodeOffset_t *DCodeOffset__parse(tsf_buffer_t *buf) { return (DCodeOffset_t*)tsf_parser_parse(DCodeOffset__get_parser(), buf); }
static TSF_inline DCodeOffset_t *DCodeOffset__parse_in(tsf_buffer_t *buf, void *region) { return (DCodeOffset_t*)tsf_parser_parse_in(DCodeOffset__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DCodeOffset__parse_into(tsf_buffer_t *buf, DCodeOffset_t *data, void *region) { return tsf_parser_parse_into(DCodeOffset__get_parser(), buf, data, region); }
tsf_bool_t DCodeOffset__write(tsf_stream_file_output_t *out, DCodeOffset_t *data) TSF_ATTRIBUTE_NOINLINE;
DCodeOffset_t *DCodeOffset__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DCodeOffset__read_into(tsf_stream_file_input_t *inp, DCodeOffset_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DVariableDecl
#define TSF_DEFINE_FUNCS_DVariableDecl
tsf_type_t *DVariableDecl__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DVariableDecl__destruct(DVariableDecl_t *data);
tsf_genrtr_t *DVariableDecl__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DVariableDecl__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DVariableDecl(tsf_type_t *type) { return tsf_type_instanceof(type, DVariableDecl__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DVariableDecl(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DVariableDecl__get_type()); }
static TSF_inline tsf_buffer_t *DVariableDecl__generate(void *data) { return tsf_generator_generate(DVariableDecl__get_generator(), data); }
static TSF_inline tsf_buffer_t *DVariableDecl__generate_in(void *data, void *region) { return tsf_generator_generate_in(DVariableDecl__get_generator(), data, region); }
static TSF_inline DVariableDecl_t *DVariableDecl__parse(tsf_buffer_t *buf) { return (DVariableDecl_t*)tsf_parser_parse(DVariableDecl__get_parser(), buf); }
static TSF_inline DVariableDecl_t *DVariableDecl__parse_in(tsf_buffer_t *buf, void *region) { return (DVariableDecl_t*)tsf_parser_parse_in(DVariableDecl__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DVariableDecl__parse_into(tsf_buffer_t *buf, DVariableDecl_t *data, void *region) { return tsf_parser_parse_into(DVariableDecl__get_parser(), buf, data, region); }
tsf_bool_t DVariableDecl__write(tsf_stream_file_output_t *out, DVariableDecl_t *data) TSF_ATTRIBUTE_NOINLINE;
DVariableDecl_t *DVariableDecl__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DVariableDecl__read_into(tsf_stream_file_input_t *inp, DVariableDecl_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction
#define TSF_DEFINE_FUNCS_DInstruction
tsf_type_t *DInstruction__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DInstruction__destruct(DInstruction_t *data);
tsf_genrtr_t *DInstruction__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DInstruction__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DInstruction(tsf_type_t *type) { return tsf_type_instanceof(type, DInstruction__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DInstruction(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DInstruction__get_type()); }
static TSF_inline tsf_buffer_t *DInstruction__generate(void *data) { return tsf_generator_generate(DInstruction__get_generator(), data); }
static TSF_inline tsf_buffer_t *DInstruction__generate_in(void *data, void *region) { return tsf_generator_generate_in(DInstruction__get_generator(), data, region); }
static TSF_inline DInstruction_t *DInstruction__parse(tsf_buffer_t *buf) { return (DInstruction_t*)tsf_parser_parse(DInstruction__get_parser(), buf); }
static TSF_inline DInstruction_t *DInstruction__parse_in(tsf_buffer_t *buf, void *region) { return (DInstruction_t*)tsf_parser_parse_in(DInstruction__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DInstruction__parse_into(tsf_buffer_t *buf, DInstruction_t *data, void *region) { return tsf_parser_parse_into(DInstruction__get_parser(), buf, data, region); }
tsf_bool_t DInstruction__write(tsf_stream_file_output_t *out, DInstruction_t *data) TSF_ATTRIBUTE_NOINLINE;
DInstruction_t *DInstruction__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DInstruction__read_into(tsf_stream_file_input_t *inp, DInstruction_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DProcedure
#define TSF_DEFINE_FUNCS_DProcedure
tsf_type_t *DProcedure__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProcedure__destruct(DProcedure_t *data);
tsf_genrtr_t *DProcedure__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DProcedure__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DProcedure(tsf_type_t *type) { return tsf_type_instanceof(type, DProcedure__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DProcedure(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DProcedure__get_type()); }
static TSF_inline tsf_buffer_t *DProcedure__generate(void *data) { return tsf_generator_generate(DProcedure__get_generator(), data); }
static TSF_inline tsf_buffer_t *DProcedure__generate_in(void *data, void *region) { return tsf_generator_generate_in(DProcedure__get_generator(), data, region); }
static TSF_inline DProcedure_t *DProcedure__parse(tsf_buffer_t *buf) { return (DProcedure_t*)tsf_parser_parse(DProcedure__get_parser(), buf); }
static TSF_inline DProcedure_t *DProcedure__parse_in(tsf_buffer_t *buf, void *region) { return (DProcedure_t*)tsf_parser_parse_in(DProcedure__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DProcedure__parse_into(tsf_buffer_t *buf, DProcedure_t *data, void *region) { return tsf_parser_parse_into(DProcedure__get_parser(), buf, data, region); }
tsf_bool_t DProcedure__write(tsf_stream_file_output_t *out, DProcedure_t *data) TSF_ATTRIBUTE_NOINLINE;
DProcedure_t *DProcedure__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DProcedure__read_into(tsf_stream_file_input_t *inp, DProcedure_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DProcedureDecl
#define TSF_DEFINE_FUNCS_DProcedureDecl
tsf_type_t *DProcedureDecl__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProcedureDecl__destruct(DProcedureDecl_t *data);
tsf_genrtr_t *DProcedureDecl__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DProcedureDecl__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DProcedureDecl(tsf_type_t *type) { return tsf_type_instanceof(type, DProcedureDecl__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DProcedureDecl(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DProcedureDecl__get_type()); }
static TSF_inline tsf_buffer_t *DProcedureDecl__generate(void *data) { return tsf_generator_generate(DProcedureDecl__get_generator(), data); }
static TSF_inline tsf_buffer_t *DProcedureDecl__generate_in(void *data, void *region) { return tsf_generator_generate_in(DProcedureDecl__get_generator(), data, region); }
static TSF_inline DProcedureDecl_t *DProcedureDecl__parse(tsf_buffer_t *buf) { return (DProcedureDecl_t*)tsf_parser_parse(DProcedureDecl__get_parser(), buf); }
static TSF_inline DProcedureDecl_t *DProcedureDecl__parse_in(tsf_buffer_t *buf, void *region) { return (DProcedureDecl_t*)tsf_parser_parse_in(DProcedureDecl__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DProcedureDecl__parse_into(tsf_buffer_t *buf, DProcedureDecl_t *data, void *region) { return tsf_parser_parse_into(DProcedureDecl__get_parser(), buf, data, region); }
tsf_bool_t DProcedureDecl__write(tsf_stream_file_output_t *out, DProcedureDecl_t *data) TSF_ATTRIBUTE_NOINLINE;
DProcedureDecl_t *DProcedureDecl__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DProcedureDecl__read_into(tsf_stream_file_input_t *inp, DProcedureDecl_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DProcedureDefn
#define TSF_DEFINE_FUNCS_DProcedureDefn
tsf_type_t *DProcedureDefn__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProcedureDefn__destruct(DProcedureDefn_t *data);
tsf_genrtr_t *DProcedureDefn__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DProcedureDefn__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DProcedureDefn(tsf_type_t *type) { return tsf_type_instanceof(type, DProcedureDefn__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DProcedureDefn(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DProcedureDefn__get_type()); }
static TSF_inline tsf_buffer_t *DProcedureDefn__generate(void *data) { return tsf_generator_generate(DProcedureDefn__get_generator(), data); }
static TSF_inline tsf_buffer_t *DProcedureDefn__generate_in(void *data, void *region) { return tsf_generator_generate_in(DProcedureDefn__get_generator(), data, region); }
static TSF_inline DProcedureDefn_t *DProcedureDefn__parse(tsf_buffer_t *buf) { return (DProcedureDefn_t*)tsf_parser_parse(DProcedureDefn__get_parser(), buf); }
static TSF_inline DProcedureDefn_t *DProcedureDefn__parse_in(tsf_buffer_t *buf, void *region) { return (DProcedureDefn_t*)tsf_parser_parse_in(DProcedureDefn__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DProcedureDefn__parse_into(tsf_buffer_t *buf, DProcedureDefn_t *data, void *region) { return tsf_parser_parse_into(DProcedureDefn__get_parser(), buf, data, region); }
tsf_bool_t DProcedureDefn__write(tsf_stream_file_output_t *out, DProcedureDefn_t *data) TSF_ATTRIBUTE_NOINLINE;
DProcedureDefn_t *DProcedureDefn__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DProcedureDefn__read_into(tsf_stream_file_input_t *inp, DProcedureDefn_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DProgramElement
#define TSF_DEFINE_FUNCS_DProgramElement
tsf_type_t *DProgramElement__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProgramElement__destruct(DProgramElement_t *data);
tsf_genrtr_t *DProgramElement__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DProgramElement__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DProgramElement(tsf_type_t *type) { return tsf_type_instanceof(type, DProgramElement__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DProgramElement(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DProgramElement__get_type()); }
static TSF_inline tsf_buffer_t *DProgramElement__generate(void *data) { return tsf_generator_generate(DProgramElement__get_generator(), data); }
static TSF_inline tsf_buffer_t *DProgramElement__generate_in(void *data, void *region) { return tsf_generator_generate_in(DProgramElement__get_generator(), data, region); }
static TSF_inline DProgramElement_t *DProgramElement__parse(tsf_buffer_t *buf) { return (DProgramElement_t*)tsf_parser_parse(DProgramElement__get_parser(), buf); }
static TSF_inline DProgramElement_t *DProgramElement__parse_in(tsf_buffer_t *buf, void *region) { return (DProgramElement_t*)tsf_parser_parse_in(DProgramElement__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DProgramElement__parse_into(tsf_buffer_t *buf, DProgramElement_t *data, void *region) { return tsf_parser_parse_into(DProgramElement__get_parser(), buf, data, region); }
tsf_bool_t DProgramElement__write(tsf_stream_file_output_t *out, DProgramElement_t *data) TSF_ATTRIBUTE_NOINLINE;
DProgramElement_t *DProgramElement__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DProgramElement__read_into(tsf_stream_file_input_t *inp, DProgramElement_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DProgram
#define TSF_DEFINE_FUNCS_DProgram
tsf_type_t *DProgram__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProgram__destruct(DProgram_t *data);
tsf_genrtr_t *DProgram__get_generator(void) TSF_ATTRIBUTE_NOINLINE;
tsf_parser_t *DProgram__get_parser(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline tsf_bool_t instanceof__DProgram(tsf_type_t *type) { return tsf_type_instanceof(type, DProgram__get_type()); }
static TSF_inline tsf_bool_t buf_instanceof__DProgram(tsf_buffer_t *buf) { return tsf_buffer_instanceof(buf, DProgram__get_type()); }
static TSF_inline tsf_buffer_t *DProgram__generate(void *data) { return tsf_generator_generate(DProgram__get_generator(), data); }
static TSF_inline tsf_buffer_t *DProgram__generate_in(void *data, void *region) { return tsf_generator_generate_in(DProgram__get_generator(), data, region); }
static TSF_inline DProgram_t *DProgram__parse(tsf_buffer_t *buf) { return (DProgram_t*)tsf_parser_parse(DProgram__get_parser(), buf); }
static TSF_inline DProgram_t *DProgram__parse_in(tsf_buffer_t *buf, void *region) { return (DProgram_t*)tsf_parser_parse_in(DProgram__get_parser(), buf, region); }
static TSF_inline tsf_bool_t DProgram__parse_into(tsf_buffer_t *buf, DProgram_t *data, void *region) { return tsf_parser_parse_into(DProgram__get_parser(), buf, data, region); }
tsf_bool_t DProgram__write(tsf_stream_file_output_t *out, DProgram_t *data) TSF_ATTRIBUTE_NOINLINE;
DProgram_t *DProgram__read(tsf_stream_file_input_t *inp) TSF_ATTRIBUTE_NOINLINE;
tsf_bool_t DProgram__read_into(tsf_stream_file_input_t *inp, DProgram_t *result) TSF_ATTRIBUTE_NOINLINE;
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__mov
#define TSF_DEFINE_FUNCS_DInstruction__mov
tsf_type_t *DInstruction__mov__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DInstruction__mov__destruct(DInstruction__mov_t *data) { }
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__add
#define TSF_DEFINE_FUNCS_DInstruction__add
tsf_type_t *DInstruction__add__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DInstruction__add__destruct(DInstruction__add_t *data) { }
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__alloc
#define TSF_DEFINE_FUNCS_DInstruction__alloc
tsf_type_t *DInstruction__alloc__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DInstruction__alloc__destruct(DInstruction__alloc_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__ret
#define TSF_DEFINE_FUNCS_DInstruction__ret
tsf_type_t *DInstruction__ret__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DInstruction__ret__destruct(DInstruction__ret_t *data) { }
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__jump
#define TSF_DEFINE_FUNCS_DInstruction__jump
tsf_type_t *DInstruction__jump__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DInstruction__jump__destruct(DInstruction__jump_t *data) { }
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__call
#define TSF_DEFINE_FUNCS_DInstruction__call
tsf_type_t *DInstruction__call__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DInstruction__call__destruct(DInstruction__call_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__call__args
#define TSF_DEFINE_FUNCS_DInstruction__call__args
tsf_type_t *DInstruction__call__args__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DInstruction__call__args__destruct(DInstruction__call__args_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_int16__array
#define TSF_DEFINE_FUNCS_int16__array
#define int16__array__get_type int16__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__get_type
#define int16__array__destruct int16__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__destruct
tsf_type_t *int16__array__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void int16__array__destruct(int16__array_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__branchZero
#define TSF_DEFINE_FUNCS_DInstruction__branchZero
tsf_type_t *DInstruction__branchZero__get_type(void) TSF_ATTRIBUTE_NOINLINE;
static TSF_inline void DInstruction__branchZero__destruct(DInstruction__branchZero_t *data) { }
#endif

#ifndef TSF_DEFINE_FUNCS_DProcedureDefn__variables
#define TSF_DEFINE_FUNCS_DProcedureDefn__variables
tsf_type_t *DProcedureDefn__variables__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProcedureDefn__variables__destruct(DProcedureDefn__variables_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DVariableDecl__array
#define TSF_DEFINE_FUNCS_DVariableDecl__array
#define DVariableDecl__array__get_type DVariableDecl__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__get_type
#define DVariableDecl__array__destruct DVariableDecl__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__destruct
tsf_type_t *DVariableDecl__array__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DVariableDecl__array__destruct(DVariableDecl__array_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DProcedureDefn__code
#define TSF_DEFINE_FUNCS_DProcedureDefn__code
tsf_type_t *DProcedureDefn__code__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProcedureDefn__code__destruct(DProcedureDefn__code_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DInstruction__array
#define TSF_DEFINE_FUNCS_DInstruction__array
#define DInstruction__array__get_type DInstruction__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__get_type
#define DInstruction__array__destruct DInstruction__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__destruct
tsf_type_t *DInstruction__array__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DInstruction__array__destruct(DInstruction__array_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DProgram__globals
#define TSF_DEFINE_FUNCS_DProgram__globals
tsf_type_t *DProgram__globals__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProgram__globals__destruct(DProgram__globals_t *data);
#endif

#ifndef TSF_DEFINE_FUNCS_DProgramElement__array
#define TSF_DEFINE_FUNCS_DProgramElement__array
#define DProgramElement__array__get_type DProgramElement__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__get_type
#define DProgramElement__array__destruct DProgramElement__arrayW7BOAgwLepJkOpeCcB_oKK_rbSCfFq_AutXtJEqHNPImfXBNqcXz__destruct
tsf_type_t *DProgramElement__array__get_type(void) TSF_ATTRIBUTE_NOINLINE;
void DProgramElement__array__destruct(DProgramElement__array_t *data);
#endif

#ifdef __cplusplus
};
#endif

