Lines Matching refs:cx

36 cxbeg(Cx_t* cx, register Cxexpr_t* expr, const char* method)
52 if (expr->pass && cxbeg(cx, expr->pass, method))
54 if (expr->fail && cxbeg(cx, expr->fail, method))
58 if (cxbeg(cx, expr->group, method))
63 if (cx->disc->errorf)
64 (*cx->disc->errorf)(cx, cx->disc, 2, "%s: %s: method %s expected", expr->query->name, method, expr->query->method);
76 cx->state->header = (Cxheader_t*)expr->query;
77 cx->expr = expr;
78 r = (*expr->query->beg)(cx, expr, expr->argv, cx->disc);
96 cxend(Cx_t* cx, register Cxexpr_t* expr)
105 if (cxend(cx, expr->group))
110 cx->expr = expr;
111 if ((*expr->query->end)(cx, expr, NiL, cx->disc))
114 if (expr->pass && cxend(cx, expr->pass))
116 if (expr->fail && cxend(cx, expr->fail))
127 execute(Cx_t* cx, Cxexpr_t* expr, register Cxinstruction_t* pc, void* data, Cxoperand_t* rv, Cxdisc_t* disc)
137 sp->type = (sp-1)->type = cx->state->type_void;
143 cx->jump = 1;
144 if (cx->test & 0x0100)
145 cxcodetrace(cx, "eval", pc, pc - pe + 1, expr->stack, sp);
146 if ((i = (*pc->callout)(cx, pc, &r, sp-1, sp, data, disc)) < 0)
157 if (!so->refs && (f = cxcallout(cx, CX_DEL, so->type, cx->state->type_void, disc)) && (*f)(cx, pc, &r, NiL, so, data, disc))
159 pc += cx->jump;
161 if (cx->returnf && pc->op == CX_END && (pc-1)->op != CX_SET)
163 (*cx->returnf)(cx, pc, &r, sp-1, sp, data, disc);
164 if (expr->reclaim && !sp->refs && (f = cxcallout(cx, CX_DEL, sp->type, cx->state->type_void, disc)))
166 (*f)(cx, pc, &r, NiL, sp, data, disc);
167 sp->type = cx->state->type_number;
180 eval(Cx_t* cx, register Cxexpr_t* expr, void* data, Cxoperand_t* rv)
189 cx->expr = expr;
190 if ((t = expr->group ? eval(cx, expr->group, data, rv) : expr->query->sel ? (*expr->query->sel)(cx, expr, data, cx->disc) : expr->query->prog ? execute(cx, expr, expr->query->prog, data, rv, cx->disc) : 1) < 0)
195 cx->expr = expr;
196 if (expr->query->act && (t = (*expr->query->act)(cx, expr, data, cx->disc)) < 0)
198 if (expr->pass && (t = eval(cx, expr->pass, data, rv)) < 0)
201 else if (expr->fail && (t = eval(cx, expr->fail, data, rv)) < 0)
214 cxeval(Cx_t* cx, register Cxexpr_t* expr, void* data, Cxoperand_t* rv)
218 if (!cx->evaluating++)
219 vmclear(cx->em);
220 if ((r = eval(cx, expr, data, rv)) < -1)
222 cx->evaluating--;