; nut-completion solution ; allocate string space from mem[] ; copy s to there (def mkSTR s (s2) (do (set s2 (newdata (+ (strlen s) 1))) (strcpy (+ mem s2) s) s2)) (def doGvar (op arg) (v) (do (if (= op xSET) (set v (mkATOM xST arg)) (if (= op xSETV) (set v (mkATOM xSTY arg)) (if (= op xVEC) (set v (mkATOM xLDY arg)) (error "unknown op")))) v)) (def doEnum n () (mkATOM xLIT n)) (def doString s () (mkATOM xSTR (mkSTR s))) (def parseEnum () (idx k) (do (tokenise) (if (not (isNumber tok)) (error "expect number")) (set k (atoi tok)) (tokenise) (while (not (str= tok RP)) (do (set idx (install tok)) (if (!= (getType idx) tyUD) (error "redefine enum name")) (setType idx tyENUM) (setVal idx k) (set k (+ k 1)) (tokenise))))) ; End