Number: 685

Date: 13-Apr-84 12':07':52

Submitter: Sannella.PA

Source: JonL.pa

Subject: FMEMB, FASSOC etc should error on non-NIL termination (e.g. using CAR/CDRERR)

Assigned To: Masinter

Attn: Release

Status: Open

In/By: Intermezzo

Problem Type: Design - Impl

Impact: Moderate

Difficulty: 

Frequency: Everytime

Priority: Hopefully

System: Language Support

Subsystem: Other

Machine: 

Disk: 

Lisp Version: 

Source Files: 

Microcode Version: 

Memory Size: 

File Server: 

Server Software Version: 

Disposition: [I think this will be fixed when we can set CAR/CDRERR to T (or once). Is that a separate AR]'
["Sannella.PA" "28-Aug-84 10':00':13" Status':(Wish->Open) Description':]'
[lmm': I marked this as "Fixed" although it won''t be IN/BY until Intermezzo. ]'
["masinter" "11-Sep-84 14':21':54" Assigned% To': Attn': In/By': Disposition':]

Description: '
Date': 11 Apr 84 20':03 PST'
From': JonL.pa'
Subject': Lisp': Want FMEMB, FASSOC etc to err on non-NIL termination'
To': LispSupport.pa'
cc': JonL.pa'
'
Lisp System Date': 11-Apr-84 00':53':49'
Machine': Dorado (Ahwahnee)'
Microcode version': 24,4'
Memory size': 10000'
Frequency': Always'
Impact': Fatal ocasionally, Minor at other times'
'
The semantic distinction between FMEMB and MEMB should not be taken as meaningful -- FMEMB should run an error when its list''s termination is other than NIL.  This could be assured if CAR/CDRERR being "on" were the standard case; and also this should apply to any of the "fast" functions which depend upon this unfortunate, pdp10-inspired speed hack.'
'
Currently FMEMB is taking CDR of the list without checking LISTP, and one can actually fall into an infinite loop; e.g., try'
  (FMEMB 5 ''(1 2 . 3))'
which will loop indefinitely around the value "{cdr of non-list}"'
 '
-----'
'
Date': 17 Jul 84 23':56 PDT'
From': masinter.pa'
Subject': Re': FMEMB loops forever in TypeInMethods'
In-reply-to': LispSupport.pa''s message of 17 Jul 84 14':52':05 PDT (Tuesday)'
To': LispSupport.pa'
cc': LoopsCore↑, Foster'
'
To make (FMEMB ''A ''B) cause an error'
'
(ADVISE ''\CDR.UFN ''(AND X (NLISTP X) (ERRORX (LIST 4 X]'
'
I''m going to put this in as an available option on CAR/CDR errors, to have (CAR non-list) return {garbage}, but make (CDR non-list) error.'
 '
-----'
'
Date': 21 Aug 84 18':45 PDT'
From': JonL.pa'
Subject': Re': HISTORYSAVE calls (FMEMB ''ABORT "from event")'
In-reply-to': masinter.pa''s message of 21 Aug 84 13':07 PDT'
To': masinter.pa'
cc': lispsupport.pa'
'
More grist for the mill that says FMEMB should do a NLISTP check instead of a NULL check for termination.  Semantics are still the same as the kludgy Interlisp-10 inspired definition; it just errors out rather than going into an infinite loop.'
'
-- JonL --'
'
-----'
'
Date': 21 Aug 84 20':15 PDT'
From': masinter.pa'
Subject': Re': HISTORYSAVE calls (FMEMB ''ABORT "from event")'
In-reply-to': JonL.pa''s message of 21 Aug 84 18':45 PDT'
To': JonL.pa'
cc': masinter.pa, lispsupport.pa'
'
I run with CAR/CDRERR=CDR; when this flag is set, (FMEMB x y) where y is non-list causes an error. From time to time I notice things that don''t work when an error is caused, and report them or fix them.'
'
'


Workaround: 

Test Case: 

Edit-By: masinter

Edit-Date: 11-Sep-84 14':21':56