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 )