diff --git a/src/parsers/int_range.c b/src/parsers/int_range.c index 49b064218b507ca13d90dcc2ec654c8ae3a9ee19..0e2606515eae6c36c311e172155237f460e8eab0 100644 --- a/src/parsers/int_range.c +++ b/src/parsers/int_range.c @@ -5,6 +5,7 @@ typedef struct { const HParser *p; int64_t lower; int64_t upper; + uint8_t signedp; } HRange; static HParseResult* parse_int_range(void *env, HParseState *state) { @@ -28,11 +29,13 @@ static HParseResult* parse_int_range(void *env, HParseState *state) { } } -void gen_int_range(HAllocator *mm__, HCFStack *stk__, uint64_t low, uint64_t high, uint8_t bytes) { - /* Possible FIXME: TallerThanMe */ +void gen_int_range(HAllocator *mm__, HCFStack *stk__, int64_t low, int64_t high, int8_t bytes) { + /* Possible FIXME: TallerThanMe */ if (1 == bytes) { + printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX low = %ld, high=%ld\n", low, high); HCharset cs = new_charset(mm__); - for (uint64_t i=low; i<=high; ++i) { + for (int64_t i=low; i<=high; ++i) { + printf("CHAR SET WITH %ld\n", i); charset_set(cs, i, 1); } HCFS_ADD_CHARSET(cs); @@ -87,6 +90,8 @@ static void desugar_int_range(HAllocator *mm__, HCFStack *stk__, void *env) { HRange *r = (HRange*)env; struct bits_env* be = (struct bits_env*)r->p->env; uint8_t bytes = be->length / 8; + printf("signedness of desired range: %d\n", r->signedp); + gen_int_range(mm__, stk__, r->lower, r->upper, bytes); } @@ -133,7 +138,13 @@ HParser* h_int_range__m(HAllocator* mm__, const HParser *p, const int64_t lower, HRange *r_env = h_new(HRange, 1); r_env->p = p; + + struct bits_env *underlying_env = (p->env); + printf("signedness of underlying parser: %d\n", underlying_env->signedp); + r_env->signedp = underlying_env->signedp; r_env->lower = lower; r_env->upper = upper; + printf("range setup low = %ld, high=%ld\n", lower, upper); + return h_new_parser(mm__, &int_range_vt, r_env); }