16 /* Unstack io channels */
18 for(i = 1; i < iop; i++)
31 vseprint(buf, buf+sizeof(buf), fmt, arg);
33 fprint(2, "%L: (error) %s\n", buf);
48 for(i = 0; i < Hashsize; i++) {
49 for(s = hash[i]; s; s = s->hash) {
87 if(ret || (res.type == TLIST && res.l == 0 && n->op != OADD))
100 for(n = n->left; n; n = n->left) {
102 error("local not in function");
104 if(sl->v->ret == ret)
105 error("%s declared twice", sl->name);
106 v = gmalloc(sizeof(Value));
112 ret->tail = &v->scope;
118 error("return not in function");
119 expr(n->left, ret->val);
120 longjmp(ret->rlab, 1);
127 if(r && r->op == OELSE) {
147 error("loop must have integer start");
149 expr(l->right, &res);
151 error("loop must have integer end");
153 for(i = s; i <= e; i++)
165 fatal("bool: not const");
189 convflt(Node *r, char *flt)
194 if(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {
197 r->string = strnode(flt);
206 indir(Map *m, uvlong addr, char fmt, Node *r)
214 char buf[512], reg[12];
220 error("bad pointer format '%c' for *", fmt);
225 ret = get1(m, addr, &cval, 1);
237 ret = get2(m, addr, &sval);
246 ret = geta(m, addr, &uvval);
258 ret = get4(m, addr, &lval);
267 ret = get8(m, addr, &uvval);
274 for(i = 0; i < sizeof(buf)-1; i++) {
275 ret = get1(m, addr, (uchar*)&buf[i], 1);
284 strcpy(buf, "(null)");
285 r->string = strnode(buf);
289 for(i = 0; i < sizeof(buf)-2; i += 2) {
290 ret = get1(m, addr, (uchar*)&buf[i], 2);
294 if(buf[i] == 0 && buf[i+1] == 0)
299 r->string = runenode((Rune*)buf);
303 if ((*machdata->das)(m, addr, fmt, buf, sizeof(buf)) < 0)
307 r->string = strnode(buf);
310 ret = get1(m, addr, (uchar*)buf, mach->szfloat);
313 machdata->sftos(buf, sizeof(buf), (void*) buf);
317 ret = get1(m, addr, (uchar*)buf, mach->szfloat);
320 machdata->sftos(buf, sizeof(buf), (void*) buf);
322 r->string = strnode(buf);
325 ret = get1(m, addr, (uchar*)buf, mach->szdouble);
328 machdata->dftos(buf, sizeof(buf), (void*) buf);
331 case '3': /* little endian ieee 80 with hole in bytes 8&9 */
332 ret = get1(m, addr, (uchar*)reg, 10);
335 memmove(reg+10, reg+8, 2); /* open hole */
336 memset(reg+8, 0, 2); /* fill it */
337 leieee80ftos(buf, sizeof(buf), reg);
340 case '8': /* big-endian ieee 80 */
341 ret = get1(m, addr, (uchar*)reg, 10);
344 beieee80ftos(buf, sizeof(buf), reg);
348 ret = get1(m, addr, (uchar*)buf, mach->szdouble);
351 machdata->dftos(buf, sizeof(buf), (void*) buf);
353 r->string = strnode(buf);
359 windir(Map *m, Node *addr, Node *rval, Node *r)
368 error("no map for */@=");
374 error("bad type lhs of @/*");
376 if(m != cormap && wtflag == 0)
377 error("not in write mode");
381 r->Store = res.Store;
385 error("bad pointer format '%c' for */@=", res.fmt);
390 ret = put1(m, aes.ival, &cval, 1);
398 ret = put2(m, aes.ival, sval);
404 ret = puta(m, aes.ival, res.ival);
412 ret = put4(m, aes.ival, lval);
417 ret = put8(m, aes.ival, res.ival);
421 ret = put1(m, aes.ival, (uchar*)res.string->string, res.string->len);
429 call(char *fn, Node *parameters, Node *local, Node *body, Node *retexp)
436 Node *avp[Maxarg], *ava[Maxarg];
441 flatten(avp, parameters);
447 error("%s: too few arguments", fn);
448 error("%s: too many arguments", fn);
451 rlab.tail = &rlab.local;
454 for(i = 0; i < np; i++) {
458 error("%s: %d formal not a name", fn, i);
467 if(n->left->op != ONAME)
468 error("%s: %d formal not a name", fn, i);
473 error("%s already declared at this scope", s->name);
475 v = gmalloc(sizeof(Value));
481 rlab.tail = &v->scope;
483 v->Store = res.Store;
489 if(setjmp(rlab.rlab) == 0)
492 for(s = rlab.local; s; s = next) {