Lines Matching defs:p
48 bc_parse_updateFunc(BcParse* p, size_t fidx)
50 p->fidx = fidx;
51 p->func = bc_vec_item(&p->prog->fns, fidx);
55 bc_parse_pushName(const BcParse* p, char* name, bool var)
57 bc_parse_pushIndex(p, bc_program_search(p->prog, name, var));
63 * @param p The parser.
68 bc_parse_pushInstIdx(BcParse* p, uchar inst, size_t idx)
70 bc_parse_push(p, inst);
71 bc_parse_pushIndex(p, idx);
75 bc_parse_addString(BcParse* p)
79 idx = bc_program_addString(p->prog, p->l.str.v);
82 bc_parse_pushInstIdx(p, BC_INST_STR, idx);
86 bc_parse_addNum(BcParse* p, const char* string)
88 BcProgram* prog = p->prog;
105 bc_parse_push(p, BC_INST_ZERO);
112 bc_parse_push(p, BC_INST_ONE);
142 bc_parse_pushInstIdx(p, BC_INST_NUM, idx);
146 bc_parse_number(BcParse* p)
149 char* exp = strchr(p->l.str.v, 'e');
156 idx = ((size_t) (exp - p->l.str.v));
161 bc_parse_addNum(p, p->l.str.v);
170 neg = (*((char*) bc_vec_item(&p->l.str, idx + 1)) == BC_LEX_NEG_CHAR);
173 bc_parse_addNum(p, bc_vec_item(&p->l.str, idx + 1 + neg));
174 bc_parse_push(p, BC_INST_LSHIFT + neg);
180 bc_parse_text(BcParse* p, const char* text, BcMode mode)
185 p->func = bc_vec_item(&p->prog->fns, p->fidx);
186 bc_lex_text(&p->l, text, mode);
192 bc_parse_reset(BcParse* p)
197 if (p->fidx != BC_PROG_MAIN)
199 bc_func_reset(p->func);
200 bc_parse_updateFunc(p, BC_PROG_MAIN);
204 p->l.i = p->l.len;
205 p->l.t = BC_LEX_EOF;
211 p->auto_part = false;
212 bc_vec_npop(&p->flags, p->flags.len - 1);
213 bc_vec_popAll(&p->exits);
214 bc_vec_popAll(&p->conds);
215 bc_vec_popAll(&p->ops);
220 bc_program_reset(p->prog);
228 bc_parse_free(BcParse* p)
232 assert(p != NULL);
237 bc_vec_free(&p->flags);
238 bc_vec_free(&p->exits);
239 bc_vec_free(&p->conds);
240 bc_vec_free(&p->ops);
241 bc_vec_free(&p->buf);
245 bc_lex_free(&p->l);
250 bc_parse_init(BcParse* p, BcProgram* prog, size_t func)
258 assert(p != NULL && prog != NULL);
264 bc_vec_init(&p->flags, sizeof(uint16_t), BC_DTOR_NONE);
265 bc_vec_push(&p->flags, &flag);
267 bc_vec_init(&p->exits, sizeof(BcInstPtr), BC_DTOR_NONE);
268 bc_vec_init(&p->conds, sizeof(size_t), BC_DTOR_NONE);
269 bc_vec_init(&p->ops, sizeof(BcLexType), BC_DTOR_NONE);
270 bc_vec_init(&p->buf, sizeof(char), BC_DTOR_NONE);
272 p->auto_part = false;
276 bc_lex_init(&p->l);
279 p->prog = prog;
280 bc_parse_updateFunc(p, func);