/* ex: set ro ft=c:
 * !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
 *
 * This file is generated automatically from './src/pmc/callcontext.pmc'
 * by tools/build/pmc2c.pl.
 *
 * Any changes made here will be lost!
 *
 */

/* HEADERIZER HFILE: none */
/* HEADERIZER STOP */


#ifndef PARROT_PMC_CALLCONTEXT_H_GUARD
#define PARROT_PMC_CALLCONTEXT_H_GUARD

PARROT_EXPORT VTABLE* Parrot_CallContext_update_vtable(ARGMOD(VTABLE*));
PARROT_EXPORT VTABLE* Parrot_CallContext_ro_update_vtable(ARGMOD(VTABLE*));
PARROT_EXPORT VTABLE* Parrot_CallContext_get_vtable(PARROT_INTERP);
PARROT_EXPORT VTABLE* Parrot_CallContext_ro_get_vtable(PARROT_INTERP);
PARROT_EXPORT PMC*    Parrot_CallContext_get_mro(PARROT_INTERP, ARGMOD(PMC* mro));
PARROT_EXPORT Hash*   Parrot_CallContext_get_isa(PARROT_INTERP, ARGMOD_NULLOK(Hash* isa));

/* CallContext PMC's underlying struct. */
typedef struct Parrot_CallContext_attributes {
    PMC      * caller_ctx;
    void     * registers;
    Regs_ni bp;
    Regs_ps bp_ps;
    UINTVAL n_regs_used[4];
    PMC      * lex_pad;
    PMC      * outer_ctx;
    PMC      * current_sub;
    PMC      * handlers;
    PMC      * current_cont;
    PMC      * current_namespace;
    opcode_t * current_pc;
    PMC      * current_sig;
    FLOATVAL * num_constants;
    STRING  ** str_constants;
    PMC     ** pmc_constants;
    INTVAL current_HLL;
    UINTVAL warns;
    UINTVAL errors;
    UINTVAL trace_flags;
    UINTVAL recursion_depth;
    struct Pcc_cell * positionals;
    INTVAL num_positionals;
    INTVAL allocated_positionals;
    PMC    * type_tuple;
    STRING * short_sig;
    PMC    * arg_flags;
    PMC    * return_flags;
    Hash   * hash;
    PMC    * continuation;
} Parrot_CallContext_attributes;

/* Macro to access underlying structure of a CallContext PMC. */
#define PARROT_CALLCONTEXT(o) ((Parrot_CallContext_attributes *) PMC_data(o))


/* Generated macro accessors for 'caller_ctx' attribute of CallContext PMC. */
#define GETATTR_CallContext_caller_ctx(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->caller_ctx; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "caller_ctx")); \
        } \
    } while (0)

#define SETATTR_CallContext_caller_ctx(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "caller_ctx"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->caller_ctx = (value); \
    } while (0)


/* Generated macro accessors for 'registers' attribute of CallContext PMC. */
#define GETATTR_CallContext_registers(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->registers; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'void     *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_registers(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'void     *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->registers = (value); \
    } while (0)


/* Generated macro accessors for 'bp' attribute of CallContext PMC. */
#define GETATTR_CallContext_bp(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->bp; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Regs_ni' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_bp(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Regs_ni' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->bp = (value); \
    } while (0)


/* Generated macro accessors for 'bp_ps' attribute of CallContext PMC. */
#define GETATTR_CallContext_bp_ps(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->bp_ps; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Regs_ps' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_bp_ps(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Regs_ps' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->bp_ps = (value); \
    } while (0)


/* Generated macro accessors for 'n_regs_used' attribute of CallContext PMC. */
#define GETATTR_CallContext_n_regs_used(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->n_regs_used; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_n_regs_used(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->n_regs_used = (value); \
    } while (0)


/* Generated macro accessors for 'lex_pad' attribute of CallContext PMC. */
#define GETATTR_CallContext_lex_pad(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->lex_pad; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "lex_pad")); \
        } \
    } while (0)

#define SETATTR_CallContext_lex_pad(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "lex_pad"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->lex_pad = (value); \
    } while (0)


/* Generated macro accessors for 'outer_ctx' attribute of CallContext PMC. */
#define GETATTR_CallContext_outer_ctx(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->outer_ctx; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "outer_ctx")); \
        } \
    } while (0)

