mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-17 01:11:45 +00:00
duplicate code cleanup
This commit is contained in:
parent
908d265212
commit
749d460041
3 changed files with 59 additions and 77 deletions
|
@ -37,7 +37,9 @@ typedef struct expr_s {
|
||||||
} expr_t;
|
} expr_t;
|
||||||
|
|
||||||
expr_t *new_expr (void);
|
expr_t *new_expr (void);
|
||||||
expr_t *label_expr (void);
|
expr_t *new_label_expr (void);
|
||||||
|
expr_t *new_binary_expr (int op, expr_t *e1, expr_t *e2);
|
||||||
|
expr_t *new_unary_expr (int op, expr_t *e1);
|
||||||
void print_expr (expr_t *e);
|
void print_expr (expr_t *e);
|
||||||
expr_t *binary_expr (int op, expr_t *e1, expr_t *e2);
|
expr_t *binary_expr (int op, expr_t *e1, expr_t *e2);
|
||||||
expr_t *unary_expr (int op, expr_t *e);
|
expr_t *unary_expr (int op, expr_t *e);
|
||||||
|
|
|
@ -65,7 +65,7 @@ new_expr (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
expr_t *
|
expr_t *
|
||||||
label_expr (void)
|
new_label_expr (void)
|
||||||
{
|
{
|
||||||
static int label = 0;
|
static int label = 0;
|
||||||
int lnum = ++label;
|
int lnum = ++label;
|
||||||
|
@ -79,6 +79,29 @@ label_expr (void)
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expr_t *
|
||||||
|
new_binary_expr (int op, expr_t *e1, expr_t *e2)
|
||||||
|
{
|
||||||
|
expr_t *e = new_expr ();
|
||||||
|
|
||||||
|
e->type = ex_expr;
|
||||||
|
e->e.expr.op = op;
|
||||||
|
e->e.expr.e1 = e1;
|
||||||
|
e->e.expr.e2 = e2;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
|
expr_t *
|
||||||
|
new_unary_expr (int op, expr_t *e1)
|
||||||
|
{
|
||||||
|
expr_t *e = new_expr ();
|
||||||
|
|
||||||
|
e->type = ex_uexpr;
|
||||||
|
e->e.expr.op = op;
|
||||||
|
e->e.expr.e1 = e1;
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
print_expr (expr_t *e)
|
print_expr (expr_t *e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -301,64 +301,44 @@ statement
|
||||||
| statement_block { $$ = $1; }
|
| statement_block { $$ = $1; }
|
||||||
| RETURN expr ';'
|
| RETURN expr ';'
|
||||||
{
|
{
|
||||||
$$ = new_expr ();
|
$$ = new_unary_expr ('r', $2);
|
||||||
$$->type = ex_uexpr;
|
|
||||||
$$->e.expr.op = 'r';
|
|
||||||
$$->e.expr.e1 = $2;
|
|
||||||
}
|
}
|
||||||
| RETURN ';'
|
| RETURN ';'
|
||||||
{
|
{
|
||||||
$$ = new_expr ();
|
$$ = new_unary_expr ('r', 0);
|
||||||
$$->type = ex_uexpr;
|
|
||||||
$$->e.expr.op = 'r';
|
|
||||||
}
|
}
|
||||||
| WHILE '(' expr ')' statement
|
| WHILE '(' expr ')' statement
|
||||||
{
|
{
|
||||||
expr_t *e = new_expr ();
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l1 = label_expr ();
|
expr_t *l2 = new_label_expr ();
|
||||||
expr_t *l2 = label_expr ();
|
|
||||||
|
expr_t *e = new_binary_expr ('n', $3, l2);
|
||||||
|
|
||||||
$$ = e;
|
$$ = e;
|
||||||
|
|
||||||
e->type = ex_expr;
|
e = (e->next = l1);
|
||||||
e->e.expr.op = 'n';
|
|
||||||
e->e.expr.e1 = $3;
|
|
||||||
e->e.expr.e2 = l2;
|
|
||||||
|
|
||||||
e->next = l1;
|
|
||||||
e = e->next;
|
|
||||||
|
|
||||||
e->next = $5;
|
e->next = $5;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
e = e->next;
|
e = e->next;
|
||||||
|
|
||||||
e->next = new_expr ();
|
e = (e->next = new_binary_expr ('i', $3, l1));
|
||||||
e = e->next;
|
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'i';
|
|
||||||
e->e.expr.e1 = $3;
|
|
||||||
e->e.expr.e2 = l1;
|
|
||||||
|
|
||||||
e->next = l2;
|
e->next = l2;
|
||||||
}
|
}
|
||||||
| DO statement WHILE '(' expr ')' ';'
|
| DO statement WHILE '(' expr ')' ';'
|
||||||
{
|
{
|
||||||
expr_t *e;
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l1 = label_expr ();
|
|
||||||
|
|
||||||
$$ = e = l1;
|
expr_t *e = l1;
|
||||||
|
|
||||||
|
$$ = e;
|
||||||
|
|
||||||
e->next = $2;
|
e->next = $2;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
e = e->next;
|
e = e->next;
|
||||||
|
|
||||||
e->next = new_expr ();
|
e->next = new_binary_expr ('i', $5, l1);
|
||||||
e = e->next;
|
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'i';
|
|
||||||
e->e.expr.e1 = $5;
|
|
||||||
e->e.expr.e2 = l1;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
| LOCAL type
|
| LOCAL type
|
||||||
{
|
{
|
||||||
|
@ -367,16 +347,12 @@ statement
|
||||||
def_list ';' { $$ = 0; }
|
def_list ';' { $$ = 0; }
|
||||||
| IF '(' expr ')' statement
|
| IF '(' expr ')' statement
|
||||||
{
|
{
|
||||||
expr_t *e = new_expr ();
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l1 = label_expr ();
|
|
||||||
|
expr_t *e = new_binary_expr ('n', $3, l1);
|
||||||
|
|
||||||
$$ = e;
|
$$ = e;
|
||||||
|
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'n';
|
|
||||||
e->e.expr.e1 = $3;
|
|
||||||
e->e.expr.e2 = l1;
|
|
||||||
|
|
||||||
e->next = $5;
|
e->next = $5;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
e = e->next;
|
e = e->next;
|
||||||
|
@ -385,29 +361,20 @@ statement
|
||||||
}
|
}
|
||||||
| IF '(' expr ')' statement ELSE statement
|
| IF '(' expr ')' statement ELSE statement
|
||||||
{
|
{
|
||||||
expr_t *e = new_expr ();
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l1 = label_expr ();
|
expr_t *l2 = new_label_expr ();
|
||||||
expr_t *l2 = label_expr ();
|
|
||||||
|
expr_t *e = new_binary_expr ('n', $3, l1);
|
||||||
|
|
||||||
$$ = e;
|
$$ = e;
|
||||||
|
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'n';
|
|
||||||
e->e.expr.e1 = $3;
|
|
||||||
e->e.expr.e2 = l1;
|
|
||||||
|
|
||||||
e->next = $5;
|
e->next = $5;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
e = e->next;
|
e = e->next;
|
||||||
|
|
||||||
e->next = new_expr ();
|
e = (e->next = new_unary_expr ('g', l2));
|
||||||
e = e->next;
|
|
||||||
e->type = ex_uexpr;
|
|
||||||
e->e.expr.op = 'g';
|
|
||||||
e->e.expr.e1 = l2;
|
|
||||||
|
|
||||||
e->next = l1;
|
e = (e->next = l1);
|
||||||
e = e->next;
|
|
||||||
|
|
||||||
e->next = $7;
|
e->next = $7;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
|
@ -417,24 +384,19 @@ statement
|
||||||
}
|
}
|
||||||
| FOR '(' expr ';' expr ';' expr ')' statement
|
| FOR '(' expr ';' expr ';' expr ')' statement
|
||||||
{
|
{
|
||||||
expr_t *e;
|
expr_t *l1 = new_label_expr ();
|
||||||
expr_t *l1 = label_expr ();
|
expr_t *l2 = new_label_expr ();
|
||||||
expr_t *l2 = label_expr ();
|
|
||||||
|
|
||||||
$$ = e = $3;
|
expr_t *e = new_binary_expr ('n', $5, l2);
|
||||||
if (e) {
|
|
||||||
e->next = new_expr ();
|
$$ = $3;
|
||||||
e = e->next;
|
if ($$) {
|
||||||
|
$$->next = e;
|
||||||
} else {
|
} else {
|
||||||
e = new_expr ();
|
$$ = e;
|
||||||
}
|
}
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'n';
|
|
||||||
e->e.expr.e1 = $5;
|
|
||||||
e->e.expr.e2 = l2;
|
|
||||||
|
|
||||||
e->next = l1;
|
e = (e->next = l1);
|
||||||
e = e->next;
|
|
||||||
|
|
||||||
e->next = $9;
|
e->next = $9;
|
||||||
while (e->next)
|
while (e->next)
|
||||||
|
@ -444,12 +406,7 @@ statement
|
||||||
if (e->next)
|
if (e->next)
|
||||||
e = e->next;
|
e = e->next;
|
||||||
|
|
||||||
e->next = new_expr ();
|
e = (e->next = new_binary_expr ('i', $5, l1));
|
||||||
e = e->next;
|
|
||||||
e->type = ex_expr;
|
|
||||||
e->e.expr.op = 'i';
|
|
||||||
e->e.expr.e1 = $5;
|
|
||||||
e->e.expr.e2 = l1;
|
|
||||||
|
|
||||||
e->next = l2;
|
e->next = l2;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue