#include "config.h" #include "mud.h" #include "u.h" #include "y.tab.h" /* "cast" a node as a true/false value */ int eval_castbool(n) Nod *n; { if(n->rv.t == NUM && n->rv.iv != 0) return(1); if(n->rv.t == STR && n->rv.cv != (char *)0 && n->rv.cv[0] != '\0') return(1); if(n->rv.t == OID) return(cache_check(n->rv.cv)); return(0); } /* "cast" a node as an int */ eval_castint(n) Nod *n; { switch(n->rv.t) { case STR: case OID: return(atoi(n->rv.cv)); case NUM: return(n->rv.iv); case VNULL: return(0); } return(0); } /* "cast" a node as a string */ char * eval_caststr(n) Nod *n; { switch(n->rv.t) { case STR: case OID: return(n->rv.cv); case NUM: { char nbuf[MAXOID]; return(tmpstr(itoa(n->rv.iv,nbuf))); } case VNULL: return("NULL"); } return(""); } /* adopt a node's rv into our nval or rv */ void eval_adopt(n1,n2,lrh) Nod *n1; Nod *n2; int lrh; { if(lrh) n2->nv.t = n1->rv.t; else n2->rv.t = n1->rv.t; switch(n1->rv.t) { case STR: case OID: if(lrh) n2->nv.cv = n1->rv.cv; else n2->rv.cv = n1->rv.cv; break; case NUM: case VNULL: if(lrh) n2->nv.iv = n1->rv.iv; else n2->rv.iv = n1->rv.iv; break; /* some types (like subtrees) we don't assign to! */ default: if(lrh) { n2->nv.t = VNULL; n2->nv.iv = UERR_ILLASGN; } else { n2->rv.t = VNULL; n2->rv.iv = UERR_ILLASGN; } } }