|
|
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.