955 |
a=env->head->item->content.val; |
a=env->head->item->content.val; |
956 |
toss(env); |
toss(env); |
957 |
if(env->err) return; |
if(env->err) return; |
958 |
b=env->head->item->content.val; |
if(env->head->item->refcount == 1) |
959 |
|
env->head->item->content.val += a; |
960 |
|
else { |
961 |
|
b=env->head->item->content.val; |
962 |
|
toss(env); |
963 |
|
if(env->err) return; |
964 |
|
push_int(&(env->head), a+b); |
965 |
|
} |
966 |
|
} |
967 |
|
|
968 |
|
/* - */ |
969 |
|
extern void sx_2d(environment *env) { |
970 |
|
int a, b; |
971 |
|
|
972 |
|
if((env->head)==NULL || env->head->next==NULL) { |
973 |
|
printerr("Too Few Arguments"); |
974 |
|
env->err=1; |
975 |
|
return; |
976 |
|
} |
977 |
|
|
978 |
|
if(env->head->item->type!=integer |
979 |
|
|| env->head->next->item->type!=integer) { |
980 |
|
printerr("Bad Argument Type"); |
981 |
|
env->err=2; |
982 |
|
return; |
983 |
|
} |
984 |
|
a=env->head->item->content.val; |
985 |
toss(env); |
toss(env); |
986 |
if(env->err) return; |
if(env->err) return; |
987 |
push_int(&(env->head), a+b); |
if(env->head->item->refcount == 1) |
988 |
|
env->head->item->content.val -= a; |
989 |
|
else { |
990 |
|
b=env->head->item->content.val; |
991 |
|
toss(env); |
992 |
|
if(env->err) return; |
993 |
|
push_int(&(env->head), b-a); |
994 |
|
} |
995 |
|
} |
996 |
|
|
997 |
|
/* > */ |
998 |
|
extern void sx_3e(environment *env) { |
999 |
|
int a, b; |
1000 |
|
|
1001 |
|
if((env->head)==NULL || env->head->next==NULL) { |
1002 |
|
printerr("Too Few Arguments"); |
1003 |
|
env->err=1; |
1004 |
|
return; |
1005 |
|
} |
1006 |
|
|
1007 |
|
if(env->head->item->type!=integer |
1008 |
|
|| env->head->next->item->type!=integer) { |
1009 |
|
printerr("Bad Argument Type"); |
1010 |
|
env->err=2; |
1011 |
|
return; |
1012 |
|
} |
1013 |
|
a=env->head->item->content.val; |
1014 |
|
toss(env); |
1015 |
|
if(env->err) return; |
1016 |
|
if(env->head->item->refcount == 1) |
1017 |
|
env->head->item->content.val = (env->head->item->content.val > a); |
1018 |
|
else { |
1019 |
|
b=env->head->item->content.val; |
1020 |
|
toss(env); |
1021 |
|
if(env->err) return; |
1022 |
|
push_int(&(env->head), b>a); |
1023 |
|
} |
1024 |
} |
} |
1025 |
|
|
1026 |
/* Return copy of a value */ |
/* Return copy of a value */ |
1149 |
extern void sx_7768696c65(environment *env) { |
extern void sx_7768696c65(environment *env) { |
1150 |
|
|
1151 |
int truth; |
int truth; |
1152 |
|
value *loop, *test; |
1153 |
|
|
1154 |
if((env->head)==NULL || env->head->next==NULL) { |
if((env->head)==NULL || env->head->next==NULL) { |
1155 |
printerr("Too Few Arguments"); |
printerr("Too Few Arguments"); |
1157 |
return; |
return; |
1158 |
} |
} |
1159 |
|
|
1160 |
|
loop= env->head->item; |
1161 |
|
loop->refcount++; |
1162 |
|
toss(env); if(env->err) return; |
1163 |
|
|
1164 |
|
test= env->head->item; |
1165 |
|
test->refcount++; |
1166 |
|
toss(env); if(env->err) return; |
1167 |
|
|
1168 |
do { |
do { |
1169 |
swap(env); if(env->err) return; |
push_val(&(env->head), test); |
1170 |
dup(env); if(env->err) return; |
eval(env); |
|
eval(env); if(env->err) return; |
|
1171 |
|
|
1172 |
if(env->head->item->type != integer) { |
if(env->head->item->type != integer) { |
1173 |
printerr("Bad Argument Type"); |
printerr("Bad Argument Type"); |
1176 |
} |
} |
1177 |
|
|
1178 |
truth= env->head->item->content.val; |
truth= env->head->item->content.val; |
|
|
|
1179 |
toss(env); if(env->err) return; |
toss(env); if(env->err) return; |
|
swap(env); if(env->err) return; |
|
1180 |
|
|
1181 |
if(truth) { |
if(truth) { |
1182 |
dup(env); |
push_val(&(env->head), loop); |
1183 |
eval(env); |
eval(env); |
1184 |
} else { |
} else { |
1185 |
toss(env); |
toss(env); |
|
toss(env); |
|
1186 |
} |
} |
1187 |
|
|
1188 |
} while(truth); |
} while(truth); |
1189 |
|
|
1190 |
|
free_val(test); |
1191 |
|
free_val(loop); |
1192 |
} |
} |