1: #include "../h/rt.h"
2:
3: /*
4: * x <- y - assign y to x.
5: * Reverses assignment if resumed.
6: */
7:
8: rasgn(nargs, arg2, arg1, arg0)
9: int nargs;
10: struct descrip arg2, arg1, arg0;
11: {
12: DclSave
13: SetBound;
14: /*
15: * x must be a variable.
16: */
17: if (QUAL(arg1) || !VAR(arg1))
18: runerr(111, &arg1);
19: /*
20: * The return value is the variable x, so make a copy of it before
21: * it is dereferenced.
22: */
23: arg0 = arg1;
24: DeRef(arg1)
25: DeRef(arg2)
26: /*
27: * Assign y to x and suspend.
28: */
29: doasgn(&arg0, &arg2);
30: suspend();
31: /*
32: * <- has been resumed, reverse the assignment by assigning the old value
33: * of x (present as arg1) back into x and fail.
34: */
35: doasgn(&arg0, &arg1);
36: fail();
37: }
38:
39: Opblock(rasgn,2,"<-")
Defined functions
rasgn
defined in line
8; used 1 times