Skip to content

Commit

Permalink
Optimizing computation of token literals: t+
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeffrey Kegler committed Mar 13, 2013
1 parent 76d1847 commit b0c0cb9
Showing 1 changed file with 44 additions and 46 deletions.
90 changes: 44 additions & 46 deletions r2/xs/R2.xs
Original file line number Diff line number Diff line change
Expand Up @@ -1191,53 +1191,51 @@ v_do_stack_ops (V_Wrapper * v_wrapper, SV ** stack_results)
goto NEXT_OP_CODE;

case op_push_length:
{
int length;
Scanless_R *slr = v_wrapper->slr;
{
int length;
Scanless_R *slr = v_wrapper->slr;

if (!values_av)
{
values_av = (AV *) sv_2mortal ((SV *) newAV ());
}
if (!slr)
{
croak
("Problem in v->stack_step: 'push_length' op attempted when no slr is set");
}
switch (step_type)
{
case MARPA_STEP_NULLING_SYMBOL:
length = 0;
break;
case MARPA_STEP_RULE:
{
int first_start_location, last_start_location, last_length, dummy;
Marpa_Earley_Set_ID start_earley_set =
marpa_v_rule_start_es_id (v);
Marpa_Earley_Set_ID end_earley_set = marpa_v_es_id (v);
slr_es_to_span (slr, start_earley_set + 1, &first_start_location, &dummy);
slr_es_to_span (slr, end_earley_set, &last_start_location, &last_length);
length = (last_start_location + last_length) - first_start_location;
}
break;
case MARPA_STEP_TOKEN:
{
int first_start_location, last_start_location, last_length, dummy;
Marpa_Earley_Set_ID start_earley_set =
marpa_v_token_start_es_id (v);
Marpa_Earley_Set_ID end_earley_set = marpa_v_es_id (v);
slr_es_to_span (slr, start_earley_set + 1, &first_start_location, &dummy);
slr_es_to_span (slr, end_earley_set, &last_start_location, &last_length);
length = (last_start_location + last_length) - first_start_location;
}
break;
default:
croak
("Problem in v->stack_step: Range requested for improper step type: %s",
step_type_to_string (step_type));
}
av_push (values_av, newSViv ((IV) length));
}
if (!values_av)
{
values_av = (AV *) sv_2mortal ((SV *) newAV ());
}
if (!slr)
{
croak
("Problem in v->stack_step: 'push_length' op attempted when no slr is set");
}
switch (step_type)
{
case MARPA_STEP_NULLING_SYMBOL:
length = 0;
break;
case MARPA_STEP_RULE:
{
int dummy;
Marpa_Earley_Set_ID start_earley_set = marpa_v_rule_start_es_id (v);
Marpa_Earley_Set_ID end_earley_set = marpa_v_es_id (v);
slr_es_to_literal_span (slr, start_earley_set,
end_earley_set - start_earley_set, &dummy,
&length);
}
break;
case MARPA_STEP_TOKEN:
{
int dummy;
Marpa_Earley_Set_ID start_earley_set = marpa_v_token_start_es_id (v);
Marpa_Earley_Set_ID end_earley_set = marpa_v_es_id (v);
slr_es_to_literal_span (slr, start_earley_set,
end_earley_set - start_earley_set, &dummy,
&length);
}
break;
default:
croak
("Problem in v->stack_step: Range requested for improper step type: %s",
step_type_to_string (step_type));
}
av_push (values_av, newSViv ((IV) length));
}
goto NEXT_OP_CODE;

case op_bless:
Expand Down

0 comments on commit b0c0cb9

Please sign in to comment.