Showcode revels the reason for the difference. {% ... %} uses stacklength (smacked
paws) and [% ... %] uses the popstackmark we know and love.
: lib showcode
;;; LOADING LIB showcode
: true -> pop_show_code;
: [a], {% hd() %} =>
EXEC_OPTION_COMPILE <procedure>
PUSH popstackmark
PUSHQ a
CALL sysconslist
EXEC_OPTION_COMPILE <procedure>
NEW_LVAR
CALL stacklength
POP tmp_lvar_1
CALL hd
PUSH tmp_lvar_1
CALL sysvecons
PUSH true
CALL sysprarrow
EXECUTE
: [a], [% hd() %] =>
EXEC_OPTION_COMPILE <procedure>
PUSH popstackmark
PUSHQ a
CALL sysconslist
EXEC_OPTION_COMPILE <procedure>
PUSH popstackmark
CALL hd
CALL sysconslist
PUSH true
CALL sysprarrow
EXECUTE
Anthony.Worrall@Reading.ac.uk
|