pike.git/
src/
docode.c
Branch:
Tag:
Non-build tags
All tags
No tags
1996-08-05
1996-08-05 22:05:27 by Fredrik Hübinette (Hubbe) <hubbe@hubbe.net>
a7622ce0294ba43e4d5d9dc8103d12959ef8dac1 (
64
lines) (+
45
/-
19
)
[
Show
|
Annotate
]
Branch:
branches/E-12
if(foo && bar) optimized
Rev: src/docode.c:1.7
119:
static int label_no=0;
-
static
int alloc_label() { return ++label_no; }
+
int alloc_label() { return ++label_no; }
-
static
int do_jump(int token,INT32 lbl)
+
int do_jump(int token,INT32 lbl)
{ if(lbl==-1) lbl=alloc_label(); emit(token, lbl);
132:
#define ins_label(L) do_jump(F_LABEL, L)
-
static
void do_pop(int x)
+
void do_pop(int x)
{ switch(x) {
156:
}
-
static
INT32
do_jump_when_zero(node *n,int j);
+
void
do_jump_when_zero(node *n,int j);
-
static
int
do_jump_when_non_zero(node *n,int j)
+
void
do_jump_when_non_zero(node *n,int j)
{ if(!node_is_tossable(n)) { if(node_is_true(n))
-
return
do_jump(F_BRANCH,j);
+
{
+
do_jump(F_BRANCH,j);
+
return;
+
}
if(node_is_false(n))
-
return
-1
;
+
return;
}
-
if
(n->token
==
F_NOT)
-
return do_jump_when_zero(CAR(n), j);
+
switch
(n->token
)
+
{
+
case
F_NOT
:
+
do_jump_when_zero(CAR(n
)
, j);
+
return
;
+
case F_OR:
+
do_jump_when_
non_
zero(CAR(n), j);
+
do_jump_when_non_zero(CDR(n), j);
+
return;
+
}
if(do_docode(n, DO_NOT_COPY)!=1) fatal("Infernal compiler skiterror.\n");
-
return
do_jump(F_BRANCH_WHEN_NON_ZERO,j);
+
do_jump(F_BRANCH_WHEN_NON_ZERO,j);
}
-
static
INT32
do_jump_when_zero(node *n,int j)
+
void
do_jump_when_zero(node *n,int j)
{ if(!node_is_tossable(n)) { if(node_is_true(n))
-
return
-1
;
+
return;
if(node_is_false(n))
-
return
do_jump(F_BRANCH,j);
+
{
+
do_jump(F_BRANCH,j);
+
return;
}
-
+
}
-
if
(n->token
==
F_NOT)
-
return do_jump_when_
non_
zero(CAR(n), j);
+
switch
(n->token
)
+
{
+
case
F_NOT
:
+
do_jump_when_non_zero(CAR(n
)
, j);
+
return
;
+
case F_AND:
+
do_jump_when_zero(CAR(n), j);
+
do_jump_when_zero(CDR(n), j);
+
return;
+
}
if(do_docode(n, DO_NOT_COPY)!=1) fatal("Infernal compiler skiterror.\n");
-
return
do_jump(F_BRANCH_WHEN_ZERO,j);
+
do_jump(F_BRANCH_WHEN_ZERO,j);
} static INT32 count_cases(node *n)
266:
if(!CDDR(n)) {
-
tmp1=do_jump_when_zero(CAR(n),
-1
);
+
tmp1=
alloc_label();
+
do_jump_when_zero(CAR(n),
tmp1
);
DO_CODE_BLOCK(CADR(n)); emit(F_LABEL, tmp1); return 0;
274:
if(!CADR(n)) {
-
tmp1=do_jump_when_non_zero(CAR(n),
-1
);
+
tmp1=
alloc_label();
+
do_jump_when_non_zero(CAR(n),
tmp1
);
DO_CODE_BLOCK(CDDR(n)); emit(F_LABEL,tmp1); return 0; }
-
tmp1=do_jump_when_zero(CAR(n),
-1
);
+
tmp1=
alloc_label();
+
do_jump_when_zero(CAR(n),
tmp1
);
adroppings=do_docode(CADR(n), flags); tmp3=emit(F_POP_N_ELEMS,0);