NEUQJ7FRWFVZ7HPXGLLBU55FH6OSB374SQSRGIAAA233KFGEKTDAC DLKX5ORVHGLKOQD2ZDBDQKZBSN5XQ7WXMZPCZNMTMJV2JRKS664AC 7KF6CLZGZ4I2FTAFXZV5EL7XDQ2HC3VDELT3RHCABEAXU2C3UUTQC PAKJWJ4I5Q4YOY4CAQEZP3HHGCOCOIF32FT3IIZVT5SIRJZGXQVQC IHDDXPBATRVMS6VIJQLXBEMNI3ERHIO5JW6RB5DHO2R4NZBI2V7QC IDGMNM2XJX6P4IOFOT735OYKWGUOL6U4TX7MWFAHE3FNZBLB6RBQC GSH2PRGCOOMP2GMHQUC2V5NQT5MJCFGVEI7TAMPQFCMT7E4DFHPQC WBTTOVECBHVLVJKWBGXUGPA3C5L5G7CIIQP6SK4H4YLGCA4R2X3AC CBEBMHUSOH3BUSNKD2372DXTAZQBF5UPZCOYFSBPDX5J5QV5PMXQC 6WM2DD32XSC2HFLOXBDPFCU6BI2BD5ZYFGBIEIVEQOKWRCNTXROQC ICGJDX2EHUCWPATWZRMDCSSTRXGSPW5M4NGU5MAFG6R7QDUC5KPQC UW27LKXM2BJ77FQLTY4WPKDSSWI2RFNFRJ7CB4U3TS7KYVIV72LQC TN5RCIH3OI5AW756GICACN24TBABGLNDQ7LZJTUYHXYVW3ARGBBQC JDZASPALXSFZOL3MXCKBPX74CUD3W743ZJ6W2422FIJ7NJOD67ZAC MDCE6UHRABRWF7Z7NOQ3OTB5WXRIHPY7A625V5E6COPS44ETZSQQC 5XO7IKBGCVXGVWMDJDE5MELS4FWRITKAU6NNV36NQ4TOZRR7UQ7QC LTFZUIG6XMN6MAXJFV2F4TZNHWGOFTDKR56G264UNNDVNL447UAQC 4YBBAZM32EOQGX736RWC6NDEDRIIL64RFHFDNTRCATUS4KD77Y7AC VIEK2XMYJX37ELGVE2P5PZQU47NJ3GBXPV3XY2RWG2TDHIZEV57QC KBD2A5MUJHKGV4JD6MLJXTKNAYZ5D44LX5WRB2ZXX5YCWBODWR3AC IJPPBZNLPL4X6WDFWFBNMZ32WNJM7QZ6EFSUTNSN74AZJEZKEARAC I3MID22EURRK26C4JZ2U5FBEZ57GZVMBT44KFKTU4BBYXKLILWRAC OUNA3ZMTTISFWX3HHIJ46WTYQJBX4OFSNU4SU3GOJMBLLHQDFT7AC A2JAXDJWT2FAKADYOY6QOQ7LQRMTTCDIOYT7STSESVHLZQEQJBMAC GW4AAYNF7I66D72G5PMFTQRK7B4KZVYKAHKRPC2IY7IX37JKEHJQC NBEO3TPNOUG7MRFYRSDDFB5TQKTEDL6GHHFQVOB5MXVPIBKFNZKAC IMQIKAOEZWNPCBOYMBV5QGUEAZUZ3B3FIKQ7HDNMSXPHV7322GFQC 6XHALMLUA5B5BBYFSWIFHSJ2BXCL6RSAW5TCKRGJEI2LURH2TQ4AC O6PFGAUDYCMK6SC6V5RB5ELXZ7W54OB7XPYCMECCA4BSBUVLFAPAC 2UOWJD64KBUHIWGZTPGUWWJXH5ZIAMOEJRDNZQOW5QWBJDEACURQC PXI442CY2KQHHAIJ3UNCWKTAI4IFYNGYEBRQMDR6T53YZTY2VMMQC K3OVRFE3Y23DN47XNAISH6XM5JGSCNRR6TOEO5KAKBNB54MFO27AC 7SNXCC5KSDXU3MBJT2FBEPAISWPY62DHPC2RLEYXC2WVTWX5TKKQC BEOFPS76OOYENP76QFENC7BFGH6GDLEZODWIHFFQOIK3ZHD7IPBAC RCUBQKTURAMSYYFNNI4JPXDBZDGF6ZGWVGQYTDEKA6EOMG4QUZOAC QPW27WXKZFJFFXH2QIDDSM7HQTGZJ26ACF22RE6Q5CJV7LJ3G7FQC TR7MDG2JZKE2XJTMGJQT3W4JTYNYPSDEZN5G4D464WCWCMVA75NQC 7NGDT5EF45AF26SWO5BL4UUIA4ZFWZDEBY2FGIMGQ7KJWPLKHTNQC OUSD2SQASHZTD2KRWOVMU7LUSE73NXKECFIOD7M76NMOXMD7Q4RQC return _substr3(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1),_eval3(_car(_cdddr(form)), env, env, d+1))
return _substr3(_eval3(_cadr(form), env, env, d+1, hdlrs, st, errp),_eval3(_caddr(form), env, env, d+1, hdlrs, st, errp),_eval3(_car(_cdddr(form)), env, env, d+1, hdlrs, st, errp))
return _gsub3(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1),_eval3(_car(_cdddr(form)), env, env, d+1))
return _gsub3(_eval3(_cadr(form), env, env, d+1, hdlrs, st, errp),_eval3(_caddr(form), env, env, d+1, hdlrs, st, errp),_eval3(_car(_cdddr(form)), env, env, d+1, hdlrs, st, errp))
lisp_eval_should_be '(abort "it is a format string %d" 42)' '' 'abort' 87lisp_eval_should_be '(error "oh no")' '' 'error' 87lisp_eval_should_be '(abort "what if we %s?" (abort "aaaaaaa"))' '' 'abort while aborting' 88lisp_eval_should_be '(handle (lambda (st) "be cool") (error "oh no"))' '"be cool"' 'handle'
_abort(_cdr(form), env, d)
_abort(_cdr(form), env, d+1, hdlrs, st, errp)else if(car == _symbol("error")) {# logg_err("_eval3", "error raised!", d)errp[1] = 1if(_is_null(hdlrs)) {_abort(_cdr(form), #_cons(_string("unhandled error"), _nil()),env, d+1, hdlrs, st, errp)} else {# we have to get back to the (awk) frame where the handler# was added. there are checks for errp[1] in plenty of# places above that forestall further evaluation until the# handler kicks in.return _nil()}} else if(car == _symbol("handle")) {hdlrs = _cons(_cadr(form), hdlrs) # unevaluated fwiwx = _evprog(_cddr(form), env, env, d+1, hdlrs, st, errp)if(errp[1]) {# don't pass a true errp in: the eval will quitdelete no_errpno_errp[1] = 0return _eval3(_cons(_car(hdlrs),_cons(_cons(_symbol("quote"),_cons(st, _nil())),_nil())),env, env, d+1, _cdr(hdlrs), st, no_errp)} else {return x}}
s = _sprintf(_eval3(_car(form), env, env, d+1),_cdr(form), env, d+1)print "GLOTAWK ABORT: " _STRING[s] > "/dev/stderr"
abort_errp[1] = 0# we are going to exit. don't deal with the handlers at this point.s = _sprintf(_eval3(_car(form), env, env, d+1, _nil(), st, abort_errp),_cdr(form), env, d+1, _nil(), st, abort_errp)print "****** GLOTAWK ABORTING: " _STRING[s] > "/dev/stderr"if(st) {print "****** ENVIRONMENT" > "/dev/stderr"for(; !_is_null(env); env=_cdr(env)) {if(env && _car(env))print " " _repr(_car(env)) > "/dev/stderr"}print "****** STACK TRACE" > "/dev/stderr"for(; !_is_null(st); st=_cdr(st)) {if(st && _car(st))print " evaling " _repr(_car(st)) > "/dev/stderr"}print "******" > "/dev/stderr"}
(let ((problem false))(label ((shellquote-string(lambda (x)(cond ((stringp x) (shellquote x))((eq x :pipe) "|")((eq x :gt) ">")((eq x :gtgt) ">>")((eq x :lt) "<")((keywordp x) (keyword-name x)) ; unquoted!(true (setq problem true))))))(let ((words (mapcar shellquote-string argv)))(cond(problem (abort "make-safe-shell-command: could not with argv %s"(repr argv)))(true (apply string-join " " words)))))))
(label ((shellquote-string(lambda (x)(cond ((stringp x) (shellquote x))((eq x :pipe) "|")((eq x :gt) ">")((eq x :gtgt) ">>")((eq x :lt) "<")((keywordp x) (keyword-name x)) ; unquoted!(true (error "cannot use %s to make-safe-shell-command"(repr x)))))))(apply string-join " " (mapcar shellquote-string argv))))
return _with_ors(_eval3(_cadr(form), env, env, d+1),_cddr(form), env, d+1) # to be evaluated using evprog
return _with_ors(_eval3(_cadr(form), env, env, d+1, hdlrs, st, errp),_cddr(form), env, d+1, hdlrs, st, errp) # to be evaluated using evprog
return _with_output_to(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1),_cdddr(form), env, d+1) # to be evprogged
return _with_output_to(_eval3(_cadr(form), env, env, d+1, hdlrs, st, errp),_eval3(_caddr(form), env, env, d+1, hdlrs, st, errp),_cdddr(form), env, d+1, hdlrs, st, errp) # to be evprogged
return _with_input_from(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1),_cdddr(form), env, d+1) # to be evprogged
return _with_input_from(_eval3(_cadr(form), env, env, d+1, hdlrs, st, errp),_eval3(_caddr(form), env, env, d+1, hdlrs, st, errp),_cdddr(form), env, d+1, hdlrs, st, errp) # to be evprogged
return _eval3_io(form, env, d)else return _eval3_other_special_forms(form, env, d)
return _eval3_io(form, env, d, hdlrs, st, errp)else return _eval3_other_special_forms(form, env, d, hdlrs, st, errp)
function _eval(form, depth) {return _eval3(_expand(form, depth+1), _nil(), _nil(), depth)
function _eval(form, depth, hdlrs, st, errp) {if(!hdlrs) hdlrs = _nil()if(!st) st = _nil()delete errperrp[1] = 0return _eval3(_expand(form, depth+1), _nil(), _nil(), depth, hdlrs, st, errp)