#define SETATTR_CallContext_outer_ctx(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "outer_ctx"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->outer_ctx = (value); \
    } while (0)


/* Generated macro accessors for 'current_sub' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_sub(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_sub; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "current_sub")); \
        } \
    } while (0)

#define SETATTR_CallContext_current_sub(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "current_sub"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_sub = (value); \
    } while (0)


/* Generated macro accessors for 'handlers' attribute of CallContext PMC. */
#define GETATTR_CallContext_handlers(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->handlers; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "handlers")); \
        } \
    } while (0)

#define SETATTR_CallContext_handlers(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "handlers"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->handlers = (value); \
    } while (0)


/* Generated macro accessors for 'current_cont' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_cont(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_cont; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "current_cont")); \
        } \
    } while (0)

#define SETATTR_CallContext_current_cont(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "current_cont"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_cont = (value); \
    } while (0)


/* Generated macro accessors for 'current_namespace' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_namespace(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_namespace; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "current_namespace")); \
        } \
    } while (0)

#define SETATTR_CallContext_current_namespace(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "current_namespace"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_namespace = (value); \
    } while (0)


/* Generated macro accessors for 'current_pc' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_pc(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_pc; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'opcode_t *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_current_pc(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'opcode_t *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_pc = (value); \
    } while (0)


/* Generated macro accessors for 'current_sig' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_sig(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_sig; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "current_sig")); \
        } \
    } while (0)

#define SETATTR_CallContext_current_sig(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "current_sig"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_sig = (value); \
    } while (0)


/* Generated macro accessors for 'num_constants' attribute of CallContext PMC. */
#define GETATTR_CallContext_num_constants(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->num_constants; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'FLOATVAL *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_num_constants(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'FLOATVAL *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->num_constants = (value); \
    } while (0)


/* Generated macro accessors for 'str_constants' attribute of CallContext PMC. */
#define GETATTR_CallContext_str_constants(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->str_constants; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'STRING  **' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_str_constants(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'STRING  **' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->str_constants = (value); \
    } while (0)


/* Generated macro accessors for 'pmc_constants' attribute of CallContext PMC. */
#define GETATTR_CallContext_pmc_constants(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->pmc_constants; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'PMC     **' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_pmc_constants(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'PMC     **' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->pmc_constants = (value); \
    } while (0)


/* Generated macro accessors for 'current_HLL' attribute of CallContext PMC. */
#define GETATTR_CallContext_current_HLL(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_HLL; \
        } \
        else { \
            PMC * const attr_value = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "current_HLL")); \
            (dest) = (PMC_IS_NULL(attr_value) ? (INTVAL) 0: VTABLE_get_integer(interp, attr_value)); \
        } \
    } while (0)

#define SETATTR_CallContext_current_HLL(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            PMC * const attr_value = Parrot_pmc_new_init_int(interp, enum_class_Integer, value); \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "current_HLL"), attr_value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->current_HLL = (value); \
    } while (0)


/* Generated macro accessors for 'warns' attribute of CallContext PMC. */
#define GETATTR_CallContext_warns(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->warns; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_warns(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->warns = (value); \
    } while (0)


/* Generated macro accessors for 'errors' attribute of CallContext PMC. */
#define GETATTR_CallContext_errors(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->errors; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_errors(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->errors = (value); \
    } while (0)


/* Generated macro accessors for 'trace_flags' attribute of CallContext PMC. */
#define GETATTR_CallContext_trace_flags(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->trace_flags; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_trace_flags(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->trace_flags = (value); \
    } while (0)


/* Generated macro accessors for 'recursion_depth' attribute of CallContext PMC. */
#define GETATTR_CallContext_recursion_depth(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->recursion_depth; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_recursion_depth(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'UINTVAL' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->recursion_depth = (value); \
    } while (0)


/* Generated macro accessors for 'positionals' attribute of CallContext PMC. */
#define GETATTR_CallContext_positionals(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->positionals; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'struct Pcc_cell *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_positionals(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'struct Pcc_cell *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->positionals = (value); \
    } while (0)


