Convert-Binary-C
view release on metacpan or search on metacpan
cbc/option.c view on Meta::CPAN
"value, not a reference"); \
else if (THIS->flag != SvIV(sv_val) ? 1 : 0) \
{ \
THIS->flag = SvIV(sv_val) ? 1 : 0; \
changed = 1; \
} \
} \
DID_CHANGE(changed); \
} \
if (rval) \
*rval = THIS->state ? newSViv(THIS->flag ? 1 : 0) : &PL_sv_undef;\
break;
#define TRISTATE_INT_OPTION(name, state, config, layout, pp) \
case OPTION_ ## name : \
IMPACTS_LAYOUT(layout); \
IMPACTS_PREPROC(pp); \
if (sv_val) \
{ \
unsigned isdef = SvOK(sv_val) != 0; \
int changed = isdef != THIS->state; \
THIS->state = isdef; \
if (isdef) \
{ \
if (SvROK(sv_val)) \
Perl_croak(aTHX_ #name " must be undef or an integer " \
"value, not a reference"); \
else if (THIS->config != SvIV(sv_val)) \
{ \
THIS->config = SvIV(sv_val); \
changed = 1; \
} \
} \
DID_CHANGE(changed); \
} \
if (rval) \
*rval = THIS->state ? newSViv(THIS->config) : &PL_sv_undef; \
break;
#define STRLIST_OPTION(name, config, layout, pp) \
case OPTION_ ## name : \
IMPACTS_LAYOUT(layout); \
IMPACTS_PREPROC(pp); \
handle_string_list(aTHX_ #name, THIS->config, sv_val, rval); \
DID_CHANGE(sv_val != NULL); \
break;
#define INVALID_OPTION \
default: \
Perl_croak(aTHX_ "Invalid option '%s'", option); \
break;
void handle_option(pTHX_ CBC *THIS, SV *opt, SV *sv_val, SV **rval, HandleOptionResult *p_res)
{
START_OPTIONS
FLAG_OPTION(OrderMembers, order_members, 0, 0)
FLAG_OPTION(Warnings, cfg.issue_warnings, 0, 0)
FLAG_OPTION(HasCPPComments, cfg.has_cpp_comments, 0, 1)
FLAG_OPTION(HasMacroVAARGS, cfg.has_macro_vaargs, 0, 1)
FLAG_OPTION(UnsignedChars, cfg.unsigned_chars, 0, 0)
FLAG_OPTION(UnsignedBitfields, cfg.unsigned_bitfields, 0, 0)
IVAL_OPTION(PointerSize, cfg.layout.ptr_size, 1, 0)
IVAL_OPTION(EnumSize, cfg.layout.enum_size, 1, 0)
IVAL_OPTION(IntSize, cfg.layout.int_size, 1, 0)
IVAL_OPTION(CharSize, cfg.layout.char_size, 1, 0)
IVAL_OPTION(ShortSize, cfg.layout.short_size, 1, 0)
IVAL_OPTION(LongSize, cfg.layout.long_size, 1, 0)
IVAL_OPTION(LongLongSize, cfg.layout.long_long_size, 1, 0)
IVAL_OPTION(FloatSize, cfg.layout.float_size, 1, 0)
IVAL_OPTION(DoubleSize, cfg.layout.double_size, 1, 0)
IVAL_OPTION(LongDoubleSize, cfg.layout.long_double_size, 1, 0)
IVAL_OPTION(Alignment, cfg.layout.alignment, 1, 0)
IVAL_OPTION(CompoundAlignment, cfg.layout.compound_alignment, 1, 0)
TRISTATE_FLAG_OPTION(HostedC, cfg.has_std_c_hosted, cfg.is_std_c_hosted, 0, 1)
TRISTATE_INT_OPTION(StdCVersion, cfg.has_std_c, cfg.std_c_version, 0, 1)
STRLIST_OPTION(Include, cfg.includes, 0, 1)
STRLIST_OPTION(Define, cfg.defines, 0, 1)
STRLIST_OPTION(Assert, cfg.assertions, 0, 1)
OPTION(DisabledKeywords)
IMPACTS_LAYOUT(0);
disabled_keywords(aTHX_ &THIS->cfg.disabled_keywords, sv_val, rval,
&THIS->cfg.keywords);
DID_CHANGE(sv_val != NULL);
ENDOPT
OPTION(KeywordMap)
IMPACTS_LAYOUT(0);
keyword_map(aTHX_ &THIS->cfg.keyword_map, sv_val, rval);
DID_CHANGE(sv_val != NULL);
ENDOPT
OPTION(ByteOrder)
IMPACTS_LAYOUT(1);
if (sv_val)
{
const StringOption *pOpt = GET_STR_OPTION(ByteOrder, 0, sv_val);
UPDATE_OPT(cfg.layout.byte_order, pOpt->value);
}
if (rval)
{
const StringOption *pOpt = GET_STR_OPTION(ByteOrder,
THIS->cfg.layout.byte_order, NULL);
*rval = newSVpv(CONST_CHAR(pOpt->string), 0);
}
ENDOPT
OPTION(EnumType)
IMPACTS_LAYOUT(0);
if (sv_val)
{
const StringOption *pOpt = GET_STR_OPTION(EnumType, 0, sv_val);
UPDATE_OPT(enumType, pOpt->value);
}
if (rval)
cbc/option.c view on Meta::CPAN
#undef END_OPTIONS
#undef OPTION
#undef ENDOPT
#undef UPDATE_OPT
#undef FLAG_OPTION
#undef IVAL_OPTION
#undef TRISTATE_FLAG_OPTION
#undef TRISTATE_INT_OPTION
#undef STRLIST_OPTION
/*******************************************************************************
*
* ROUTINE: get_configuration
*
* WRITTEN BY: Marcus Holland-Moritz ON: Mar 2002
* CHANGED BY: ON:
*
********************************************************************************
*
* DESCRIPTION:
*
* ARGUMENTS:
*
* RETURNS:
*
*******************************************************************************/
#define FLAG_OPTION(name, flag) \
sv = newSViv(THIS->flag); \
HV_STORE_CONST(hv, #name, sv);
#define STRLIST_OPTION(name, config) \
handle_string_list(aTHX_ #name, THIS->config, NULL, &sv); \
HV_STORE_CONST(hv, #name, sv);
#define IVAL_OPTION(name, config) \
sv = newSViv(THIS->config); \
HV_STORE_CONST(hv, #name, sv);
#define TRISTATE_FLAG_OPTION(name, state, flag) \
sv = THIS->state ? newSViv(THIS->flag ? 1 : 0) : &PL_sv_undef; \
HV_STORE_CONST(hv, #name, sv);
#define TRISTATE_INT_OPTION(name, state, config) \
sv = THIS->state ? newSViv(THIS->config) : &PL_sv_undef; \
HV_STORE_CONST(hv, #name, sv);
#define STRING_OPTION(name, value) \
sv = newSVpv(CONST_CHAR(GET_STR_OPTION(name, value, NULL)->string), 0);\
HV_STORE_CONST(hv, #name, sv);
SV *get_configuration(pTHX_ CBC *THIS)
{
HV *hv = newHV();
SV *sv;
FLAG_OPTION(OrderMembers, order_members )
FLAG_OPTION(Warnings, cfg.issue_warnings )
FLAG_OPTION(HasCPPComments, cfg.has_cpp_comments )
FLAG_OPTION(HasMacroVAARGS, cfg.has_macro_vaargs )
FLAG_OPTION(UnsignedChars, cfg.unsigned_chars )
FLAG_OPTION(UnsignedBitfields, cfg.unsigned_bitfields)
IVAL_OPTION(PointerSize, cfg.layout.ptr_size )
IVAL_OPTION(EnumSize, cfg.layout.enum_size )
IVAL_OPTION(IntSize, cfg.layout.int_size )
IVAL_OPTION(CharSize, cfg.layout.char_size )
IVAL_OPTION(ShortSize, cfg.layout.short_size )
IVAL_OPTION(LongSize, cfg.layout.long_size )
IVAL_OPTION(LongLongSize, cfg.layout.long_long_size )
IVAL_OPTION(FloatSize, cfg.layout.float_size )
IVAL_OPTION(DoubleSize, cfg.layout.double_size )
IVAL_OPTION(LongDoubleSize, cfg.layout.long_double_size )
IVAL_OPTION(Alignment, cfg.layout.alignment )
IVAL_OPTION(CompoundAlignment, cfg.layout.compound_alignment)
TRISTATE_FLAG_OPTION(HostedC, cfg.has_std_c_hosted, cfg.is_std_c_hosted)
TRISTATE_INT_OPTION(StdCVersion, cfg.has_std_c, cfg.std_c_version)
STRLIST_OPTION(Include, cfg.includes )
STRLIST_OPTION(Define, cfg.defines )
STRLIST_OPTION(Assert, cfg.assertions )
STRLIST_OPTION(DisabledKeywords, cfg.disabled_keywords)
keyword_map(aTHX_ &THIS->cfg.keyword_map, NULL, &sv);
HV_STORE_CONST(hv, "KeywordMap", sv);
STRING_OPTION(ByteOrder, THIS->cfg.layout.byte_order)
STRING_OPTION(EnumType, THIS->enumType)
bitfields_option(aTHX_ &THIS->cfg.layout.bflayouter, NULL, &sv);
HV_STORE_CONST(hv, "Bitfields", sv);
return newRV_noinc((SV *) hv);
}
#undef FLAG_OPTION
#undef STRLIST_OPTION
#undef IVAL_OPTION
#undef STRING_OPTION
/*******************************************************************************
*
* ROUTINE: get_native_property
*
* WRITTEN BY: Marcus Holland-Moritz ON: Dec 2004
* CHANGED BY: ON:
*
********************************************************************************
*
* DESCRIPTION:
*
* ARGUMENTS:
*
* RETURNS:
*
*******************************************************************************/
SV *get_native_property(pTHX_ const char *property)
( run in 0.313 second using v1.01-cache-2.11-cpan-71847e10f99 )