/*
** copyright (c) 1995 Birk Huber
*/
#include "peleval.h"
int EvLev=0;
Gen_node Eval(Gen_node g)
{ Gen_node (*proc)(Gen_node),arg,ptr,ans;
if (g==0) bad_error("Eval passed empty list");
if (g->type == Lst_T) {
ptr=g->Genval.lval;
if (ptr!=0) {
arg=Eval(ptr);
if (arg->type==Err_T){free_Gen_list(g);
return arg;}
g->Genval.lval=arg;
while(arg->next!=0){
ans=Eval(arg->next);
if (arg->type==Err_T){ free_Gen_list(g);
return ans;}
arg->next=ans;
arg=arg->next;
}
if (g->Genval.lval->type == Prc_T){
proc=g->Genval.lval->Genval.proc;
arg=g->Genval.lval->next;
g->Genval.lval->next=0;
ans=proc(arg);
ans->next=g->next;
g->next=0;
free_Gen_list(g);
return ans;
}
}
}
return g;
}
syntax highlighted by Code2HTML, v. 0.9.1