|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)assign.c 5.2 (Berkeley) 4/7/87";
9: #endif not lint
10:
11: /*
12: * assign the value of an expression to a variable (or term)
13: */
14:
15: #include "defs.h"
16: #include "tree.h"
17: #include "sym.h"
18: #include "process.h"
19: #include "tree.rep"
20: #include "process/process.rep"
21: #include "process/pxinfo.h"
22:
23: assign(var, exp)
24: NODE *var;
25: NODE *exp;
26: {
27: ADDRESS addr;
28: int varsize;
29: char cvalue;
30: short svalue;
31: long lvalue;
32:
33: if (!compatible(var->nodetype, exp->nodetype)) {
34: error("incompatible types");
35: }
36: addr = lval(var);
37: eval(exp);
38: varsize = size(var->nodetype);
39: if (varsize < sizeof(long)) {
40: lvalue = pop(long);
41: switch (varsize) {
42: case sizeof(char):
43: cvalue = lvalue;
44: dwrite(&cvalue, addr, varsize);
45: break;
46:
47: case sizeof(short):
48: svalue = lvalue;
49: dwrite(&svalue, addr, varsize);
50: break;
51:
52: default:
53: goto othersize;
54: /*
55: panic("bad size %d", varsize);
56: */
57: }
58: } else {
59: othersize:
60: sp -= varsize;
61: dwrite(sp, addr, varsize);
62: #ifdef tahoe
63: downalignstack();
64: #endif
65: }
66: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.