/* Generated macro accessors for 'num_positionals' attribute of CallContext PMC. */
#define GETATTR_CallContext_num_positionals(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->num_positionals; \
        } \
        else { \
            PMC * const attr_value = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "num_positionals")); \
            (dest) = (PMC_IS_NULL(attr_value) ? (INTVAL) 0: VTABLE_get_integer(interp, attr_value)); \
        } \
    } while (0)

#define SETATTR_CallContext_num_positionals(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            PMC * const attr_value = Parrot_pmc_new_init_int(interp, enum_class_Integer, value); \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "num_positionals"), attr_value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->num_positionals = (value); \
    } while (0)


/* Generated macro accessors for 'allocated_positionals' attribute of CallContext PMC. */
#define GETATTR_CallContext_allocated_positionals(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->allocated_positionals; \
        } \
        else { \
            PMC * const attr_value = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "allocated_positionals")); \
            (dest) = (PMC_IS_NULL(attr_value) ? (INTVAL) 0: VTABLE_get_integer(interp, attr_value)); \
        } \
    } while (0)

#define SETATTR_CallContext_allocated_positionals(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            PMC * const attr_value = Parrot_pmc_new_init_int(interp, enum_class_Integer, value); \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "allocated_positionals"), attr_value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->allocated_positionals = (value); \
    } while (0)


/* Generated macro accessors for 'type_tuple' attribute of CallContext PMC. */
#define GETATTR_CallContext_type_tuple(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->type_tuple; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "type_tuple")); \
        } \
    } while (0)

#define SETATTR_CallContext_type_tuple(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "type_tuple"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->type_tuple = (value); \
    } while (0)


/* Generated macro accessors for 'short_sig' attribute of CallContext PMC. */
#define GETATTR_CallContext_short_sig(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->short_sig; \
        } \
        else { \
            PMC * const attr_value = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "short_sig")); \
            (dest) =  (PMC_IS_NULL(attr_value) ? (STRING *)NULL : VTABLE_get_string(interp, attr_value)); \
        } \
    } while (0)

#define SETATTR_CallContext_short_sig(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            PMC * const attr_value = Parrot_pmc_new(interp, enum_class_String); \
            VTABLE_set_string_native(interp, attr_value, value); \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "short_sig"), attr_value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->short_sig = (value); \
    } while (0)


/* Generated macro accessors for 'arg_flags' attribute of CallContext PMC. */
#define GETATTR_CallContext_arg_flags(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->arg_flags; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "arg_flags")); \
        } \
    } while (0)

#define SETATTR_CallContext_arg_flags(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "arg_flags"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->arg_flags = (value); \
    } while (0)


/* Generated macro accessors for 'return_flags' attribute of CallContext PMC. */
#define GETATTR_CallContext_return_flags(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->return_flags; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "return_flags")); \
        } \
    } while (0)

#define SETATTR_CallContext_return_flags(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "return_flags"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->return_flags = (value); \
    } while (0)


/* Generated macro accessors for 'hash' attribute of CallContext PMC. */
#define GETATTR_CallContext_hash(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->hash; \
        } \
        else { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Hash   *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
    } while (0)

#define SETATTR_CallContext_hash(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, \
                "Attributes of type 'Hash   *' cannot be " \
                "subclassed from a high-level PMC."); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->hash = (value); \
    } while (0)


/* Generated macro accessors for 'continuation' attribute of CallContext PMC. */
#define GETATTR_CallContext_continuation(interp, pmc, dest) \
    do { \
        if (!PObj_is_object_TEST(pmc)) { \
            (dest) = ((Parrot_CallContext_attributes *)PMC_data(pmc))->continuation; \
        } \
        else { \
            (dest) = VTABLE_get_attr_str(interp, \
                              pmc, Parrot_str_new_constant(interp, "continuation")); \
        } \
    } while (0)

#define SETATTR_CallContext_continuation(interp, pmc, value) \
    do { \
        if (PObj_is_object_TEST(pmc)) { \
            VTABLE_set_attr_str(interp, pmc, \
                              Parrot_str_new_constant(interp, "continuation"), value); \
        } \
        else \
            ((Parrot_CallContext_attributes *)PMC_data(pmc))->continuation = (value); \
    } while (0)


#endif /* PARROT_PMC_CALLCONTEXT_H_GUARD */

/*
 * Local variables:
 *   c-file-style: "parrot"
 * End:
 * vim: expandtab shiftwidth=4:
 */

