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
  • in line 39
Last modified: 1984-11-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 507
Valid CSS Valid XHTML 1.0 Strict