Changeset 234


Ignore:
Timestamp:
Jan 7, 2004, 3:37:57 PM (21 years ago)
Author:
Gary Byers
Message:

Fix (at least the function case) of :ALLOW-OTHER-KEYS NIL.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/lisp-kernel/spentry.s

    r170 r234  
    967967        __(mr imm4,valptr)
    9689685:
     969        __(cmpwi cr0,keyword_flags,16<<fixnumshift) /* seen :a-o-k yet ? */
    969970        __(lwzu arg_z,-4(valptr))
    970971        __(lwzu arg_y,-4(valptr))
    971972        __(cmpri(cr1,arg_y,nil_value))
    972973        __(li arg_x,nrs.kallowotherkeys)
    973         __(cmpr(cr0,arg_x,arg_z))
     974        /* cr6_eq <- (eq current-keyword :allow-other-keys) */
     975        __(cmpr(cr6,arg_x,arg_z))
    974976        __(cmpr(cr7,valptr,limit))
     977        __(bne cr6,6f)
     978        __(bge cr0,6f) /* Already seen :allow-other-keys */
     979        __(ori keyword_flags,keyword_flags,16<<fixnumshift)
    975980        __(beq cr1,6f)
    976         __(bne cr0,6f)
    977981        __(ori keyword_flags,keyword_flags,fixnum_one)
    9789826:
     
    99910038:
    10001004        __(bne cr1,7b)
    1001         /* Unknown keyword. */
     1005        /* Unknown keyword. If it was :allow-other-keys, cr6_eq will still
     1006           be set. */
     1007        __(beq cr6,9f)
    10021008        __(ori keyword_flags,keyword_flags,2<<fixnumshift)
    100310099:
     
    33723378        __(_car(arg_x,arg_z))
    33733379        __(_cdr(arg_z,arg_z))
    3374         __(cmpri(cr2,arg_x,nil_value))
    33753380        __(cmpri(cr1,arg_z,nil_value))
    3376         __(beq cr2,2f)
    3377         __(trap_unless_lisptag_equal(arg_x,tag_list,imm0))
     3381        __(trap_unless_fulltag_equal(arg_x,fulltag_cons,imm0))
    33783382        __(_car(temp0,arg_x))
    33793383        __(cmpr(temp0,arg_y))
Note: See TracChangeset for help on using the changeset viewer.