if (result == 0)
return mid;
- else if (result < 0)
+ if (result < 0)
high = mid;
else
low = mid + 1;
static void bc_program_addFunc(char *name, size_t *idx);
+// Note: takes ownership of 'name' (must be malloced)
static void bc_parse_addFunc(BcParse *p, char *name, size_t *idx)
{
bc_program_addFunc(name, idx);
bc_parse_pushIndex(p, idx);
}
-static void bc_parse_number(BcParse *p)
+static void bc_parse_pushNUM(BcParse *p)
{
char *num = xstrdup(p->l.t.v.v);
size_t idx = G.prog.consts.len;
}
#define zbc_parse_params(...) (zbc_parse_params(__VA_ARGS__) COMMA_SUCCESS)
+// Note: takes ownership of 'name' (must be malloced)
static BC_STATUS zbc_parse_call(BcParse *p, char *name, uint8_t flags)
{
BcStatus s;
idx = bc_map_index(&G.prog.fn_map, &entry);
if (idx == BC_VEC_INVALID_IDX) {
- name = xstrdup(entry.name);
+ // No such function exist, create an empty one
bc_parse_addFunc(p, name, &idx);
idx = bc_map_index(&G.prog.fn_map, &entry);
- free(entry.name);
} else
free(name);
case BC_LEX_NUMBER:
if (BC_PARSE_LEAF(prev, rprn))
return bc_error_bad_expression();
- bc_parse_number(p);
+ bc_parse_pushNUM(p);
nexprs++;
prev = BC_INST_NUM;
paren_expr = get_token = true;
if (p->l.t.t != BC_LEX_NUMBER)
RETURN_STATUS(bc_error_bad_token());
}
- bc_parse_number(p);
+ bc_parse_pushNUM(p);
if (t == BC_LEX_NEG) bc_parse_push(p, BC_INST_NEG);
get_token = true;
break;
break;
case BC_RESULT_CONSTANT: {
BcStatus s;
- char **str = bc_vec_item(&G.prog.consts, r->d.id.idx);
+ char *str = *(char**)bc_vec_item(&G.prog.consts, r->d.id.idx);
unsigned base_t;
- size_t len = strlen(*str);
+ size_t len = strlen(str);
bc_num_init(&r->d.n, len);
hex = hex && len == 1;
base_t = hex ? 16 : G.prog.ib_t;
- s = zbc_num_parse(&r->d.n, *str, base_t);
+ s = zbc_num_parse(&r->d.n, str, base_t);
if (s) {
bc_num_free(&r->d.n);
bc_vec_push(&G.prog.results, &res);
}
+// Note: takes ownership of 'name' (must be malloced)
static void bc_program_addFunc(char *name, size_t *idx)
{
BcId entry, *entry_ptr;