C-sparse
view release on metacpan or search on metacpan
src/sparse-0.4.4/perl/sparse.xs view on Meta::CPAN
} \
\
static type \
new_##type (type##_t e) \
{ \
unsigned int h = (int) (long)e; \
h = ((h >> 4) ^ (h >> 8) ^ (h >> 12) ^ 0x57a45) & (SPARSE_HASHSIZE-1); \
type p = hash_##type(e,h); \
TRACE (printf ("new %s(%p=>%p)\n", type##_class, e, p)); \
if (!p) { \
if (type##_freelist != NULL) \
{ \
p = type##_freelist; \
type##_freelist = type##_freelist->next; \
} \
else \
{ \
New (SPARSE_MALLOC_ID, p, 1, struct type##_elem); \
} \
p->next = type##_hash[h]; \
type##_hash[h] = p; \
p->m = e;/*TRACE (printf (" p=%p\n", p));*/ \
assert_support (type##_count++); \
} \
TRACE (printf (" =>%p\n", p)); \
TRACE_ACTIVE (); \
return p; \
} \
static SV * \
newbless_##type (type##_t e) \
{ \
if (!e) return &PL_sv_undef; \
return sv_bless (sv_setref_pv (sv_newmortal(), NULL, new_##type (e)), type##_class_hv); \
} \
static SV *newsv_##type (type##_t e) \
{ \
if (!e) return &PL_sv_undef; \
return sv_setref_pv (sv_newmortal(), NULL, new_##type (e)); \
} \
CREATE_SPARSE(sparsepos, C::sparse::pos , position);
CREATE_SPARSE(sparsetok, C::sparse::tok , token);
CREATE_SPARSE(sparsestmt, C::sparse::stmt , statement);
CREATE_SPARSE(sparseexpr, C::sparse::expr , expression);
CREATE_SPARSE(sparsesym, C::sparse::sym , symbol);
CREATE_SPARSE(sparseident, C::sparse::ident , ident);
CREATE_SPARSE(sparsectype, C::sparse::ctype , ctype);
CREATE_SPARSE(sparsesymctx,C::sparse::symctx, sym_context);
CREATE_SPARSE(sparsescope, C::sparse::scope , scope);
CREATE_SPARSE(sparseexpand,C::sparse::expand, expansion);
CREATE_SPARSE(sparsectx, C::sparse::ctx , sparse_ctx);
CREATE_SPARSE(sparsestream,C::sparse::stream, stream);
static char *token_types_class[] = {
"C::sparse::tok::TOKEN_EOF",
"C::sparse::tok::TOKEN_ERROR",
"C::sparse::tok::TOKEN_IDENT",
"C::sparse::tok::TOKEN_ZERO_IDENT",
"C::sparse::tok::TOKEN_NUMBER",
"C::sparse::tok::TOKEN_CHAR",
"C::sparse::tok::TOKEN_CHAR_EMBEDDED_0",
"C::sparse::tok::TOKEN_CHAR_EMBEDDED_1",
"C::sparse::tok::TOKEN_CHAR_EMBEDDED_2",
"C::sparse::tok::TOKEN_CHAR_EMBEDDED_3",
"C::sparse::tok::TOKEN_WIDE_CHAR",
"C::sparse::tok::TOKEN_WIDE_CHAR_EMBEDDED_0",
"C::sparse::tok::TOKEN_WIDE_CHAR_EMBEDDED_1",
"C::sparse::tok::TOKEN_WIDE_CHAR_EMBEDDED_2",
"C::sparse::tok::TOKEN_WIDE_CHAR_EMBEDDED_3",
"C::sparse::tok::TOKEN_STRING",
"C::sparse::tok::TOKEN_WIDE_STRING",
"C::sparse::tok::TOKEN_SPECIAL",
"C::sparse::tok::TOKEN_STREAMBEGIN",
"C::sparse::tok::TOKEN_STREAMEND",
"C::sparse::tok::TOKEN_MACRO_ARGUMENT",
"C::sparse::tok::TOKEN_STR_ARGUMENT",
"C::sparse::tok::TOKEN_QUOTED_ARGUMENT",
"C::sparse::tok::TOKEN_CONCAT",
"C::sparse::tok::TOKEN_GNU_KLUDGE",
"C::sparse::tok::TOKEN_UNTAINT",
"C::sparse::tok::TOKEN_ARG_COUNT",
"C::sparse::tok::TOKEN_IF",
"C::sparse::tok::TOKEN_SKIP_GROUPS",
"C::sparse::tok::TOKEN_ELSE",
"C::sparse::tok::TOKEN_CONS",
0
};
static SV *bless_tok(sparsetok_t e) {
if (!e) return &PL_sv_undef;
return sv_bless (newsv_sparsetok (e), gv_stashpv (token_types_class[token_type(e)],1));
}
static SV *bless_sparsetok(sparsetok_t e) { return bless_tok(e); }
static char *stmt_types_class[] = {
"C::sparse::stmt::STMT_NONE",
"C::sparse::stmt::STMT_DECLARATION",
"C::sparse::stmt::STMT_EXPRESSION",
"C::sparse::stmt::STMT_COMPOUND",
"C::sparse::stmt::STMT_IF",
"C::sparse::stmt::STMT_RETURN",
"C::sparse::stmt::STMT_CASE",
"C::sparse::stmt::STMT_SWITCH",
"C::sparse::stmt::STMT_ITERATOR",
"C::sparse::stmt::STMT_LABEL",
"C::sparse::stmt::STMT_GOTO",
"C::sparse::stmt::STMT_ASM",
"C::sparse::stmt::STMT_CONTEXT",
"C::sparse::stmt::STMT_RANGE"
};
static SV *bless_stmt(sparsestmt_t e) {
if (!e) return &PL_sv_undef;
return sv_bless (newsv_sparsestmt(e), gv_stashpv (stmt_types_class[e->type],1));
}
static SV *bless_sparsestmt(sparsestmt_t e) { return bless_stmt(e); }
static char *sym_types_class[] = {
"C::sparse::sym::SYM_UNINITIALIZED",
"C::sparse::sym::SYM_PREPROCESSOR",
"C::sparse::sym::SYM_BASETYPE",
"C::sparse::sym::SYM_NODE",
"C::sparse::sym::SYM_PTR",
"C::sparse::sym::SYM_FN",
"C::sparse::sym::SYM_ARRAY",
"C::sparse::sym::SYM_STRUCT",
"C::sparse::sym::SYM_UNION",
"C::sparse::sym::SYM_ENUM",
"C::sparse::sym::SYM_TYPEDEF",
"C::sparse::sym::SYM_TYPEOF",
"C::sparse::sym::SYM_MEMBER",
"C::sparse::sym::SYM_BITFIELD",
( run in 0.778 second using v1.01-cache-2.11-cpan-71847e10f99 )