Marpa-R2
view release on metacpan or search on metacpan
#define EXPECTED_LIBMARPA_MINOR 0
#define EXPECTED_LIBMARPA_MICRO 2
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin
PROTOTYPES: DISABLE
void
debug_level_set(new_level)
int new_level;
PPCODE:
{
const int old_level = marpa_debug_level_set (new_level);
if (old_level || new_level)
marpa_r2_warn ("libmarpa debug level set to %d, was %d", new_level,
old_level);
XSRETURN_YES;
}
void
error_names()
PPCODE:
{
int error_code;
for (error_code = 0; error_code < MARPA_ERROR_COUNT; error_code++)
{
const char *error_name = marpa_error_description[error_code].name;
XPUSHs (sv_2mortal (newSVpv (error_name, 0)));
}
}
# This search is not optimized. This list is short
# and the data is constant, so that
# and lookup is expected to be done once by an application
# and memoized.
void
op( op_name )
char *op_name;
PPCODE:
{
const int op_id = marpa__slif_op_id (op_name);
if (op_id >= 0)
{
XSRETURN_IV ((IV) op_id);
}
croak ("Problem with Marpa::R2::Thin->op('%s'): No such op", op_name);
}
# This search is not optimized. This list is short
# and the data is constant. It is expected this lookup
# will be done mainly for error messages.
void
op_name( op )
IV op;
PPCODE:
{
XSRETURN_PV (marpa__slif_op_name(op));
}
void
version()
PPCODE:
{
int version[3];
int result = marpa_version(version);
if (result < 0) { XSRETURN_UNDEF; }
XPUSHs (sv_2mortal (newSViv (version[0])));
XPUSHs (sv_2mortal (newSViv (version[1])));
XPUSHs (sv_2mortal (newSViv (version[2])));
}
void
tag()
PPCODE:
{
const char* tag = _marpa_tag();
XSRETURN_PV(tag);
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::G
void
new( ... )
PPCODE:
{
Marpa_Grammar g;
G_Wrapper *g_wrapper;
int throw = 1;
IV interface = 0;
Marpa_Config marpa_configuration;
int error_code;
switch (items)
{
XSRETURN_UNDEF;
}
XPUSHs (&PL_sv_undef);
XPUSHs (sv_2mortal (newSViv (error_code)));
}
}
void
DESTROY( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar grammar;
if (g_wrapper->message_buffer)
Safefree(g_wrapper->message_buffer);
grammar = g_wrapper->g;
marpa_g_unref( grammar );
Safefree( g_wrapper );
}
void
event( g_wrapper, ix )
G_Wrapper *g_wrapper;
int ix;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
Marpa_Event event;
const char *result_string = NULL;
Marpa_Event_Type result = marpa_g_event (g, &event, ix);
if (result < 0)
{
if (!g_wrapper->throw)
{
XSRETURN_UNDEF;
char *error_message =
form ("event(%d): unknown event code, %d", ix, result);
set_error_from_string (g_wrapper, savepv(error_message));
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSVpv (result_string, 0)));
XPUSHs (sv_2mortal (newSViv (marpa_g_event_value (&event))));
}
# Actually returns Marpa_Rule_ID, void is here to eliminate RETVAL
# that remains unused with PPCODE. The same applies to all void's below
# when preceded with a return type commented out, e.g.
# # int
# void
void
rule_new( g_wrapper, lhs, rhs_av )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID lhs;
AV *rhs_av;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int length;
Marpa_Symbol_ID* rhs;
Marpa_Rule_ID new_rule_id;
length = av_len(rhs_av)+1;
if (length <= 0) {
rhs = (Marpa_Symbol_ID*)NULL;
} else {
int i;
# the hash args. This seems to be the way things are
# done in Perl -- in particular there seems to be no
# easy way to prevent that.
# Marpa_Rule_ID
void
sequence_new( g_wrapper, lhs, rhs, args )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID lhs;
Marpa_Symbol_ID rhs;
HV *args;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
Marpa_Rule_ID new_rule_id;
Marpa_Symbol_ID separator = -1;
int min = 1;
int flags = 0;
if (args)
{
I32 retlen;
char *key;
croak ("Problem in g->sequence_new(%d, %d, ...): %s", lhs, rhs,
xs_g_error (g_wrapper));
}
}
XPUSHs (sv_2mortal (newSViv (new_rule_id)));
}
void
default_rank( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_default_rank (self);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
{
croak ("Problem in g->default_rank(): %s", xs_g_error (g_wrapper));
}
}
XSRETURN_IV (gp_result);
}
void
default_rank_set( g_wrapper, rank )
G_Wrapper *g_wrapper;
Marpa_Rank rank;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_default_rank_set (self, rank);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
croak ("Problem in g->default_rank_set(%d): %s",
rank, xs_g_error (g_wrapper));
}
XSRETURN_IV (gp_result);
}
void
rule_rank( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_rank (self, rule_id);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
{
croak ("Problem in g->rule_rank(%d): %s",
rule_id, xs_g_error (g_wrapper));
}
}
XSRETURN_IV (gp_result);
}
void
rule_rank_set( g_wrapper, rule_id, rank )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
Marpa_Rank rank;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_rank_set(self, rule_id, rank);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
croak ("Problem in g->rule_rank_set(%d, %d): %s",
rule_id, rank, xs_g_error (g_wrapper));
}
XSRETURN_IV (gp_result);
}
void
symbol_rank( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_rank (self, symbol_id);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
{
croak ("Problem in g->symbol_rank(%d): %s",
symbol_id, xs_g_error (g_wrapper));
}
}
XSRETURN_IV (gp_result);
}
void
symbol_rank_set( g_wrapper, symbol_id, rank )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
Marpa_Rank rank;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_rank_set (self, symbol_id, rank);
if (gp_result == -2 && g_wrapper->throw)
{
const int libmarpa_error_code = marpa_g_error (self, NULL);
if (libmarpa_error_code != MARPA_ERR_NONE)
croak ("Problem in g->symbol_rank_set(%d, %d): %s",
symbol_id, rank, xs_g_error (g_wrapper));
}
XSRETURN_IV (gp_result);
}
void
throw_set( g_wrapper, boolean )
G_Wrapper *g_wrapper;
int boolean;
PPCODE:
{
if (boolean < 0 || boolean > 1)
{
/* Always throws an exception if the arguments are bad */
croak ("Problem in g->throw_set(%d): argument must be 0 or 1", boolean);
}
g_wrapper->throw = boolean;
XPUSHs (sv_2mortal (newSViv (boolean)));
}
void
error( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
const char *error_message =
"Problem in $g->error(): Nothing in message buffer";
SV *error_code_sv = &PL_sv_undef;
g_wrapper->libmarpa_error_code =
marpa_g_error (g, &g_wrapper->libmarpa_error_string);
/* A new Libmarpa error overrides any thin interface error */
if (g_wrapper->libmarpa_error_code != MARPA_ERR_NONE)
}
XPUSHs (sv_2mortal (newSVpv (error_message, 0)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::R
void
new( class, g_sv )
char * class;
SV* g_sv;
PPCODE:
{
SV *sv_to_return;
G_Wrapper *g_wrapper;
Marpa_Recce r;
Marpa_Grammar g;
PERL_UNUSED_ARG(class);
if (!sv_isa (g_sv, "Marpa::R2::Thin::G"))
{
croak
R_Wrapper *r_wrapper = r_wrap (r, g_sv);
sv_to_return = sv_newmortal ();
sv_setref_pv (sv_to_return, recce_c_class_name, (void *) r_wrapper);
}
XPUSHs (sv_to_return);
}
void
DESTROY( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recce r = r_unwrap(r_wrapper);
marpa_r_unref (r);
}
void
ruby_slippers_set( r_wrapper, boolean )
R_Wrapper *r_wrapper;
int boolean;
PPCODE:
{
if (boolean < 0 || boolean > 1)
{
/* Always thrown */
croak ("Problem in g->ruby_slippers_set(%d): argument must be 0 or 1", boolean);
}
r_wrapper->ruby_slippers = boolean;
XPUSHs (sv_2mortal (newSViv (boolean)));
}
void
start_input( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_start_input(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->start_input(): %s",
xs_g_error( r_wrapper->base ));
}
r_convert_events(r_wrapper);
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
alternative( r_wrapper, symbol_id, value, length )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID symbol_id;
int value;
int length;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
const G_Wrapper *base = r_wrapper->base;
const int result = marpa_r_alternative (r, symbol_id, value, length);
if (result == MARPA_ERR_NONE || r_wrapper->ruby_slippers || !base->throw)
{
XSRETURN_IV (result);
}
croak ("Problem in r->alternative(): %s", xs_g_error (r_wrapper->base));
}
void
terminals_expected( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
int i;
struct marpa_r *r = r_wrapper->r;
const int count =
marpa_r_terminals_expected (r, r_wrapper->terminals_buffer);
if (count < 0)
{
G_Wrapper* base = r_wrapper->base;
if (!base->throw) { XSRETURN_UNDEF; }
croak ("Problem in r->terminals_expected(): %s",
EXTEND (SP, count);
for (i = 0; i < count; i++)
{
PUSHs (sv_2mortal (newSViv (r_wrapper->terminals_buffer[i])));
}
}
void
progress_item( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *const r = r_wrapper->r;
int position = -1;
Marpa_Earley_Set_ID origin = -1;
Marpa_Rule_ID rule_id = marpa_r_progress_item (r, &position, &origin);
if (rule_id == -1)
{
XSRETURN_UNDEF;
}
if (rule_id < 0 && r_wrapper->base->throw)
XPUSHs (sv_2mortal (newSViv (origin)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::B
void
new( class, r_wrapper, ordinal )
char * class;
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID ordinal;
PPCODE:
{
SV *sv;
Marpa_Recognizer r = r_wrapper->r;
B_Wrapper *b_wrapper;
Marpa_Bocage b = marpa_b_new (r, ordinal);
PERL_UNUSED_ARG(class);
if (!b)
{
if (!r_wrapper->base->throw) { XSRETURN_UNDEF; }
b_wrapper->base = r_wrapper->base;
b_wrapper->b = b;
sv = sv_newmortal ();
sv_setref_pv (sv, bocage_c_class_name, (void *) b_wrapper);
XPUSHs (sv);
}
void
DESTROY( b_wrapper )
B_Wrapper *b_wrapper;
PPCODE:
{
const Marpa_Bocage b = b_wrapper->b;
SvREFCNT_dec (b_wrapper->base_sv);
marpa_b_unref(b);
Safefree( b_wrapper );
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::O
void
new( class, b_wrapper )
char * class;
B_Wrapper *b_wrapper;
PPCODE:
{
SV *sv;
Marpa_Bocage b = b_wrapper->b;
O_Wrapper *o_wrapper;
Marpa_Order o = marpa_o_new (b);
PERL_UNUSED_ARG(class);
if (!o)
{
if (!b_wrapper->base->throw) { XSRETURN_UNDEF; }
o_wrapper->base = b_wrapper->base;
o_wrapper->o = o;
sv = sv_newmortal ();
sv_setref_pv (sv, order_c_class_name, (void *) o_wrapper);
XPUSHs (sv);
}
void
DESTROY( o_wrapper )
O_Wrapper *o_wrapper;
PPCODE:
{
const Marpa_Order o = o_wrapper->o;
SvREFCNT_dec (o_wrapper->base_sv);
marpa_o_unref(o);
Safefree( o_wrapper );
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::T
void
new( class, o_wrapper )
char * class;
O_Wrapper *o_wrapper;
PPCODE:
{
SV *sv;
Marpa_Order o = o_wrapper->o;
T_Wrapper *t_wrapper;
Marpa_Tree t = marpa_t_new (o);
PERL_UNUSED_ARG(class);
if (!t)
{
if (!o_wrapper->base->throw) { XSRETURN_UNDEF; }
t_wrapper->base = o_wrapper->base;
t_wrapper->t = t;
sv = sv_newmortal ();
sv_setref_pv (sv, tree_c_class_name, (void *) t_wrapper);
XPUSHs (sv);
}
void
DESTROY( t_wrapper )
T_Wrapper *t_wrapper;
PPCODE:
{
const Marpa_Tree t = t_wrapper->t;
SvREFCNT_dec (t_wrapper->base_sv);
marpa_t_unref(t);
Safefree( t_wrapper );
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::V
void
new( class, t_wrapper )
char * class;
T_Wrapper *t_wrapper;
PPCODE:
{
SV *sv;
Marpa_Tree t = t_wrapper->t;
V_Wrapper *v_wrapper;
Marpa_Value v = marpa_v_new (t);
PERL_UNUSED_ARG(class);
if (!v)
{
if (!t_wrapper->base->throw)
v_wrapper->nulling_semantics = newAV ();
v_wrapper->slr = NULL;
sv = sv_newmortal ();
sv_setref_pv (sv, value_c_class_name, (void *) v_wrapper);
XPUSHs (sv);
}
void
DESTROY( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
SvREFCNT_dec (v_wrapper->base_sv);
SvREFCNT_dec (v_wrapper->event_queue);
SvREFCNT_dec (v_wrapper->constants);
SvREFCNT_dec (v_wrapper->rule_semantics);
SvREFCNT_dec (v_wrapper->token_semantics);
SvREFCNT_dec (v_wrapper->nulling_semantics);
if (v_wrapper->slr) {
SvREFCNT_dec (v_wrapper->slr);
}
SvREFCNT_dec (v_wrapper->token_values);
marpa_v_unref (v);
Safefree (v_wrapper);
}
void
trace_values( v_wrapper, level )
V_Wrapper *v_wrapper;
IV level;
PPCODE:
{
IV old_level = v_wrapper->trace_values;
v_wrapper->trace_values = level;
{
AV *event;
SV *event_data[3];
event_data[0] = newSVpvs ("valuator trace level");
event_data[1] = newSViv (old_level);
event_data[2] = newSViv (level);
event = av_make (Dim (event_data), event_data);
av_push (v_wrapper->event_queue, newRV_noinc ((SV *) event));
}
XSRETURN_IV (old_level);
}
void
token_value_set( v_wrapper, token_ix, token_value )
V_Wrapper *v_wrapper;
int token_ix;
SV* token_value;
PPCODE:
{
if (token_ix <= TOKEN_VALUE_IS_LITERAL)
{
croak
("Problem in v->token_value_set(): token_value cannot be set for index %ld",
(long) token_ix);
}
SvREFCNT_inc (token_value);
if (!av_store (v_wrapper->token_values, (I32)token_ix, token_value))
{
SvREFCNT_dec (token_value);
}
}
void
slr_set( v_wrapper, slr )
V_Wrapper *v_wrapper;
Scanless_R *slr;
PPCODE:
{
if (v_wrapper->slr)
{
croak ("Problem in v->slr_set(): The SLR is already set");
}
SvREFCNT_inc (slr);
v_wrapper->slr = slr;
# Throw away the current token values hash
SvREFCNT_dec (v_wrapper->token_values);
# Take a reference to the one in the SLR
v_wrapper->token_values = slr->token_values;
SvREFCNT_inc (v_wrapper->token_values);
}
void
event( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
SV* event = av_shift(v_wrapper->event_queue);
XPUSHs (sv_2mortal (event));
}
void
step( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
Marpa_Symbol_ID token_id;
Marpa_Rule_ID rule_id;
const char *result_string;
const Marpa_Step_Type step_type = marpa_v_step (v);
if (v_wrapper->mode == MARPA_XS_V_MODE_IS_INITIAL) {
v_wrapper->mode = MARPA_XS_V_MODE_IS_RAW;
}
rule_id = marpa_v_rule (v);
XPUSHs (sv_2mortal (newSViv (rule_id)));
XPUSHs (sv_2mortal (newSViv (marpa_v_arg_0 (v))));
XPUSHs (sv_2mortal (newSViv (marpa_v_arg_n (v))));
}
}
void
stack_mode_set( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
Marpa_Grammar g = v_wrapper->base->g;
if (v_wrapper->mode != MARPA_XS_V_MODE_IS_INITIAL)
{
if (v_wrapper->stack)
{
croak ("Problem in v->stack_mode_set(): Cannot re-set stack mode");
}
}
if (v_create_stack (v_wrapper) == -1)
}
}
XSRETURN_YES;
}
void
rule_register( v_wrapper, rule_id, ... )
V_Wrapper *v_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
/* OP Count is args less two */
const STRLEN op_count = items - 2;
STRLEN op_ix;
STRLEN dummy;
IV *ops;
SV *ops_sv;
AV *rule_semantics = v_wrapper->rule_semantics;
if (!rule_semantics)
ops[op_ix] = 0;
if (!av_store (rule_semantics, (I32) rule_id, ops_sv)) {
SvREFCNT_dec(ops_sv);
}
}
void
token_register( v_wrapper, token_id, ... )
V_Wrapper *v_wrapper;
Marpa_Symbol_ID token_id;
PPCODE:
{
/* OP Count is args less two */
const STRLEN op_count = items - 2;
STRLEN op_ix;
STRLEN dummy;
IV *ops;
SV *ops_sv;
AV *token_semantics = v_wrapper->token_semantics;
if (!token_semantics)
ops[op_ix] = 0;
if (!av_store (token_semantics, (I32) token_id, ops_sv)) {
SvREFCNT_dec(ops_sv);
}
}
void
nulling_symbol_register( v_wrapper, symbol_id, ... )
V_Wrapper *v_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
/* OP Count is args less two */
const STRLEN op_count = items - 2;
STRLEN op_ix;
STRLEN dummy;
IV *ops;
SV *ops_sv;
AV *nulling_semantics = v_wrapper->nulling_semantics;
if (!nulling_semantics)
ops[op_ix] = 0;
if (!av_store (nulling_semantics, (I32) symbol_id, ops_sv)) {
SvREFCNT_dec(ops_sv);
}
}
void
constant_register( v_wrapper, sv )
V_Wrapper *v_wrapper;
SV* sv;
PPCODE:
{
AV *constants = v_wrapper->constants;
if (!constants)
{
croak
("Problem in v->constant_register(): valuator is not in stack mode");
}
if (SvTAINTED(sv)) {
croak
"Marpa::R2 is insecure for use with tainted data\n");
}
av_push (constants, SvREFCNT_inc_simple_NN (sv));
XSRETURN_IV (av_len (constants));
}
void
highest_index( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
AV* stack = v_wrapper->stack;
IV length = stack ? av_len(stack) : -1;
XSRETURN_IV(length);
}
void
absolute( v_wrapper, index )
V_Wrapper *v_wrapper;
IV index;
PPCODE:
{
SV** p_sv;
AV* stack = v_wrapper->stack;
if (!stack) { XSRETURN_UNDEF; }
p_sv = av_fetch(stack, index, 0);
if (!p_sv) { XSRETURN_UNDEF; }
XPUSHs (sv_mortalcopy(*p_sv));
}
void
relative( v_wrapper, index )
V_Wrapper *v_wrapper;
IV index;
PPCODE:
{
SV** p_sv;
AV* stack = v_wrapper->stack;
if (!stack) { XSRETURN_UNDEF; }
p_sv = av_fetch(stack, index+v_wrapper->result, 0);
if (!p_sv) { XSRETURN_UNDEF; }
XPUSHs (sv_mortalcopy(*p_sv));
}
void
result_set( v_wrapper, sv )
V_Wrapper *v_wrapper;
SV* sv;
PPCODE:
{
IV result_ix;
SV **p_stored_sv;
AV *stack = v_wrapper->stack;
if (!stack)
{
croak ("Problem in v->result_set(): valuator is not in stack mode");
}
result_ix = v_wrapper->result;
av_fill(stack, result_ix);
p_stored_sv = av_store (stack, result_ix, sv);
if (!p_stored_sv)
{
SvREFCNT_dec (sv);
}
}
void
stack_step( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
av_clear (v_wrapper->event_queue);
if (v_wrapper->mode != MARPA_XS_V_MODE_IS_STACK)
{
if (v_wrapper->stack)
{
croak
("Problem in v->stack_step(): Cannot call unless valuator is in 'stack' mode");
if (v_wrapper->trace_values)
{
XSRETURN_PV ("trace");
}
}
}
void
step_type( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
const Marpa_Step_Type status = marpa_v_step_type (v);
const char *result_string;
result_string = step_type_to_string (status);
if (!result_string)
{
result_string =
form ("Problem in v->step(): unknown step type %d", status);
set_error_from_string (v_wrapper->base, savepv (result_string));
{
croak ("%s", result_string);
}
}
XPUSHs (sv_2mortal (newSVpv (result_string, 0)));
}
void
location( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
const Marpa_Step_Type status = marpa_v_step_type (v);
if (status == MARPA_STEP_RULE)
{
XPUSHs (sv_2mortal (newSViv (marpa_v_rule_start_es_id (v))));
XPUSHs (sv_2mortal (newSViv (marpa_v_es_id (v))));
XSRETURN (2);
}
if (status == MARPA_STEP_NULLING_SYMBOL)
}
XSRETURN_EMPTY;
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::G
void
_marpa_g_nsy_is_nulling( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_nsy_is_nulling (g, nsy_id);
if (result < 0)
{
croak ("Problem in g->_marpa_g_nsy_is_nulling(%d): %s", nsy_id,
xs_g_error (g_wrapper));
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}
void
_marpa_g_nsy_is_start( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_nsy_is_start (g, nsy_id);
if (result < 0)
{
croak ("Invalid nsy %d", nsy_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}
# Marpa_Symbol_ID
void
_marpa_g_source_xsy( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
Marpa_Symbol_ID source_xsy = _marpa_g_source_xsy (g, symbol_id);
if (source_xsy < -1)
{
croak ("problem with g->_marpa_g_source_xsy: %s", xs_g_error (g_wrapper));
}
if (source_xsy < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (source_xsy)));
}
# Marpa_Rule_ID
void
_marpa_g_nsy_lhs_xrl( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
Marpa_Rule_ID rule_id = _marpa_g_nsy_lhs_xrl (g, nsy_id);
if (rule_id < -1)
{
croak ("problem with g->_marpa_g_nsy_lhs_xrl: %s",
xs_g_error (g_wrapper));
}
if (rule_id < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (rule_id)));
}
# Marpa_Rule_ID
void
_marpa_g_nsy_xrl_offset( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int offset = _marpa_g_nsy_xrl_offset (g, nsy_id);
if (offset == -1)
{
XSRETURN_UNDEF;
}
if (offset < 0)
{
croak ("problem with g->_marpa_g_nsy_xrl_offset: %s",
xs_g_error (g_wrapper));
}
XPUSHs (sv_2mortal (newSViv (offset)));
}
# int
void
_marpa_g_virtual_start( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_virtual_start (g, irl_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in g->_marpa_g_virtual_start(%d): %s", irl_id,
xs_g_error (g_wrapper));
}
XPUSHs( sv_2mortal( newSViv(result) ) );
}
# int
void
_marpa_g_virtual_end( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_virtual_end (g, irl_id);
if (result <= -2)
{
croak ("Problem in g->_marpa_g_virtual_end(%d): %s", irl_id,
xs_g_error (g_wrapper));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
void
_marpa_g_rule_is_used( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_rule_is_used (g, rule_id);
if (result < 0)
{
croak ("Problem in g->_marpa_g_rule_is_used(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}
void
_marpa_g_irl_is_virtual_lhs( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_irl_is_virtual_lhs (g, irl_id);
if (result < 0)
{
croak ("Problem in g->_marpa_g_irl_is_virtual_lhs(%d): %s", irl_id,
xs_g_error (g_wrapper));
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}
void
_marpa_g_irl_is_virtual_rhs( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_irl_is_virtual_rhs (g, irl_id);
if (result < 0)
{
croak ("Problem in g->_marpa_g_irl_is_virtual_rhs(%d): %s", irl_id,
xs_g_error (g_wrapper));
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}
# Marpa_Rule_ID
void
_marpa_g_real_symbol_count( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_real_symbol_count(g, rule_id);
if (result <= -2)
{
croak ("Problem in g->_marpa_g_real_symbol_count(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result == -1)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# Marpa_Rule_ID
void
_marpa_g_source_xrl ( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_source_xrl (g, irl_id);
if (result <= -2)
{
croak ("Problem in g->_marpa_g_source_xrl (%d): %s", irl_id,
xs_g_error (g_wrapper));
}
if (result == -1)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# Marpa_Rule_ID
void
_marpa_g_irl_semantic_equivalent( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_irl_semantic_equivalent (g, irl_id);
if (result <= -2)
{
croak ("Problem in g->_marpa_g_irl_semantic_equivalent(%d): %s", irl_id,
xs_g_error (g_wrapper));
}
if (result == -1)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_g_ahm_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_ahm_count (g);
if (result <= -2)
{
croak ("Problem in g->_marpa_g_ahm_count(): %s", xs_g_error (g_wrapper));
}
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_g_irl_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_irl_count (g);
if (result < -1)
{
croak ("Problem in g->_marpa_g_irl_count(): %s", xs_g_error (g_wrapper));
}
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_g_nsy_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_nsy_count (g);
if (result < -1)
{
croak ("Problem in g->_marpa_g_nsy_count(): %s", xs_g_error (g_wrapper));
}
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# Marpa_IRL_ID
void
_marpa_g_ahm_irl( g_wrapper, item_id )
G_Wrapper *g_wrapper;
Marpa_AHM_ID item_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_ahm_irl(g, item_id);
if (result < 0) { XSRETURN_UNDEF; }
XPUSHs (sv_2mortal (newSViv (result)));
}
# -1 is a valid return value, so -2 indicates an error
# int
void
_marpa_g_ahm_position( g_wrapper, item_id )
G_Wrapper *g_wrapper;
Marpa_AHM_ID item_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_ahm_position(g, item_id);
if (result <= -2) { XSRETURN_UNDEF; }
XPUSHs (sv_2mortal (newSViv (result)));
}
# -1 is a valid return value, and -2 indicates an error
# Marpa_Symbol_ID
void
_marpa_g_ahm_postdot( g_wrapper, item_id )
G_Wrapper *g_wrapper;
Marpa_AHM_ID item_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_ahm_postdot(g, item_id);
if (result <= -2) { XSRETURN_UNDEF; }
XPUSHs (sv_2mortal (newSViv (result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::R
void
_marpa_r_is_use_leo_set( r_wrapper, boolean )
R_Wrapper *r_wrapper;
int boolean;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int result = _marpa_r_is_use_leo_set (r, (boolean ? TRUE : FALSE));
if (result < 0)
{
croak ("Problem in _marpa_r_is_use_leo_set(): %s",
xs_g_error(r_wrapper->base));
}
XSRETURN_YES;
}
void
_marpa_r_is_use_leo( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int boolean = _marpa_r_is_use_leo (r);
if (boolean < 0)
{
croak ("Problem in _marpa_r_is_use_leo(): %s", xs_g_error(r_wrapper->base));
}
if (boolean)
XSRETURN_YES;
XSRETURN_NO;
}
void
_marpa_r_earley_set_size( r_wrapper, set_ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID set_ordinal;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int earley_set_size = _marpa_r_earley_set_size (r, set_ordinal);
if (earley_set_size < 0) {
croak ("Problem in r->_marpa_r_earley_set_size(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (earley_set_size)));
}
void
_marpa_r_earley_set_trace( r_wrapper, set_ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID set_ordinal;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
Marpa_AHM_ID result = _marpa_r_earley_set_trace(
r, set_ordinal );
if (result == -1) { XSRETURN_UNDEF; }
if (result < 0) { croak("problem with r->_marpa_r_earley_set_trace: %s", xs_g_error(r_wrapper->base)); }
XPUSHs( sv_2mortal( newSViv(result) ) );
}
void
_marpa_r_earley_item_trace( r_wrapper, item_ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Item_ID item_ordinal;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
Marpa_AHM_ID result = _marpa_r_earley_item_trace(
r, item_ordinal);
if (result == -1) { XSRETURN_UNDEF; }
if (result < 0) { croak("problem with r->_marpa_r_earley_item_trace: %s", xs_g_error(r_wrapper->base)); }
XPUSHs( sv_2mortal( newSViv(result) ) );
}
void
_marpa_r_earley_item_origin( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int origin_earleme = _marpa_r_earley_item_origin (r);
if (origin_earleme < 0)
{
croak ("Problem with r->_marpa_r_earley_item_origin(): %s",
xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (origin_earleme)));
}
void
_marpa_r_first_token_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int token_id = _marpa_r_first_token_link_trace(r);
if (token_id <= -2) { croak("Trace first token link problem: %s", xs_g_error(r_wrapper->base)); }
if (token_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(token_id) ) );
}
void
_marpa_r_next_token_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int token_id = _marpa_r_next_token_link_trace(r);
if (token_id <= -2) { croak("Trace next token link problem: %s", xs_g_error(r_wrapper->base)); }
if (token_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(token_id) ) );
}
void
_marpa_r_first_completion_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int AHFA_state_id = _marpa_r_first_completion_link_trace(r);
if (AHFA_state_id <= -2) { croak("Trace first completion link problem: %s", xs_g_error(r_wrapper->base)); }
if (AHFA_state_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(AHFA_state_id) ) );
}
void
_marpa_r_next_completion_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int AHFA_state_id = _marpa_r_next_completion_link_trace(r);
if (AHFA_state_id <= -2) { croak("Trace next completion link problem: %s", xs_g_error(r_wrapper->base)); }
if (AHFA_state_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(AHFA_state_id) ) );
}
void
_marpa_r_first_leo_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int AHFA_state_id = _marpa_r_first_leo_link_trace(r);
if (AHFA_state_id <= -2) { croak("Trace first completion link problem: %s", xs_g_error(r_wrapper->base)); }
if (AHFA_state_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(AHFA_state_id) ) );
}
void
_marpa_r_next_leo_link_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int AHFA_state_id = _marpa_r_next_leo_link_trace(r);
if (AHFA_state_id <= -2) { croak("Trace next completion link problem: %s", xs_g_error(r_wrapper->base)); }
if (AHFA_state_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(AHFA_state_id) ) );
}
void
_marpa_r_source_predecessor_state( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int state_id = _marpa_r_source_predecessor_state(r);
if (state_id <= -2) { croak("Problem finding trace source predecessor state: %s", xs_g_error(r_wrapper->base)); }
if (state_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(state_id) ) );
}
void
_marpa_r_source_leo_transition_symbol( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int symbol_id = _marpa_r_source_leo_transition_symbol(r);
if (symbol_id <= -2) { croak("Problem finding trace source leo transition symbol: %s", xs_g_error(r_wrapper->base)); }
if (symbol_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(symbol_id) ) );
}
void
_marpa_r_source_token( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int value;
int symbol_id = _marpa_r_source_token(r, &value);
if (symbol_id == -1) { XSRETURN_UNDEF; }
if (symbol_id < 0) { croak("Problem with r->source_token(): %s", xs_g_error(r_wrapper->base)); }
XPUSHs( sv_2mortal( newSViv(symbol_id) ) );
XPUSHs( sv_2mortal( newSViv(value) ) );
}
void
_marpa_r_source_middle( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int middle = _marpa_r_source_middle(r);
if (middle <= -2) { croak("Problem with r->source_middle(): %s", xs_g_error(r_wrapper->base)); }
if (middle == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(middle) ) );
}
void
_marpa_r_first_postdot_item_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int postdot_symbol_id = _marpa_r_first_postdot_item_trace(r);
if (postdot_symbol_id <= -2) { croak("Trace first postdot item problem: %s", xs_g_error(r_wrapper->base)); }
if (postdot_symbol_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(postdot_symbol_id) ) );
}
void
_marpa_r_next_postdot_item_trace( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{ struct marpa_r* r = r_wrapper->r;
int postdot_symbol_id = _marpa_r_next_postdot_item_trace(r);
if (postdot_symbol_id <= -2) { croak("Trace next postdot item problem: %s", xs_g_error(r_wrapper->base)); }
if (postdot_symbol_id == -1) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(postdot_symbol_id) ) );
}
void
_marpa_r_postdot_symbol_trace( r_wrapper, symid )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID symid;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int postdot_symbol_id = _marpa_r_postdot_symbol_trace (r, symid);
if (postdot_symbol_id == -1)
{
XSRETURN_UNDEF;
}
if (postdot_symbol_id <= 0)
{
croak ("Problem in r->postdot_symbol_trace: %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (postdot_symbol_id)));
}
void
_marpa_r_leo_base_state( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int leo_base_state = _marpa_r_leo_base_state (r);
if (leo_base_state == -1) { XSRETURN_UNDEF; }
if (leo_base_state < 0) {
croak ("Problem in r->leo_base_state(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (leo_base_state)));
}
void
_marpa_r_leo_top_ahm( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int leo_top_ahm = _marpa_r_leo_top_ahm (r);
if (leo_top_ahm == -1) { XSRETURN_UNDEF; }
if (leo_top_ahm < 0) {
croak ("Problem in r->leo_top_ahm(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (leo_top_ahm)));
}
void
_marpa_r_leo_base_origin( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int leo_base_origin = _marpa_r_leo_base_origin (r);
if (leo_base_origin == -1) { XSRETURN_UNDEF; }
if (leo_base_origin < 0) {
croak ("Problem in r->leo_base_origin(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (leo_base_origin)));
}
void
_marpa_r_trace_earley_set( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int trace_earley_set = _marpa_r_trace_earley_set (r);
if (trace_earley_set < 0) {
croak ("Problem in r->trace_earley_set(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (trace_earley_set)));
}
void
_marpa_r_postdot_item_symbol( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int postdot_item_symbol = _marpa_r_postdot_item_symbol (r);
if (postdot_item_symbol < 0) {
croak ("Problem in r->postdot_item_symbol(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (postdot_item_symbol)));
}
void
_marpa_r_leo_predecessor_symbol( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
struct marpa_r *r = r_wrapper->r;
int leo_predecessor_symbol = _marpa_r_leo_predecessor_symbol (r);
if (leo_predecessor_symbol == -1) { XSRETURN_UNDEF; }
if (leo_predecessor_symbol < 0) {
croak ("Problem in r->leo_predecessor_symbol(): %s", xs_g_error(r_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (leo_predecessor_symbol)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::B
# Move of bocage modules to gp_generate.pl is now complete
void
_marpa_b_and_node_token( b_wrapper, and_node_id )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID and_node_id;
PPCODE:
{
Marpa_Bocage b = b_wrapper->b;
int value = -1;
int result = _marpa_b_and_node_token (b, and_node_id, &value);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::O
# int
void
_marpa_o_and_node_order_get( o_wrapper, or_node_id, and_ix )
O_Wrapper *o_wrapper;
Marpa_Or_Node_ID or_node_id;
int and_ix;
PPCODE:
{
Marpa_Order o = o_wrapper->o;
int result;
result = _marpa_o_and_order_get(o, or_node_id, and_ix);
if (result == -1) { XSRETURN_UNDEF; }
if (result < 0) {
croak ("Problem in o->_marpa_o_and_node_order_get(): %s", xs_g_error(o_wrapper->base));
}
XPUSHs( sv_2mortal( newSViv(result) ) );
}
void
_marpa_o_or_node_and_node_count( o_wrapper, or_node_id )
O_Wrapper *o_wrapper;
Marpa_Or_Node_ID or_node_id;
PPCODE:
{
Marpa_Order o = o_wrapper->o;
int count = _marpa_o_or_node_and_node_count(o, or_node_id);
if (count < 0) { croak("Invalid or node ID %d", or_node_id); }
XPUSHs( sv_2mortal( newSViv(count) ) );
}
void
_marpa_o_or_node_and_node_ids( o_wrapper, or_node_id )
O_Wrapper *o_wrapper;
Marpa_Or_Node_ID or_node_id;
PPCODE:
{
Marpa_Order o = o_wrapper->o;
int count = _marpa_o_or_node_and_node_count(o, or_node_id);
if (count == -1) {
if (GIMME != G_ARRAY) { XSRETURN_NO; }
count = 0; /* will return an empty array */
}
if (count < 0) { croak("Invalid or node ID %d", or_node_id); }
{
int ix;
}
}
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::T
# int
void
_marpa_t_size( t_wrapper )
T_Wrapper *t_wrapper;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_size (t);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_size(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_or_node( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_or_node (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_nook_or_node(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_choice( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_choice (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_nook_choice(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_parent( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_parent (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_nook_parent(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_is_cause( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_is_cause (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_nook_is_cause(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_cause_is_ready( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_cause_is_ready (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_is_predecessor( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_is_predecessor (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
croak ("Problem in t->_marpa_t_nook_is_predecessor(): %s", xs_g_error(t_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (result)));
}
# int
void
_marpa_t_nook_predecessor_is_ready( t_wrapper, nook_id )
T_Wrapper *t_wrapper;
Marpa_Nook_ID nook_id;
PPCODE:
{
Marpa_Tree t = t_wrapper->t;
int result;
result = _marpa_t_nook_predecessor_is_ready (t, nook_id);
if (result == -1)
{
XSRETURN_UNDEF;
}
if (result < 0)
{
}
XPUSHs (sv_2mortal (newSViv (result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::V
void
_marpa_v_trace( v_wrapper, flag )
V_Wrapper *v_wrapper;
int flag;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
int status;
status = _marpa_v_trace (v, flag);
if (status == -1)
{
XSRETURN_UNDEF;
}
if (status < 0)
{
croak ("Problem in v->trace(): %s", xs_g_error(v_wrapper->base));
}
XPUSHs (sv_2mortal (newSViv (status)));
}
void
_marpa_v_nook( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
const Marpa_Value v = v_wrapper->v;
int status;
status = _marpa_v_nook (v);
if (status == -1)
{
XSRETURN_UNDEF;
}
if (status < 0)
{
XPUSHs (sv_2mortal (newSViv (status)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::SLG
void
new( class, l0_sv, g1_sv )
char * class;
SV *l0_sv;
SV *g1_sv;
PPCODE:
{
SV* new_sv;
Scanless_G *slg;
PERL_UNUSED_ARG(class);
if (!sv_isa (l0_sv, "Marpa::R2::Thin::G"))
{
croak ("Problem in u->new(): L0 arg is not of type Marpa::R2::Thin::G");
}
if (!sv_isa (g1_sv, "Marpa::R2::Thin::G"))
}
new_sv = sv_newmortal ();
sv_setref_pv (new_sv, scanless_g_class_name, (void *) slg);
XPUSHs (new_sv);
}
void
DESTROY( slg )
Scanless_G *slg;
PPCODE:
{
unsigned int i = 0;
SvREFCNT_dec (slg->g1_sv);
SvREFCNT_dec (slg->l0_sv);
Safefree (slg->symbol_g_properties);
Safefree (slg->l0_rule_g_properties);
Safefree (slg->g1_lexeme_to_assertion);
SvREFCNT_dec (slg->per_codepoint_hash);
for (i = 0; i < Dim(slg->per_codepoint_array); i++) {
Safefree(slg->per_codepoint_array[i]);
}
Safefree (slg);
}
# it does not create a new one
#
void
g1( slg )
Scanless_G *slg;
PPCODE:
{
/* Not mortalized because,
* held for the length of the scanless object.
*/
XPUSHs (sv_2mortal (SvREFCNT_inc_NN (slg->g1_sv)));
}
void
lexer_rule_to_g1_lexeme_set( slg, lexer_rule, g1_lexeme, assertion_id )
Scanless_G *slg;
Marpa_Rule_ID lexer_rule;
Marpa_Symbol_ID g1_lexeme;
Marpa_Assertion_ID assertion_id;
PPCODE:
{
Marpa_Rule_ID highest_lexer_rule_id;
Marpa_Symbol_ID highest_g1_symbol_id;
Marpa_Assertion_ID highest_assertion_id;
highest_lexer_rule_id = marpa_g_highest_rule_id (slg->l0_wrapper->g);
highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
highest_assertion_id = marpa_g_highest_zwa_id (slg->l0_wrapper->g);
if (slg->precomputed)
{
}
# Mark the symbol as a lexeme.
# A priority is required.
#
void
g1_lexeme_set( slg, g1_lexeme, priority )
Scanless_G *slg;
Marpa_Symbol_ID g1_lexeme;
int priority;
PPCODE:
{
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
if (slg->precomputed)
{
croak
("slg->lexeme_priority_set(%ld, %ld) called after SLG is precomputed",
(long) g1_lexeme, (long) priority);
}
if (g1_lexeme > highest_g1_symbol_id)
{
}
slg->symbol_g_properties[g1_lexeme].priority = priority;
slg->symbol_g_properties[g1_lexeme].is_lexeme = 1;
XSRETURN_YES;
}
void
g1_lexeme_priority( slg, g1_lexeme )
Scanless_G *slg;
Marpa_Symbol_ID g1_lexeme;
PPCODE:
{
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
if (g1_lexeme > highest_g1_symbol_id)
{
croak
("Problem in slg->g1_lexeme_priority(%ld): symbol ID was %ld, but highest G1 symbol ID = %ld",
(long) g1_lexeme,
(long) g1_lexeme,
(long) highest_g1_symbol_id
);
(long) g1_lexeme);
}
XSRETURN_IV( slg->symbol_g_properties[g1_lexeme].priority);
}
void
g1_lexeme_pause_set( slg, g1_lexeme, pause )
Scanless_G *slg;
Marpa_Symbol_ID g1_lexeme;
int pause;
PPCODE:
{
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
struct symbol_g_properties * g_properties = slg->symbol_g_properties + g1_lexeme;
if (slg->precomputed)
{
croak
("slg->lexeme_pause_set(%ld, %ld) called after SLG is precomputed",
(long) g1_lexeme, (long) pause);
}
if (g1_lexeme > highest_g1_symbol_id)
(long) pause);
}
XSRETURN_YES;
}
void
g1_lexeme_pause_activate( slg, g1_lexeme, activate )
Scanless_G *slg;
Marpa_Symbol_ID g1_lexeme;
int activate;
PPCODE:
{
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
struct symbol_g_properties *g_properties =
slg->symbol_g_properties + g1_lexeme;
if (slg->precomputed)
{
croak
("slg->lexeme_pause_activate(%ld, %ld) called after SLG is precomputed",
(long) g1_lexeme, (long) activate);
}
(long) g1_lexeme, (long) activate);
}
XSRETURN_YES;
}
void
discard_event_set( slg, l0_rule_id, boolean )
Scanless_G *slg;
Marpa_Rule_ID l0_rule_id;
int boolean;
PPCODE:
{
Marpa_Rule_ID highest_l0_rule_id = marpa_g_highest_rule_id (slg->l0_wrapper->g);
struct l0_rule_g_properties * g_properties = slg->l0_rule_g_properties + l0_rule_id;
if (slg->precomputed)
{
croak
("slg->discard_event_set(%ld, %ld) called after SLG is precomputed",
(long) l0_rule_id, (long) boolean);
}
if (l0_rule_id > highest_l0_rule_id)
(long) boolean);
}
XSRETURN_YES;
}
void
discard_event_activate( slg, l0_rule_id, activate )
Scanless_G *slg;
Marpa_Rule_ID l0_rule_id;
int activate;
PPCODE:
{
Marpa_Rule_ID highest_l0_rule_id = marpa_g_highest_rule_id (slg->l0_wrapper->g);
struct l0_rule_g_properties *g_properties =
slg->l0_rule_g_properties + l0_rule_id;
if (slg->precomputed)
{
croak
("slg->discard_event_activate(%ld, %ld) called after SLG is precomputed",
(long) l0_rule_id, (long) activate);
}
(long) l0_rule_id, (long) activate);
}
XSRETURN_YES;
}
void
g1_lexeme_latm_set( slg, g1_lexeme, latm )
Scanless_G *slg;
Marpa_Symbol_ID g1_lexeme;
int latm;
PPCODE:
{
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
struct symbol_g_properties * g_properties = slg->symbol_g_properties + g1_lexeme;
if (slg->precomputed)
{
croak
("slg->lexeme_latm_set(%ld, %ld) called after SLG is precomputed",
(long) g1_lexeme, (long) latm);
}
if (g1_lexeme > highest_g1_symbol_id)
("Problem in slg->lexeme_latm(%ld, %ld): value of latm must be 0 or 1",
(long) g1_lexeme,
(long) latm);
}
XSRETURN_YES;
}
void
precompute( slg )
Scanless_G *slg;
PPCODE:
{
/* Currently this routine does nothing except set a flag to
* enforce the * separation of the precomputation phase
* from the main processing.
*/
if (!slg->precomputed)
{
/*
* Ensure that I can call this multiple times safely, even
* if I do some real processing here.
XSRETURN_IV (1);
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::SLR
void
new( class, slg_sv, r1_sv )
char * class;
SV *slg_sv;
SV *r1_sv;
PPCODE:
{
SV *new_sv;
Scanless_R *slr;
Scanless_G *slg;
PERL_UNUSED_ARG(class);
if (!sv_isa (slg_sv, "Marpa::R2::Thin::SLG"))
{
croak
("Problem in u->new(): slg arg is not of type Marpa::R2::Thin::SLG");
slr->gift = marpa__slr_new();
new_sv = sv_newmortal ();
sv_setref_pv (new_sv, scanless_r_class_name, (void *) slr);
XPUSHs (new_sv);
}
void
DESTROY( slr )
Scanless_R *slr;
PPCODE:
{
const Marpa_Recce r0 = slr->r0;
if (r0)
{
marpa_r_unref (r0);
}
marpa__slr_unref(slr->gift);
Safefree(slr->pos_db);
{
SvREFCNT_dec ((SV *) slr->token_values);
}
SvREFCNT_dec (slr->input);
Safefree (slr);
}
void throw_set(slr, throw_setting)
Scanless_R *slr;
int throw_setting;
PPCODE:
{
slr->throw = throw_setting;
}
void
trace_lexers( slr, new_level )
Scanless_R *slr;
int new_level;
PPCODE:
{
IV old_level = slr->trace_lexers;
slr->trace_lexers = new_level;
if (new_level)
{
warn
("Setting trace_lexers to %ld; was %ld",
(long) new_level, (long) old_level);
}
XSRETURN_IV (old_level);
}
void
trace_terminals( slr, new_level )
Scanless_R *slr;
int new_level;
PPCODE:
{
IV old_level = slr->trace_terminals;
slr->trace_terminals = new_level;
XSRETURN_IV(old_level);
}
void
earley_item_warning_threshold( slr )
Scanless_R *slr;
PPCODE:
{
XSRETURN_IV(slr->too_many_earley_items);
}
void
earley_item_warning_threshold_set( slr, too_many_earley_items )
Scanless_R *slr;
int too_many_earley_items;
PPCODE:
{
slr->too_many_earley_items = too_many_earley_items;
}
# Always returns the same SV for a given Scanless recce object --
# it does not create a new one
#
void
g1( slr )
Scanless_R *slr;
PPCODE:
{
XPUSHs (sv_2mortal (SvREFCNT_inc_NN ( slr->r1_wrapper->base_sv)));
}
void
pos( slr )
Scanless_R *slr;
PPCODE:
{
XSRETURN_IV(slr->perl_pos);
}
void
pos_set( slr, start_pos, length )
Scanless_R *slr;
int start_pos;
int length;
PPCODE:
{
u_pos_set(slr, "slr->pos_set", start_pos, length);
slr->lexer_start_pos = slr->perl_pos;
XSRETURN_YES;
}
void
substring(slr, start_pos, length)
Scanless_R *slr;
int start_pos;
int length;
PPCODE:
{
SV* literal_sv = u_substring(slr, "slr->substring()", start_pos, length);
XPUSHs (sv_2mortal (literal_sv));
}
# An internal function for converting an Earley set span to
# one in terms of the input locations.
# This is only meaningful in the context of an SLR
void
_es_to_literal_span(slr, start_earley_set, length)
Scanless_R *slr;
Marpa_Earley_Set_ID start_earley_set;
int length;
PPCODE:
{
int literal_start;
int literal_length;
const Marpa_Recce r1 = slr->r1;
const Marpa_Earley_Set_ID latest_earley_set =
marpa_r_latest_earley_set (r1);
if (start_earley_set < 0 || start_earley_set > latest_earley_set)
{
croak
("_es_to_literal_span: earley set is %d, must be between 0 and %d",
slr_es_to_literal_span (slr,
start_earley_set, length,
&literal_start, &literal_length);
XPUSHs (sv_2mortal (newSViv ((IV) literal_start)));
XPUSHs (sv_2mortal (newSViv ((IV) literal_length)));
}
void
read(slr)
Scanless_R *slr;
PPCODE:
{
int lexer_read_result = 0;
const int trace_lexers = slr->trace_lexers;
if (slr->is_external_scanning)
{
XSRETURN_PV ("unpermitted mix of external and internal scanning");
}
slr->lexer_read_result = 0;
}
/* Never reached */
XSRETURN_PV ("");
}
void
lexer_read_result (slr)
Scanless_R *slr;
PPCODE:
{
XPUSHs (sv_2mortal (newSViv ((IV) slr->lexer_read_result)));
}
void
r1_earleme_complete_result (slr)
Scanless_R *slr;
PPCODE:
{
XPUSHs (sv_2mortal (newSViv ((IV) slr->r1_earleme_complete_result)));
}
void
pause_span (slr)
Scanless_R *slr;
PPCODE:
{
Marpa_Symbol_ID pause_lexeme = slr->pause_lexeme;
if (pause_lexeme < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv ((IV) slr->start_of_pause_lexeme)));
XPUSHs (sv_2mortal
(newSViv
((IV) slr->end_of_pause_lexeme - slr->start_of_pause_lexeme)));
}
void
pause_lexeme (slr)
Scanless_R *slr;
PPCODE:
{
Marpa_Symbol_ID pause_lexeme = slr->pause_lexeme;
if (pause_lexeme < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv ((IV) pause_lexeme)));
}
void
events(slr)
Scanless_R *slr;
PPCODE:
{
int i;
int queue_length;
AV *const event_queue_av = slr->r1_wrapper->event_queue;
for (i = 0; i < slr->gift->t_event_count; i++)
{
union marpa_slr_event_s *const slr_event = slr->gift->t_events + i;
const int event_type = MARPA_SLREV_TYPE (slr_event);
{
SV *event = av_shift (event_queue_av);
XPUSHs (sv_2mortal (event));
}
}
void
span(slr, earley_set)
Scanless_R *slr;
IV earley_set;
PPCODE:
{
int start_position;
int length;
slr_es_to_span(slr, earley_set, &start_position, &length);
XPUSHs (sv_2mortal (newSViv ((IV) start_position)));
XPUSHs (sv_2mortal (newSViv ((IV) length)));
}
void
lexeme_span (slr)
Scanless_R *slr;
PPCODE:
{
STRLEN length = slr->end_of_lexeme - slr->start_of_lexeme;
XPUSHs (sv_2mortal (newSViv ((IV) slr->start_of_lexeme)));
XPUSHs (sv_2mortal (newSViv ((IV) length)));
}
# Return values are 1-based, as is the tradition
# EOF is reported as the last line, last column plus one.
void
line_column(slr, pos)
Scanless_R *slr;
IV pos;
PPCODE:
{
int line = 1;
int column = 1;
int linecol;
int at_eof = 0;
const int logical_size = slr->pos_db_logical_size;
if (pos < 0)
{
pos = slr->perl_pos;
# because there seems to be no
# easy, forward-compatible way
# to determine whether the de-referenced value will cause
# a "bizarre copy" error.
#
# All errors are returned, not thrown
void
g1_alternative (slr, symbol_id, ...)
Scanless_R *slr;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
int result;
int token_ix;
switch (items)
{
case 2:
token_ix = TOKEN_VALUE_IS_LITERAL; /* default */
break;
case 3:
{
}
XSRETURN_IV (result);
}
# Returns current position on success, 0 on unthrown failure
void
g1_lexeme_complete (slr, start_pos_arg, lexeme_length_arg)
Scanless_R *slr;
int start_pos_arg;
int lexeme_length_arg;
PPCODE:
{
int result;
const int input_length = slr->pos_db_logical_size;
int start_pos = start_pos_arg;
int lexeme_length = lexeme_length_arg;
/* User intervention resets last |perl_pos| */
slr->last_perl_pos = -1;
start_pos = start_pos < 0 ? input_length + start_pos : start_pos;
xs_g_error (slr->g1_wrapper));
}
XSRETURN_IV (0);
}
void
discard_event_activate( slr, l0_rule_id, reactivate )
Scanless_R *slr;
Marpa_Rule_ID l0_rule_id;
int reactivate;
PPCODE:
{
struct l0_rule_r_properties *l0_rule_r_properties;
const Scanless_G *slg = slr->slg;
const Marpa_Rule_ID highest_l0_rule_id = marpa_g_highest_rule_id (slg->l0_wrapper->g);
if (l0_rule_id > highest_l0_rule_id)
{
croak
("Problem in slr->discard_event_activate(..., %ld, %ld): rule ID was %ld, but highest L0 rule ID = %ld",
(long) l0_rule_id, (long) reactivate,
(long) l0_rule_id, (long) highest_l0_rule_id);
(long) l0_rule_id, (long) reactivate, (long) reactivate);
}
XPUSHs (sv_2mortal (newSViv (reactivate)));
}
void
lexeme_event_activate( slr, g1_lexeme_id, reactivate )
Scanless_R *slr;
Marpa_Symbol_ID g1_lexeme_id;
int reactivate;
PPCODE:
{
struct symbol_r_properties *symbol_r_properties;
const Scanless_G *slg = slr->slg;
const Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
if (g1_lexeme_id > highest_g1_symbol_id)
{
croak
("Problem in slr->lexeme_event_activate(..., %ld, %ld): symbol ID was %ld, but highest G1 symbol ID = %ld",
(long) g1_lexeme_id, (long) reactivate,
(long) g1_lexeme_id, (long) highest_g1_symbol_id);
croak
("Problem in slr->lexeme_event_activate(..., %ld, %ld): reactivate flag is %ld, a disallowed value",
(long) g1_lexeme_id, (long) reactivate, (long) reactivate);
}
XPUSHs (sv_2mortal (newSViv (reactivate)));
}
void
problem_pos( slr )
Scanless_R *slr;
PPCODE:
{
if (slr->problem_pos < 0) {
XSRETURN_UNDEF;
}
XSRETURN_IV(slr->problem_pos);
}
void
lexer_latest_earley_set( slr )
Scanless_R *slr;
PPCODE:
{
const Marpa_Recce r0 = slr->r0;
if (!r0)
{
XSRETURN_UNDEF;
}
XSRETURN_IV (marpa_r_latest_earley_set (r0));
}
void
lexer_progress_report_start( slr, ordinal )
Scanless_R *slr;
Marpa_Earley_Set_ID ordinal;
PPCODE:
{
int gp_result;
G_Wrapper* lexer_wrapper;
const Marpa_Recognizer recce = slr->r0;
if (!recce)
{
croak ("Problem in r->progress_item(): No lexer recognizer");
}
lexer_wrapper = slr->slg->l0_wrapper;
gp_result = marpa_r_progress_report_start(recce, ordinal);
if ( gp_result < 0 && lexer_wrapper->throw ) {
croak( "Problem in r->progress_report_start(%d): %s",
ordinal, xs_g_error( lexer_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
lexer_progress_report_finish( slr )
Scanless_R *slr;
PPCODE:
{
int gp_result;
G_Wrapper* lexer_wrapper;
const Marpa_Recognizer recce = slr->r0;
if (!recce)
{
croak ("Problem in r->progress_item(): No lexer recognizer");
}
lexer_wrapper = slr->slg->l0_wrapper;
gp_result = marpa_r_progress_report_finish(recce);
if ( gp_result < 0 && lexer_wrapper->throw ) {
croak( "Problem in r->progress_report_finish(): %s",
xs_g_error( lexer_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
lexer_progress_item( slr )
Scanless_R *slr;
PPCODE:
{
Marpa_Rule_ID rule_id;
Marpa_Earley_Set_ID origin = -1;
int position = -1;
G_Wrapper* lexer_wrapper;
const Marpa_Recognizer recce = slr->r0;
if (!recce)
{
croak ("Problem in r->progress_item(): No lexer recognizer");
}
}
XPUSHs (sv_2mortal (newSViv (rule_id)));
XPUSHs (sv_2mortal (newSViv (position)));
XPUSHs (sv_2mortal (newSViv (origin)));
}
void
string_set( slr, string )
Scanless_R *slr;
SVREF string;
PPCODE:
{
U8 *p;
U8 *start_of_string;
U8 *end_of_string;
int input_is_utf8;
/* Initialized to a Unicode non-character. In fact, anything
* but a CR would work here.
*/
UV previous_codepoint = 0xFDD0;
}
slr->pos_db_logical_size++;
previous_codepoint = codepoint;
}
XSRETURN_YES;
}
void
input_length( slr )
Scanless_R *slr;
PPCODE:
{
XSRETURN_IV(slr->pos_db_logical_size);
}
void
codepoint( slr )
Scanless_R *slr;
PPCODE:
{
XSRETURN_UV(slr->codepoint);
}
void
symbol_id( slr )
Scanless_R *slr;
PPCODE:
{
XSRETURN_IV(slr->input_symbol_id);
}
void
char_register( slr, codepoint, ... )
Scanless_R *slr;
UV codepoint;
PPCODE:
{
/* OP Count is args less two, then plus two for codepoint and length fields */
const STRLEN op_count = items;
STRLEN op_ix;
IV *ops;
SV *ops_sv = NULL;
const unsigned array_size = Dim (slr->slg->per_codepoint_array);
const int use_array = codepoint < array_size;
if (use_array)
(void)hv_store (slr->slg->per_codepoint_hash, (char *) &codepoint,
sizeof (codepoint), ops_sv, 0);
}
}
# Untested
void
lexeme_priority( slr, g1_lexeme )
Scanless_R *slr;
Marpa_Symbol_ID g1_lexeme;
PPCODE:
{
const Scanless_G *slg = slr->slg;
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
if (g1_lexeme > highest_g1_symbol_id)
{
croak
("Problem in slr->g1_lexeme_priority(%ld): symbol ID was %ld, but highest G1 symbol ID = %ld",
(long) g1_lexeme,
(long) g1_lexeme,
(long) highest_g1_symbol_id
(long) g1_lexeme);
}
XSRETURN_IV( slr->symbol_r_properties[g1_lexeme].lexeme_priority);
}
void
lexeme_priority_set( slr, g1_lexeme, new_priority )
Scanless_R *slr;
Marpa_Symbol_ID g1_lexeme;
int new_priority;
PPCODE:
{
int old_priority;
const Scanless_G *slg = slr->slg;
Marpa_Symbol_ID highest_g1_symbol_id = marpa_g_highest_symbol_id (slg->g1);
if (g1_lexeme > highest_g1_symbol_id)
{
croak
("Problem in slr->g1_lexeme_priority(%ld): symbol ID was %ld, but highest G1 symbol ID = %ld",
(long) g1_lexeme,
(long) g1_lexeme,
xs/general_pattern.xsh view on Meta::CPAN
# Generated automatically by gp_generate.pl
# NOTE: Changes made to this file will be lost: look at gp_generate.pl.
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::G
void
completion_symbol_activate( g_wrapper, sym_id, activate )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int activate;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_completion_symbol_activate(self, sym_id, activate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->completion_symbol_activate(%d, %d): %s",
sym_id, activate, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
error_clear( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_error_clear(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->error_clear(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
event_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_event_count(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->event_count(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
force_valued( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_force_valued(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->force_valued(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
has_cycle( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_has_cycle(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->has_cycle(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
highest_rule_id( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_highest_rule_id(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->highest_rule_id(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
highest_symbol_id( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_highest_symbol_id(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->highest_symbol_id(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
is_precomputed( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_is_precomputed(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->is_precomputed(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
nulled_symbol_activate( g_wrapper, sym_id, activate )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int activate;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_nulled_symbol_activate(self, sym_id, activate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->nulled_symbol_activate(%d, %d): %s",
sym_id, activate, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
precompute( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_precompute(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->precompute(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
prediction_symbol_activate( g_wrapper, sym_id, activate )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int activate;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_prediction_symbol_activate(self, sym_id, activate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->prediction_symbol_activate(%d, %d): %s",
sym_id, activate, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_accessible( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_accessible(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_accessible(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_loop( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_loop(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_loop(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_nullable( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_nullable(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_nullable(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_nulling( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_nulling(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_nulling(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_productive( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_productive(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_productive(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_proper_separation( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_is_proper_separation(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_is_proper_separation(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_length( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_length(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_length(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_lhs( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_lhs(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_lhs(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_null_high( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_null_high(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_null_high(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_null_high_set( g_wrapper, rule_id, flag )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
int flag;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_null_high_set(self, rule_id, flag);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_null_high_set(%d, %d): %s",
rule_id, flag, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_rhs( g_wrapper, rule_id, ix )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
int ix;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_rule_rhs(self, rule_id, ix);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->rule_rhs(%d, %d): %s",
rule_id, ix, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
sequence_min( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_sequence_min(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->sequence_min(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
sequence_separator( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_sequence_separator(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->sequence_separator(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
start_symbol( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_start_symbol(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->start_symbol(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
start_symbol_set( g_wrapper, id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_start_symbol_set(self, id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->start_symbol_set(%d): %s",
id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_accessible( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_accessible(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_accessible(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_completion_event( g_wrapper, sym_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_completion_event(self, sym_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_completion_event(%d): %s",
sym_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_completion_event_set( g_wrapper, sym_id, value )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int value;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_completion_event_set(self, sym_id, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_completion_event_set(%d, %d): %s",
sym_id, value, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_counted( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_counted(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_counted(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_nullable( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_nullable(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_nullable(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_nulled_event( g_wrapper, sym_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_nulled_event(self, sym_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_nulled_event(%d): %s",
sym_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_nulled_event_set( g_wrapper, sym_id, value )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int value;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_nulled_event_set(self, sym_id, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_nulled_event_set(%d, %d): %s",
sym_id, value, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_nulling( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_nulling(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_nulling(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_prediction_event( g_wrapper, sym_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_prediction_event(self, sym_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_prediction_event(%d): %s",
sym_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_prediction_event_set( g_wrapper, sym_id, value )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID sym_id;
int value;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_prediction_event_set(self, sym_id, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_prediction_event_set(%d, %d): %s",
sym_id, value, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_productive( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_productive(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_productive(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_start( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_start(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_start(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_terminal( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_terminal(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_terminal(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_terminal_set( g_wrapper, symbol_id, boolean )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
int boolean;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_terminal_set(self, symbol_id, boolean);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_terminal_set(%d, %d): %s",
symbol_id, boolean, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_valued( g_wrapper, symbol_id )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_valued(self, symbol_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_valued(%d): %s",
symbol_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_valued_set( g_wrapper, symbol_id, boolean )
G_Wrapper *g_wrapper;
Marpa_Symbol_ID symbol_id;
int boolean;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_is_valued_set(self, symbol_id, boolean);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_is_valued_set(%d, %d): %s",
symbol_id, boolean, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_new( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_symbol_new(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->symbol_new(): %s",
xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
zwa_new( g_wrapper, default_value )
G_Wrapper *g_wrapper;
int default_value;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_zwa_new(self, default_value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->zwa_new(%d): %s",
default_value, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
zwa_place( g_wrapper, zwaid, xrl_id, rhs_ix )
G_Wrapper *g_wrapper;
Marpa_Assertion_ID zwaid;
Marpa_Rule_ID xrl_id;
int rhs_ix;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = marpa_g_zwa_place(self, zwaid, xrl_id, rhs_ix);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->zwa_place(%d, %d, %d): %s",
zwaid, xrl_id, rhs_ix, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::R
void
completion_symbol_activate( r_wrapper, sym_id, reactivate )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID sym_id;
int reactivate;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_completion_symbol_activate(self, sym_id, reactivate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->completion_symbol_activate(%d, %d): %s",
sym_id, reactivate, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
current_earleme( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_current_earleme(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->current_earleme(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
earleme( r_wrapper, ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID ordinal;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_earleme(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->earleme(%d): %s",
ordinal, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
earleme_complete( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_earleme_complete(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->earleme_complete(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
earley_item_warning_threshold( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_earley_item_warning_threshold(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->earley_item_warning_threshold(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
earley_item_warning_threshold_set( r_wrapper, too_many_earley_items )
R_Wrapper *r_wrapper;
int too_many_earley_items;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_earley_item_warning_threshold_set(self, too_many_earley_items);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->earley_item_warning_threshold_set(%d): %s",
too_many_earley_items, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
earley_set_value( r_wrapper, ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID ordinal;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_earley_set_value(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->earley_set_value(%d): %s",
ordinal, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
expected_symbol_event_set( r_wrapper, xsyid, value )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID xsyid;
int value;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_expected_symbol_event_set(self, xsyid, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->expected_symbol_event_set(%d, %d): %s",
xsyid, value, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
furthest_earleme( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_furthest_earleme(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->furthest_earleme(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
is_exhausted( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_is_exhausted(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->is_exhausted(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
latest_earley_set( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_latest_earley_set(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->latest_earley_set(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
latest_earley_set_value_set( r_wrapper, value )
R_Wrapper *r_wrapper;
int value;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_latest_earley_set_value_set(self, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->latest_earley_set_value_set(%d): %s",
value, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
nulled_symbol_activate( r_wrapper, sym_id, reactivate )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID sym_id;
int reactivate;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_nulled_symbol_activate(self, sym_id, reactivate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->nulled_symbol_activate(%d, %d): %s",
sym_id, reactivate, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
prediction_symbol_activate( r_wrapper, sym_id, reactivate )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID sym_id;
int reactivate;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_prediction_symbol_activate(self, sym_id, reactivate);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->prediction_symbol_activate(%d, %d): %s",
sym_id, reactivate, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
progress_report_finish( r_wrapper )
R_Wrapper *r_wrapper;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_progress_report_finish(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->progress_report_finish(): %s",
xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
progress_report_start( r_wrapper, ordinal )
R_Wrapper *r_wrapper;
Marpa_Earley_Set_ID ordinal;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_progress_report_start(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->progress_report_start(%d): %s",
ordinal, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
terminal_is_expected( r_wrapper, xsyid )
R_Wrapper *r_wrapper;
Marpa_Symbol_ID xsyid;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_terminal_is_expected(self, xsyid);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->terminal_is_expected(%d): %s",
xsyid, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
zwa_default( r_wrapper, zwaid )
R_Wrapper *r_wrapper;
Marpa_Assertion_ID zwaid;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_zwa_default(self, zwaid);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->zwa_default(%d): %s",
zwaid, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
zwa_default_set( r_wrapper, zwaid, default_value )
R_Wrapper *r_wrapper;
Marpa_Assertion_ID zwaid;
int default_value;
PPCODE:
{
Marpa_Recognizer self = r_wrapper->r;
int gp_result = marpa_r_zwa_default_set(self, zwaid, default_value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && r_wrapper->base->throw ) {
croak( "Problem in r->zwa_default_set(%d, %d): %s",
zwaid, default_value, xs_g_error( r_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::B
void
ambiguity_metric( b_wrapper )
B_Wrapper *b_wrapper;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = marpa_b_ambiguity_metric(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->ambiguity_metric(): %s",
xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
is_null( b_wrapper )
B_Wrapper *b_wrapper;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = marpa_b_is_null(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->is_null(): %s",
xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::O
void
ambiguity_metric( o_wrapper )
O_Wrapper *o_wrapper;
PPCODE:
{
Marpa_Order self = o_wrapper->o;
int gp_result = marpa_o_ambiguity_metric(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && o_wrapper->base->throw ) {
croak( "Problem in o->ambiguity_metric(): %s",
xs_g_error( o_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
high_rank_only_set( o_wrapper, flag )
O_Wrapper *o_wrapper;
int flag;
PPCODE:
{
Marpa_Order self = o_wrapper->o;
int gp_result = marpa_o_high_rank_only_set(self, flag);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && o_wrapper->base->throw ) {
croak( "Problem in o->high_rank_only_set(%d): %s",
flag, xs_g_error( o_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
high_rank_only( o_wrapper )
O_Wrapper *o_wrapper;
PPCODE:
{
Marpa_Order self = o_wrapper->o;
int gp_result = marpa_o_high_rank_only(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && o_wrapper->base->throw ) {
croak( "Problem in o->high_rank_only(): %s",
xs_g_error( o_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
is_null( o_wrapper )
O_Wrapper *o_wrapper;
PPCODE:
{
Marpa_Order self = o_wrapper->o;
int gp_result = marpa_o_is_null(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && o_wrapper->base->throw ) {
croak( "Problem in o->is_null(): %s",
xs_g_error( o_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rank( o_wrapper )
O_Wrapper *o_wrapper;
PPCODE:
{
Marpa_Order self = o_wrapper->o;
int gp_result = marpa_o_rank(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && o_wrapper->base->throw ) {
croak( "Problem in o->rank(): %s",
xs_g_error( o_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::T
void
next( t_wrapper )
T_Wrapper *t_wrapper;
PPCODE:
{
Marpa_Tree self = t_wrapper->t;
int gp_result = marpa_t_next(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && t_wrapper->base->throw ) {
croak( "Problem in t->next(): %s",
xs_g_error( t_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
parse_count( t_wrapper )
T_Wrapper *t_wrapper;
PPCODE:
{
Marpa_Tree self = t_wrapper->t;
int gp_result = marpa_t_parse_count(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && t_wrapper->base->throw ) {
croak( "Problem in t->parse_count(): %s",
xs_g_error( t_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::V
void
valued_force( v_wrapper )
V_Wrapper *v_wrapper;
PPCODE:
{
Marpa_Value self = v_wrapper->v;
int gp_result = marpa_v_valued_force(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && v_wrapper->base->throw ) {
croak( "Problem in v->valued_force(): %s",
xs_g_error( v_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
rule_is_valued_set( v_wrapper, symbol_id, value )
V_Wrapper *v_wrapper;
Marpa_Rule_ID symbol_id;
int value;
PPCODE:
{
Marpa_Value self = v_wrapper->v;
int gp_result = marpa_v_rule_is_valued_set(self, symbol_id, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && v_wrapper->base->throw ) {
croak( "Problem in v->rule_is_valued_set(%d, %d): %s",
symbol_id, value, xs_g_error( v_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
symbol_is_valued_set( v_wrapper, symbol_id, value )
V_Wrapper *v_wrapper;
Marpa_Symbol_ID symbol_id;
int value;
PPCODE:
{
Marpa_Value self = v_wrapper->v;
int gp_result = marpa_v_symbol_is_valued_set(self, symbol_id, value);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && v_wrapper->base->throw ) {
croak( "Problem in v->symbol_is_valued_set(%d, %d): %s",
symbol_id, value, xs_g_error( v_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::G
void
_marpa_g_rule_is_keep_separation( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_rule_is_keep_separation(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_rule_is_keep_separation(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_irl_lhs( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_irl_lhs(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_irl_lhs(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_irl_rhs( g_wrapper, rule_id, ix )
G_Wrapper *g_wrapper;
Marpa_IRL_ID rule_id;
int ix;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_irl_rhs(self, rule_id, ix);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_irl_rhs(%d, %d): %s",
rule_id, ix, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_irl_length( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID rule_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_irl_length(self, rule_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_irl_length(%d): %s",
rule_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_irl_rank( g_wrapper, irl_id )
G_Wrapper *g_wrapper;
Marpa_IRL_ID irl_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_irl_rank(self, irl_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_irl_rank(%d): %s",
irl_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_nsy_rank( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_nsy_rank(self, nsy_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_nsy_rank(%d): %s",
nsy_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_g_nsy_is_semantic( g_wrapper, nsy_id )
G_Wrapper *g_wrapper;
Marpa_NSY_ID nsy_id;
PPCODE:
{
Marpa_Grammar self = g_wrapper->g;
int gp_result = _marpa_g_nsy_is_semantic(self, nsy_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && g_wrapper->throw ) {
croak( "Problem in g->_marpa_g_nsy_is_semantic(%d): %s",
nsy_id, xs_g_error( g_wrapper ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::B
void
_marpa_b_and_node_cause( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_cause(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_cause(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_and_node_count( b_wrapper )
B_Wrapper *b_wrapper;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_count(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_count(): %s",
xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_and_node_middle( b_wrapper, and_node_id )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID and_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_middle(self, and_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_middle(%d): %s",
and_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_and_node_parent( b_wrapper, and_node_id )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID and_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_parent(self, and_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_parent(%d): %s",
and_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_and_node_predecessor( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_predecessor(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_predecessor(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_and_node_symbol( b_wrapper, and_node_id )
B_Wrapper *b_wrapper;
Marpa_And_Node_ID and_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_and_node_symbol(self, and_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_and_node_symbol(%d): %s",
and_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_and_count( b_wrapper, or_node_id )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID or_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_and_count(self, or_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_and_count(%d): %s",
or_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_first_and( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_first_and(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_first_and(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_irl( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_irl(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_irl(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_is_semantic( b_wrapper, or_node_id )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID or_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_is_semantic(self, or_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_is_semantic(%d): %s",
or_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_is_whole( b_wrapper, or_node_id )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID or_node_id;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_is_whole(self, or_node_id);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_is_whole(%d): %s",
or_node_id, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_last_and( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_last_and(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_last_and(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_origin( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_origin(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_origin(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_position( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_position(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_position(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_or_node_set( b_wrapper, ordinal )
B_Wrapper *b_wrapper;
Marpa_Or_Node_ID ordinal;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_or_node_set(self, ordinal);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_or_node_set(%d): %s",
ordinal, xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
void
_marpa_b_top_or_node( b_wrapper )
B_Wrapper *b_wrapper;
PPCODE:
{
Marpa_Bocage self = b_wrapper->b;
int gp_result = _marpa_b_top_or_node(self);
if ( gp_result == -1 ) { XSRETURN_UNDEF; }
if ( gp_result < 0 && b_wrapper->base->throw ) {
croak( "Problem in b->_marpa_b_top_or_node(): %s",
xs_g_error( b_wrapper->base ));
}
XPUSHs (sv_2mortal (newSViv (gp_result)));
}
xs/gp_generate.pl view on Meta::CPAN
push @args, $arg_type_pairs[ $i + 1 ];
}
$output
.= "$function( " . ( join q{, }, $wrapper_variable, @args ) . " )\n";
$output .= " $wrapper_type *$wrapper_variable;\n";
ARG: for ( my $i = 0; $i < $#arg_type_pairs; $i += 2 ) {
$output .= q{ };
$output .= join q{ }, @arg_type_pairs[ $i .. $i + 1 ];
$output .= ";\n";
}
$output .= "PPCODE:\n";
$output .= "{\n";
$output
.= " $main::LIBMARPA_CLASS self = $wrapper_variable->$main::CLASS_LETTER;\n";
$output .= " int gp_result = $libmarpa_method("
. ( join q{, }, 'self', @args ) . ");\n";
$output .= " if ( gp_result == -1 ) { XSRETURN_UNDEF; }\n";
$output .= " if ( gp_result < 0 && $base->throw ) {\n";
my @format = ();
my @variables = ();
ARG: for ( my $i = 0; $i < $#arg_type_pairs; $i += 2 ) {
( run in 0.874 second using v1.01-cache-2.11-cpan-5511b514fd6 )