/*@=compmempass@*/
/* helpers */
-yasm_expr__item *
-yasm_expr_sym(yasm_symrec *s)
+static yasm_expr__item *
+expr_get_item(void)
{
int z = 0;
unsigned long v = itempool_used & 0x7fffffff;
- yasm_expr__item *e;
while (v & 1) {
v >>= 1;
if (z>=31)
yasm_internal_error(N_("too many expritems"));
itempool_used |= 1<<z;
- e = &itempool[z];
+ return &itempool[z];
+}
+
+yasm_expr__item *
+yasm_expr_sym(yasm_symrec *s)
+{
+ yasm_expr__item *e = expr_get_item();
e->type = YASM_EXPR_SYM;
e->data.sym = s;
return e;
yasm_expr__item *
yasm_expr_expr(yasm_expr *x)
{
- int z = 0;
- unsigned long v = itempool_used & 0x7fffffff;
- yasm_expr__item *e;
-
- while (v & 1) {
- v >>= 1;
- z++;
- }
- if (z>=31)
- yasm_internal_error(N_("too many expritems"));
- itempool_used |= 1<<z;
- e = &itempool[z];
+ yasm_expr__item *e = expr_get_item();
e->type = YASM_EXPR_EXPR;
e->data.expn = x;
return e;
yasm_expr__item *
yasm_expr_int(yasm_intnum *i)
{
- int z = 0;
- unsigned long v = itempool_used & 0x7fffffff;
- yasm_expr__item *e;
-
- while (v & 1) {
- v >>= 1;
- z++;
- }
- if (z>=31)
- yasm_internal_error(N_("too many expritems"));
- itempool_used |= 1<<z;
- e = &itempool[z];
+ yasm_expr__item *e = expr_get_item();
e->type = YASM_EXPR_INT;
e->data.intn = i;
return e;
yasm_expr__item *
yasm_expr_float(yasm_floatnum *f)
{
- int z = 0;
- unsigned long v = itempool_used & 0x7fffffff;
- yasm_expr__item *e;
-
- while (v & 1) {
- v >>= 1;
- z++;
- }
- if (z>=31)
- yasm_internal_error(N_("too many expritems"));
- itempool_used |= 1<<z;
- e = &itempool[z];
+ yasm_expr__item *e = expr_get_item();
e->type = YASM_EXPR_FLOAT;
e->data.flt = f;
return e;
yasm_expr__item *
yasm_expr_reg(unsigned long reg)
{
- int z = 0;
- unsigned long v = itempool_used & 0x7fffffff;
- yasm_expr__item *e;
-
- while (v & 1) {
- v >>= 1;
- z++;
- }
- if (z>=31)
- yasm_internal_error(N_("too many expritems"));
- itempool_used |= 1<<z;
- e = &itempool[z];
+ yasm_expr__item *e = expr_get_item();
e->type = YASM_EXPR_REG;
e->data.reg = reg;
return e;