ref: 50104ba72987b26febfa4e398458d47db20e9bea
dir: /value.c/
#include <u.h> #include <libc.h> #include <thread.h> #include "dat.h" #include "fns.h" /* Anything that can have a name in LPA: Arrays, functions, ... */ char * printval(void *v) { int tag; if(v){ tag = getalloctag(v); switch(tag){ case DataArray: return smprint("%s\n", printarray(v)); default: return smprint("some value of type %d\n", tag); } }else return smprint("no value :(\n"); } void * parseval(char *buf, char **errp) { Ast *ast; void *val = nil; TokenList *tokens = scan(buf, errp); if(tokens == nil) goto end; ast = parse(tokens, errp); if(ast == nil) goto end; /* Check that the ast is either a single function definition, * or a single constant. */ if(!(ast->tag == AstProg && ast->childcount == 1)){ *errp = "Expected single value or function definition"; goto end; } ast = ast->children[0]; switch(ast->tag){ case AstConst: val = ast->val; break; case AstFunc: *errp = "Functions not supported yet"; break; default: *errp = "Expected constant or function definition"; goto end; } end: return val; }