GNU bug report logs - #24206
25.1; Curly quotes generate invalid strings, leading to a segfault

Previous Next

Package: emacs;

Reported by: Phil <p.stephani2 <at> gmail.com>

Date: Thu, 11 Aug 2016 18:57:02 UTC

Severity: normal

Found in version 25.1

Done: Paul Eggert <eggert <at> cs.ucla.edu>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 24206 in the body.
You can then email your comments to 24206 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 11 Aug 2016 18:57:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Phil <p.stephani2 <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 11 Aug 2016 18:57:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Phil <p.stephani2 <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Thu, 11 Aug 2016 11:55:05 -0700
Build is from the emacs-25 branch.

$ ./emacs -Q -eval "(progn (defface test nil \"\`\\240'\") (customize-face 'test))"

character.h:703: Emacs fatal error: assertion failed: CHAR_VALID_P (ch)
Fatal error 6: Aborted

I think this is serious enough to be release-blocking.  Seen in the wild
with older versions of show-wspace.el.


(gdb) bt full
#0  terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:354
No locals.
#1  0x00000000006122e6 in die (msg=0x732ed0 "CHAR_VALID_P (ch)", file=0x732ec4 "character.h", line=703) at alloc.c:7223
No locals.
#2  0x000000000057c60d in char_table_translate (obj=..., ch=4195776) at character.h:703
No locals.
#3  0x00000000005fe182 in re_search_2 (bufp=0xd76160 <searchbufs+5792>, str1=0x0, size1=0, str2=0x1ae6898 "‘\240’", size2=7, startpos=0, range=1, regs=0xd766f0 <search_regs>, stop=7) at regex.c:4370
        buf_charlen = 2
        irange = 7
        lim = 0
        d = 0x1ae689e "\231"
        buf_ch = 4195776
        val = 14115136
        string1 = 0x0
        string2 = 0x1ae6898 "‘\240’"
        fastmap = 0xd761a0 <searchbufs+5856> ""
        translate = {
          i = 21377445
        }
        total_size = 7
        endpos = 7
        anchored_start = 0 '\000'
        multibyte = 1 '\001'
#4  0x00000000005fdcef in re_search (bufp=0xd76160 <searchbufs+5792>, string=0x1ae6898 "‘\240’", size=7, startpos=0, range=7, regs=0xd766f0 <search_regs>) at regex.c:4228
No locals.
#5  0x00000000005ea018 in string_match_1 (regexp=..., string=..., start=..., posix=false) at search.c:404
        val = 5747501
        bufp = 0xd76160 <searchbufs+5792>
        pos = 0
        pos_byte = 0
        i = 42963155872
#6  0x00000000005ea18d in Fstring_match (regexp=..., string=..., start=...) at search.c:444
No locals.
#7  0x0000000000637da1 in Ffuncall (nargs=3, args=0x7fffffff5df0) at eval.c:2700
        internal_argbuf = {{
            i = 19272884
          }, {
            i = 19244804
          }, {
            i = 0
          }, {
            i = 0
          }, {
            i = 0
          }, {
            i = 6836305
          }, {
            i = 20056252
          }, {
            i = 326
          }}
        fun = {
          i = 10117229
        }
        original_fun = {
          i = 655680
        }
        funcar = {
          i = 11020413
        }
        numargs = 2
        lisp_numargs = {
          i = 19272884
        }
        val = {
          i = 43248
        }
        internal_args = 0x7fffffff5d60
        count = 36
#8  0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff66e0) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 36
        op = 2
        vectorp = 0x15310e8
        stack = {
          pc = 0x1ae653d "\203\252", 
          byte_string = {
            i = 19273556
          }, 
          byte_string_start = 0x1ae6528 "\300\301\002!!\302\002\303\"\302\211\004\304\"\305\"`\306\307\005\"\203\252", 
          next = 0x7fffffff6e00
        }
        top = 0x7fffffff5df0
        result = {
          i = 0
        }
        type = CATCHER
#9  0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff66d8) at eval.c:2855
        size = 5
        val = {
          i = 21698117
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 60157747265
        }
        lexenv = {
          i = 140737488315600
        }
        count = 36
        i = 60143831280
        optional = false
        rest = false
#10 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff66d0) at eval.c:2742
        fun = {
          i = 21698117
        }
        original_fun = {
          i = 13352512
        }
        funcar = {
          i = 140737488315760
        }
        numargs = 1
        lisp_numargs = {
          i = 140737488315792
        }
        val = {
          i = 0
        }
        internal_args = 0xda08f0 <lispsym>
        count = 35
#11 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff66d0) at eval.c:2274
        i = 5740786
        numargs = 0
        funcall_nargs = 13443920
        funcall_args = 0x0
        spread_arg = {
          i = 0
        }
        fun = {
          i = 13352512
        }
        retval = {
          i = 140737488315952
        }
        sa_avail = 16384
        sa_count = 35
        sa_must_free = false
#12 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff6828) at fns.c:2931
        widget = {
          i = 29645555
        }
        property = {
          i = 13443920
        }
        propval = {
          i = 13352512
        }
        trailing_args = {
          i = 0
        }
        result = {
          i = 13750941
        }
#13 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff6820) at eval.c:2673
        fun = {
          i = 13750941
        }
        original_fun = {
          i = 209904
        }
        funcar = {
          i = 327
        }
        numargs = 2
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 0
        }
        internal_args = 0x51a
        count = 34
#14 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff70c0) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 31
        op = 2
        vectorp = 0x152f188
        stack = {
          pc = 0x1cae31a "\210\266\b\354 \355 \356\002\302\"\210\356\001\303\"\210\357\003\360\004#\210\357\003\361\003#\266\003db\210+\362 \207", 
          byte_string = {
            i = 27692132
          }, 
          byte_string_start = 0x1cae1a8 "\214\302\211\030\031``}\210`É\211\211\211\211\211\304\006\t\305\"c\210\006\ab\210\306\307\303\302#\203\064\001Ȕf\311\312!\210\211\313=\203\067", 
          next = 0x7fffffff77c0
        }
        top = 0x7fffffff6820
        result = {
          i = 0
        }
        type = CATCHER
#15 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff70b8) at eval.c:2855
        size = 5
        val = {
          i = 21320085
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 64424472336
        }
        lexenv = {
          i = 140737488318128
        }
        count = 31
        i = 60143831280
        optional = false
        rest = false
#16 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff70b0) at eval.c:2742
        fun = {
          i = 21320085
        }
        original_fun = {
          i = 13340640
        }
        funcar = {
          i = 140737488318272
        }
        numargs = 1
        lisp_numargs = {
          i = 140737488318320
        }
        val = {
          i = 0
        }
        internal_args = 0xda08f0 <lispsym>
        count = 30
#17 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff70b0) at eval.c:2274
        i = 5740786
        numargs = 0
        funcall_nargs = 13340592
        funcall_args = 0x0
        spread_arg = {
          i = 0
        }
        fun = {
          i = 13340640
        }
        retval = {
          i = 140737488318480
        }
        sa_avail = 16384
        sa_count = 30
        sa_must_free = false
#18 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff71e0) at fns.c:2931
        widget = {
          i = 29645555
        }
        property = {
          i = 13340592
        }
        propval = {
          i = 13340640
        }
        trailing_args = {
          i = 0
        }
        result = {
          i = 13750941
        }
#19 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff71d8) at eval.c:2673
        fun = {
          i = 13750941
        }
        original_fun = {
          i = 209904
        }
        funcar = {
          i = 140737488318832
        }
        numargs = 2
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 14
        }
        internal_args = 0x7fffffff71e0
        count = 29
#20 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=7, args=0x7fffffff7988) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 29
        op = 2
        vectorp = 0x1530168
        stack = {
          pc = 0x1caedcd "\210\211\207", 
          byte_string = {
            i = 18832916
          }, 
          byte_string_start = 0x1caed98 "\300\301\003\003#\302\001\303\006\006#\210\304\001\305\"\204\061", 
          next = 0x7fffffff8160
        }
        top = 0x7fffffff71d8
        result = {
          i = 17283764
        }
        type = CATCHER
#21 0x000000000063873d in funcall_lambda (fun=..., nargs=7, arg_vector=0x7fffffff7978) at eval.c:2855
        size = 5
        val = {
          i = 21283133
        }
        syms_left = {
          i = 2570
        }
        next = {
          i = 60159187875
        }
        lexenv = {
          i = 140737488320624
        }
        count = 29
        i = 60143831280
        optional = false
        rest = false
#22 0x0000000000637fbb in Ffuncall (nargs=8, args=0x7fffffff7970) at eval.c:2742
        fun = {
          i = 21283133
        }
        original_fun = {
          i = 13537904
        }
        funcar = {
          i = 47994
        }
        numargs = 7
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 1
        }
        internal_args = 0x1c
        count = 28
#23 0x0000000000636fb6 in Fapply (nargs=6, args=0x7fffffff7b80) at eval.c:2321
        i = 8
        numargs = 7
        funcall_nargs = 8
        funcall_args = 0x7fffffff7970
        spread_arg = {
          i = 0
        }
        fun = {
          i = 21283133
        }
        retval = {
          i = 64
        }
        sa_avail = 16320
        sa_count = 28
        sa_must_free = false
#24 0x0000000000637bef in Ffuncall (nargs=7, args=0x7fffffff7b78) at eval.c:2673
        fun = {
          i = 13746093
        }
        original_fun = {
          i = 8400
        }
        funcar = {
          i = 0
        }
        numargs = 6
        lisp_numargs = {
          i = 140737488321312
        }
        val = {
          i = 140737488321232
        }
        internal_args = 0x5798f2 <builtin_lisp_symbol+44>
        count = 27
#25 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=3, args=0x7fffffff8360) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 27
        op = 6
        vectorp = 0x15303a0
        stack = {
          pc = 0x1cafa6d "\301\006\t\311\"B#\207", 
          byte_string = {
            i = 19832100
          }, 
          byte_string_start = 0x1cafa30 "\300\002!\301\003\302\"\301\004\303\"\002\205D", 
          next = 0x7fffffff8980
        }
        top = 0x7fffffff7b78
        result = {
          i = 28183283
        }
        type = CATCHER
#26 0x000000000063873d in funcall_lambda (fun=..., nargs=3, arg_vector=0x7fffffff8358) at eval.c:2855
        size = 5
        val = {
          i = 21698261
        }
        syms_left = {
          i = 1542
        }
        next = {
          i = 60157740323
        }
        lexenv = {
          i = 140737488323088
        }
        count = 27
        i = 60143831280
        optional = false
        rest = false
#27 0x0000000000637fbb in Ffuncall (nargs=4, args=0x7fffffff8350) at eval.c:2742
        fun = {
          i = 21698261
        }
        original_fun = {
          i = 13352656
        }
        funcar = {
          i = 140737488323248
        }
        numargs = 3
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 14
        }
        internal_args = 0x7fffffff8358
        count = 26
#28 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff8c40) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 26
        op = 3
        vectorp = 0x14dca90
        stack = {
          pc = 0x10584c4 "\210\002\204:\001\004\374N\324\006\b\375\376\006\v\310\006\006\206*\001\377&\006\330\006\t\201@", 
          byte_string = {
            i = 28080308
          }, 
          byte_string_start = 0x10583b0 "\306\001\307\"\306\002\310\"\306\003\311\"\206\022", 
          next = 0x7fffffff9360
        }
        top = 0x7fffffff8350
        result = {
          i = 28198083
        }
        type = CATCHER
#29 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff8c38) at eval.c:2855
        size = 5
        val = {
          i = 21859661
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 60157741873
        }
        lexenv = {
          i = 140737488325168
        }
        count = 26
        i = 60143831280
        optional = false
        rest = false
#30 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff8c30) at eval.c:2742
        fun = {
          i = 21859661
        }
        original_fun = {
          i = 13736416
        }
        funcar = {
          i = 140737488325328
        }
        numargs = 1
        lisp_numargs = {
          i = 140737488325360
        }
        val = {
          i = 0
        }
        internal_args = 0xda08f0 <lispsym>
        count = 25
#31 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff8c30) at eval.c:2274
        i = 5740786
        numargs = 0
        funcall_nargs = 13443920
        funcall_args = 0x0
        spread_arg = {
          i = 0
        }
        fun = {
          i = 13736416
        }
        retval = {
          i = 140737488325520
        }
        sa_avail = 16384
        sa_count = 25
        sa_must_free = false
#32 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff8d88) at fns.c:2931
        widget = {
          i = 28198227
        }
        property = {
          i = 13443920
        }
        propval = {
          i = 13736416
        }
        trailing_args = {
          i = 0
        }
        result = {
          i = 13750941
        }
#33 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff8d80) at eval.c:2673
        fun = {
          i = 13750941
        }
        original_fun = {
          i = 209904
        }
        funcar = {
          i = 256
        }
        numargs = 2
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 0
        }
        internal_args = 0x3fe
        count = 24
#34 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff9620) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 21
        op = 2
        vectorp = 0x152f188
        stack = {
          pc = 0x1cae31a "\210\266\b\354 \355 \356\002\302\"\210\356\001\303\"\210\357\003\360\004#\210\357\003\361\003#\266\003db\210+\362 \207", 
          byte_string = {
            i = 27692132
          }, 
          byte_string_start = 0x1cae1a8 "\214\302\211\030\031``}\210`É\211\211\211\211\211\304\006\t\305\"c\210\006\ab\210\306\307\303\302#\203\064\001Ȕf\311\312!\210\211\313=\203\067", 
          next = 0x7fffffff9cf0
        }
        top = 0x7fffffff8d80
        result = {
          i = 0
        }
        type = (CONDITION_CASE | CATCHER_ALL | unknown: 32764)
#35 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff9618) at eval.c:2855
        size = 5
        val = {
          i = 21320085
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 60150829029
        }
        lexenv = {
          i = 140737488327696
        }
        count = 21
        i = 60143831280
        optional = false
        rest = false
#36 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff9610) at eval.c:2742
        fun = {
          i = 21320085
        }
        original_fun = {
          i = 13340640
        }
        funcar = {
          i = 140737488328000
        }
        numargs = 1
        lisp_numargs = {
          i = 140737488327888
        }
        val = {
          i = 0
        }
        internal_args = 0xda08f0 <lispsym>
        count = 20
#37 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff9610) at eval.c:2274
        i = 5740786
        numargs = 0
        funcall_nargs = 13340592
        funcall_args = 0x0
        spread_arg = {
          i = 0
        }
        fun = {
          i = 13340640
        }
        retval = {
          i = 140737488328048
        }
        sa_avail = 16384
        sa_count = 20
        sa_must_free = false
#38 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff9738) at fns.c:2931
        widget = {
          i = 28198227
        }
        property = {
          i = 13340592
        }
        propval = {
          i = 13340640
        }
        trailing_args = {
          i = 0
        }
        result = {
          i = 13750941
        }
#39 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff9730) at eval.c:2673
        fun = {
          i = 13750941
        }
        original_fun = {
          i = 209904
        }
        funcar = {
          i = 140737488328400
        }
        numargs = 2
        lisp_numargs = {
          i = 140737488328400
        }
        val = {
          i = 28198227
        }
        internal_args = 0xda08f0 <lispsym>
        count = 19
#40 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=9, args=0x7fffffff9ec0) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 19
        op = 2
        vectorp = 0x152f160
        stack = {
          pc = 0x1cae149 "\210\211\207", 
          byte_string = {
            i = 27924884
          }, 
          byte_string_start = 0x1cae140 "\300\301\003\003#\302\001\303\"\210\211\207", 
          next = 0x7fffffffa4a0
        }
        top = 0x7fffffff9730
        result = {
          i = 23327188
        }
        type = CATCHER
#41 0x000000000063873d in funcall_lambda (fun=..., nargs=9, arg_vector=0x7fffffff9eb8) at eval.c:2855
        size = 5
        val = {
          i = 21283085
        }
        syms_left = {
          i = 1542
        }
        next = {
          i = 64424484544
        }
        lexenv = {
          i = 140737488330144
        }
        count = 19
        i = 60143831280
        optional = false
        rest = false
#42 0x0000000000637fbb in Ffuncall (nargs=10, args=0x7fffffff9eb0) at eval.c:2742
        fun = {
          i = 21283085
        }
        original_fun = {
          i = 5048688
        }
        funcar = {
          i = 73014444049
        }
        numargs = 9
        lisp_numargs = {
          i = 32
        }
        val = {
          i = 23327188
        }
        internal_args = 0x11824f0
        count = 18
#43 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffa680) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 18
        op = 9
        vectorp = 0x145c2d0
        stack = {
          pc = 0x1c8d50c "\207", 
          byte_string = {
            i = 17198852
          }, 
          byte_string_start = 0x1c8d4f8 "\300\001A@\301\302\303\304\305\306\006\b@!\307\006\t@&\t\207", 
          next = 0x7fffffffaeb0
        }
        top = 0x7fffffff9eb0
        result = {
          i = 0
        }
        type = CATCHER
#44 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffa678) at eval.c:2855
        size = 5
        val = {
          i = 21349141
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 60147901680
        }
        lexenv = {
          i = 140737488332112
        }
        count = 18
        i = 60135282930
        optional = false
        rest = false
#45 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffffa670) at eval.c:2742
        fun = {
          i = 21349141
        }
        original_fun = {
          i = 21349141
        }
        funcar = {
          i = 30046240
        }
        numargs = 1
        lisp_numargs = {
          i = 140737488332304
        }
        val = {
          i = 21221269
        }
        internal_args = 0xda08f0 <lispsym>
        count = 17
#46 0x000000000063768c in call1 (fn=..., arg1=...) at eval.c:2552
No locals.
#47 0x0000000000644f36 in mapcar1 (leni=1, vals=0x7fffffffa720, fn=..., seq=...) at fns.c:2522
        tail = {
          i = 19025347
        }
        dummy = {
          i = 0
        }
        i = 0
#48 0x00000000006453c7 in Fmapcar (function=..., sequence=...) at fns.c:2587
        len = {
          i = 1
        }
        leni = 1
        args = 0x7fffffffa720
        ret = {
          i = 8
        }
        sa_avail = 16376
        sa_count = 17
        sa_must_free = false
#49 0x0000000000637d66 in Ffuncall (nargs=3, args=0x7fffffffa8a8) at eval.c:2696
        internal_argbuf = {{
            i = 0
          }, {
            i = 5747687
          }, {
            i = 140737488332896
          }, {
            i = 14289136
          }, {
            i = 0
          }, {
            i = 6537166
          }, {
            i = 140737488332928
          }, {
            i = 5740786
          }}
        fun = {
          i = 13750461
        }
        original_fun = {
          i = 209392
        }
        funcar = {
          i = 0
        }
        numargs = 2
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 140737488332880
        }
        internal_args = 0x7fffffffa8b0
        count = 16
#50 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=2, args=0x7fffffffb098) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 16
        op = 2
        vectorp = 0x14a5498
        stack = {
          pc = 0x1c8d0c9 "\202\f\001\361C\002G\357\362\363\364\365\366\006\a\006\a\"\367\"\370\371%\005\"\266\202\026 <at> h\372=\204\030\001\307\325!\210\353\373!\210\353\374!\210\016A\375=\204-\001\376\377\016@\"\210\353\201B", 
          byte_string = {
            i = 17213076
          }, 
          byte_string_start = 0x1c8cfd8 "\306 \210\b\206\b", 
          next = 0x7fffffffb640
        }
        top = 0x7fffffffa8a8
        result = {
          i = 30046245
        }
        type = CATCHER
#51 0x000000000063873d in funcall_lambda (fun=..., nargs=2, arg_vector=0x7fffffffb088) at eval.c:2855
        size = 5
        val = {
          i = 21649109
        }
        syms_left = {
          i = 2054
        }
        next = {
          i = 60133946176
        }
        lexenv = {
          i = 140737488334688
        }
        count = 16
        i = 60143831280
        optional = true
        rest = false
#52 0x0000000000637fbb in Ffuncall (nargs=3, args=0x7fffffffb080) at eval.c:2742
        fun = {
          i = 21649109
        }
        original_fun = {
          i = 13482336
        }
        funcar = {
          i = 140737488334832
        }
        numargs = 2
        lisp_numargs = {
          i = 0
        }
        val = {
          i = 30046245
        }
        internal_args = 0x1a58470
        count = 15
#53 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=2, args=0x7fffffffb828) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 15
        op = 2
        vectorp = 0x145b220
        stack = {
          pc = 0x1c8cbc6 "\207", 
          byte_string = {
            i = 27807924
          }, 
          byte_string_start = 0x1c8cbb8 "\300\301\003\206\a", 
          next = 0x7fffffffbde0
        }
        top = 0x7fffffffb080
        result = {
          i = 29812948
        }
        type = CATCHER
#54 0x000000000063873d in funcall_lambda (fun=..., nargs=2, arg_vector=0x7fffffffb818) at eval.c:2855
        size = 5
        val = {
          i = 21344837
        }
        syms_left = {
          i = 3078
        }
        next = {
          i = 60143286381
        }
        lexenv = {
          i = 140737488336624
        }
        count = 15
        i = 60143831280
        optional = false
        rest = false
#55 0x0000000000637fbb in Ffuncall (nargs=3, args=0x7fffffffb810) at eval.c:2742
        fun = {
          i = 21344837
        }
        original_fun = {
          i = 4911488
        }
        funcar = {
          i = 19025347
        }
        numargs = 2
        lisp_numargs = {
          i = 19025267
        }
        val = {
          i = 29812852
        }
        internal_args = 0x609b49 <Fcons+274>
        count = 14
#56 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffbec8) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 14
        op = 2
        vectorp = 0x1459098
        stack = {
          pc = 0x1c98a00 "\207", 
          byte_string = {
            i = 27970292
          }, 
          byte_string_start = 0x1c989a8 "\001\300\235\203\n", 
          next = 0x7fffffffc980
        }
        top = 0x7fffffffb810
        result = {
          i = 0
        }
        type = CATCHER
#57 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffbec0) at eval.c:2855
        size = 6
        val = {
          i = 0
        }
        syms_left = {
          i = 2050
        }
        next = {
          i = 140737488338544
        }
        lexenv = {
          i = 140737488338592
        }
        count = 14
        i = 14289136
        optional = false
        rest = false
#58 0x000000000063839c in apply_lambda (fun=..., args=..., count=13) at eval.c:2794
        args_left = {
          i = 0
        }
        i = 1
        numargs = 1
        arg_vector = 0x7fffffffbec0
        tem = {
          i = 43632
        }
        sa_avail = 16376
        sa_count = 14
        sa_must_free = false
#59 0x0000000000636629 in eval_sub (form=...) at eval.c:2211
        fun = {
          i = 21332837
        }
        val = {
          i = 43632
        }
        original_fun = {
          i = 4911008
        }
        original_args = {
          i = 18499859
        }
        funcar = {
          i = 9168
        }
        count = 13
        argvals = {{
            i = 18499603
          }, {
            i = 13744888
          }, {
            i = 140737488339072
          }, {
            i = 14289136
          }, {
            i = 0
          }, {
            i = 42963417848
          }, {
            i = 140737488339088
          }, {
            i = 5740786
          }}
#60 0x00000000006312fa in Fprogn (body=...) at eval.c:426
        val = {
          i = 43632
        }
#61 0x0000000000636035 in eval_sub (form=...) at eval.c:2119
        args_left = {
          i = 18500019
        }
        numargs = {
          i = 10
        }
        fun = {
          i = 13744893
        }
        val = {
          i = 21474836480
        }
        original_fun = {
          i = 37296
        }
        original_args = {
          i = 18500019
        }
        funcar = {
          i = 0
        }
        count = 12
        argvals = {{
            i = 140737488339440
          }, {
            i = 6525521
          }, {
            i = 0
          }, {
            i = 14316352
          }, {
            i = 27216
          }, {
            i = 13746040
          }, {
            i = 0
          }, {
            i = 14316352
          }}
#62 0x0000000000635a13 in Feval (form=..., lexical=...) at eval.c:1988
        count = 11
#63 0x0000000000637d66 in Ffuncall (nargs=2, args=0x7fffffffc390) at eval.c:2696
        internal_argbuf = {{
            i = 18500259
          }, {
            i = 0
          }, {
            i = 140737488339696
          }, {
            i = 14289136
          }, {
            i = 23258208
          }, {
            i = 6569068
          }, {
            i = 140737488339728
          }, {
            i = 5740786
          }}
        fun = {
          i = 13746045
        }
        original_fun = {
          i = 18144
        }
        funcar = {
          i = 0
        }
        numargs = 1
        lisp_numargs = {
          i = 18500259
        }
        val = {
          i = 18500259
        }
        internal_args = 0x7fffffffc2c0
        count = 10
#64 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffcb48) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 8
        op = 1
        vectorp = 0xad11d8 <pure+1224088>
        stack = {
          pc = 0xc9ed21 <pure+3115233> "\210\202L\003\016A权\317\001\313\347\350\016C\"\003\206m\001\n\211A\022\242\211\262\r\313\332\036D\322\003\003\003#)\266\203\203\211\001\006\n\327\313O\262\vڲ\001\351\352\006\f!!\262\v\211\203\252\001\314\016E\006\fC\"\026E\006\t\203\313\001\016E\262\n\202\313\001\006\t\203\301\001\006\t\006\v\006\vAB\241\210\006\tA\262\n\202\313\001\006\n\016EB\211\026E\262\n\210\202L\003\016A띃\367\001\352\002\206\340\001\n\211A\022\242!\351\001!\354\001!\203\355\001\211\262\002\355\002\313\332#\266\003\202L\003\016A\027\002\352\002\206\b\002\n\211A\022\242!\351\001!\355\001\313ډ$\266\003\202L\003\016", <incomplete sequence \357\232>..., 
          byte_string = {
            i = 11342260
          }, 
          byte_string_start = 0xc9ebce <pure+3114894> "\306 \210\b\203\021", 
          next = 0x7fffffffd180
        }
        top = 0x7fffffffc390
        result = {
          i = 0
        }
        type = CATCHER
#65 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffcb40) at eval.c:2855
        size = 5
        val = {
          i = 11342213
        }
        syms_left = {
          i = 1030
        }
        next = {
          i = 64424495632
        }
        lexenv = {
          i = 140737488341552
        }
        count = 8
        i = 60143831280
        optional = false
        rest = false
#66 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffffcb38) at eval.c:2742
        fun = {
          i = 11342213
        }
        original_fun = {
          i = 9027824
        }
        funcar = {
          i = 28191699
        }
        numargs = 1
        lisp_numargs = {
          i = 14936768
        }
        val = {
          i = 45936
        }
        internal_args = 0x61560f <find_symbol_value+337>
        count = 7
#67 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffd348) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 7
        op = 1
        vectorp = 0xacb7e8 <pure+1201064>
        stack = {
          pc = 0xca176d <pure+3126061> "\210\307\016@\211\203k\006\211@\002\204d\006\211;\203d\006\201", <incomplete sequence \316>, 
          byte_string = {
            i = 11319236
          }, 
          byte_string_start = 0xca114c <pure+3124492> "\306 \020\307\021\n\023\307\024\310\311!\211\307=\204\060", 
          next = 0x7fffffffd940
        }
        top = 0x7fffffffcb38
        result = {
          i = 28191699
        }
        type = CONDITION_CASE
#68 0x000000000063873d in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffd348) at eval.c:2855
        size = 5
        val = {
          i = 11319189
        }
        syms_left = {
          i = 2
        }
        next = {
          i = 60143277141
        }
        lexenv = {
          i = 140737488343600
        }
        count = 7
        i = 60143831280
        optional = false
        rest = false
#69 0x0000000000637fbb in Ffuncall (nargs=1, args=0x7fffffffd340) at eval.c:2742
        fun = {
          i = 11319189
        }
        original_fun = {
          i = 9025296
        }
        funcar = {
          i = 18594869
        }
        numargs = 0
        lisp_numargs = {
          i = 43248
        }
        val = {
          i = 18594869
        }
        internal_args = 0x61560f <find_symbol_value+337>
        count = 6
#70 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffda20) at bytecode.c:880
        targets = {0x68989f <exec_byte_code+18714>, 0x68990c <exec_byte_code+18823>, 0x68990e <exec_byte_code+18825>, 0x689910 <exec_byte_code+18827>, 0x689912 <exec_byte_code+18829>, 0x689912 <exec_byte_code+18829>, 0x689978 <exec_byte_code+18931>, 0x6899e8 <exec_byte_code+19043>, 0x685480 <exec_byte_code+1275>, 0x685482 <exec_byte_code+1277>, 0x685484 <exec_byte_code+1279>, 0x685486 <exec_byte_code+1281>, 0x685488 <exec_byte_code+1283>, 0x685488 <exec_byte_code+1283>, 0x685491 <exec_byte_code+1292>, 0x68544b <exec_byte_code+1222>, 0x685a8d <exec_byte_code+2824>, 0x685a8f <exec_byte_code+2826>, 0x685a91 <exec_byte_code+2828>, 0x685a93 <exec_byte_code+2830>, 0x685a95 <exec_byte_code+2832>, 0x685a95 <exec_byte_code+2832>, 0x685ad3 <exec_byte_code+2894>, 0x685a9e <exec_byte_code+2841>, 0x685da3 <exec_byte_code+3614>, 0x685da5 <exec_byte_code+3616>, 0x685da7 <exec_byte_code+3618>, 0x685da9 <exec_byte_code+3620>, 0x685dab <exec_byte_code+3622>, 0x685dab <exec_byte_code+3622>, 0x685d54 <exec_byte_code+3535>, 0x685d6e <exec_byte_code+3561>, 0x685e66 <exec_byte_code+3809>, 0x685e68 <exec_byte_code+3811>, 0x685e6a <exec_byte_code+3813>, 0x685e6c <exec_byte_code+3815>, 0x685e6e <exec_byte_code+3817>, 0x685e6e <exec_byte_code+3817>, 0x685e17 <exec_byte_code+3730>, 0x685e31 <exec_byte_code+3756>, 0x685f31 <exec_byte_code+4012>, 0x685f33 <exec_byte_code+4014>, 0x685f35 <exec_byte_code+4016>, 0x685f37 <exec_byte_code+4018>, 0x685f39 <exec_byte_code+4020>, 0x685f39 <exec_byte_code+4020>, 0x685ee2 <exec_byte_code+3933>, 0x685efc <exec_byte_code+3959>, 0x686eee <exec_byte_code+8041>, 0x686da0 <exec_byte_code+7707>, 0x686d94 <exec_byte_code+7695>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x687135 <exec_byte_code+8624>, 0x687260 <exec_byte_code+8923>, 0x6872ce <exec_byte_code+9033>, 0x68733d <exec_byte_code+9144>, 0x6873ad <exec_byte_code+9256>, 0x6858a8 <exec_byte_code+2339>, 0x685937 <exec_byte_code+2482>, 0x687435 <exec_byte_code+9392>, 0x6857c2 <exec_byte_code+2109>, 0x6859a6 <exec_byte_code+2593>, 0x6874ab <exec_byte_code+9510>, 0x68751a <exec_byte_code+9621>, 0x687563 <exec_byte_code+9694>, 0x6875d2 <exec_byte_code+9805>, 0x687628 <exec_byte_code+9891>, 0x68770a <exec_byte_code+10117>, 0x687753 <exec_byte_code+10190>, 0x6877c2 <exec_byte_code+10301>, 0x687854 <exec_byte_code+10447>, 0x68789d <exec_byte_code+10520>, 0x6878e6 <exec_byte_code+10593>, 0x687955 <exec_byte_code+10704>, 0x6879c4 <exec_byte_code+10815>, 0x687a33 <exec_byte_code+10926>, 0x687ac5 <exec_byte_code+11072>, 0x687b1b <exec_byte_code+11158>, 0x687b71 <exec_byte_code+11244>, 0x687c53 <exec_byte_code+11470>, 0x687ced <exec_byte_code+11624>, 0x687d87 <exec_byte_code+11778>, 0x688027 <exec_byte_code+12450>, 0x68809b <exec_byte_code+12566>, 0x68810f <exec_byte_code+12682>, 0x688183 <exec_byte_code+12798>, 0x6881f7 <exec_byte_code+12914>, 0x68824d <exec_byte_code+13000>, 0x6882eb <exec_byte_code+13158>, 0x688341 <exec_byte_code+13244>, 0x688397 <exec_byte_code+13330>, 0x6883ed <exec_byte_code+13416>, 0x688508 <exec_byte_code+13699>, 0x686c2b <exec_byte_code+7334>, 0x68856b <exec_byte_code+13798>, 0x6885b4 <exec_byte_code+13871>, 0x68868e <exec_byte_code+14089>, 0x6886f1 <exec_byte_code+14188>, 0x688754 <exec_byte_code+14287>, 0x68879d <exec_byte_code+14360>, 0x6887ef <exec_byte_code+14442>, 0x688841 <exec_byte_code+14524>, 0x68889b <exec_byte_code+14614>, 0x68989f <exec_byte_code+18714>, 0x6888f4 <exec_byte_code+14703>, 0x68893b <exec_byte_code+14774>, 0x688982 <exec_byte_code+14845>, 0x6889c9 <exec_byte_code+14916>, 0x688a10 <exec_byte_code+14987>, 0x688a57 <exec_byte_code+15058>, 0x686c2b <exec_byte_code+7334>, 0x68989f <exec_byte_code+18714>, 0x688aa0 <exec_byte_code+15131>, 0x688af4 <exec_byte_code+15215>, 0x688b3d <exec_byte_code+15288>, 0x688b86 <exec_byte_code+15361>, 0x688bf5 <exec_byte_code+15472>, 0x688c64 <exec_byte_code+15583>, 0x688cad <exec_byte_code+15656>, 0x688ddd <exec_byte_code+15960>, 0x688e4c <exec_byte_code+16071>, 0x688ebb <exec_byte_code+16182>, 0x688f2a <exec_byte_code+16293>, 0x688f71 <exec_byte_code+16364>, 0x68989f <exec_byte_code+18714>, 0x686b5f <exec_byte_code+7130>, 0x685fe2 <exec_byte_code+4189>, 0x685665 <exec_byte_code+1760>, 0x686109 <exec_byte_code+4484>, 0x686266 <exec_byte_code+4833>, 0x6863b4 <exec_byte_code+5167>, 0x686ae4 <exec_byte_code+7007>, 0x686b2a <exec_byte_code+7077>, 0x685cfd <exec_byte_code+3448>, 0x686bec <exec_byte_code+7271>, 0x686c5d <exec_byte_code+7384>, 0x686ce4 <exec_byte_code+7519>, 0x686d23 <exec_byte_code+7582>, 0x686f2d <exec_byte_code+8104>, 0x686fb5 <exec_byte_code+8240>, 0x687047 <exec_byte_code+8386>, 0x6870ab <exec_byte_code+8486>, 0x685f96 <exec_byte_code+4113>, 0x688fba <exec_byte_code+16437>, 0x68904c <exec_byte_code+16583>, 0x689095 <exec_byte_code+16656>, 0x6890de <exec_byte_code+16729>, 0x689127 <exec_byte_code+16802>, 0x689170 <exec_byte_code+16875>, 0x6891df <exec_byte_code+16986>, 0x68924e <exec_byte_code+17097>, 0x6892bd <exec_byte_code+17208>, 0x68932c <exec_byte_code+17319>, 0x6894b1 <exec_byte_code+17708>, 0x689520 <exec_byte_code+17819>, 0x68958f <exec_byte_code+17930>, 0x6895d8 <exec_byte_code+18003>, 0x689647 <exec_byte_code+18114>, 0x6896b6 <exec_byte_code+18225>, 0x689710 <exec_byte_code+18315>, 0x68976a <exec_byte_code+18405>, 0x688443 <exec_byte_code+13502>, 0x688499 <exec_byte_code+13588>, 0x6897c0 <exec_byte_code+18491>, 0x689830 <exec_byte_code+18603>, 0x68989f <exec_byte_code+18714>, 0x686502 <exec_byte_code+5501>, 0x6865fc <exec_byte_code+5751>, 0x686738 <exec_byte_code+6067>, 0x686874 <exec_byte_code+6383>, 0x6869ac <exec_byte_code+6695>, 0x68767e <exec_byte_code+9977>, 0x687bc7 <exec_byte_code+11330>, 0x688602 <exec_byte_code+13949>, 0x689a7f <exec_byte_code+19194>, 0x689af2 <exec_byte_code+19309>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689b8c <exec_byte_code+19463>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x68989f <exec_byte_code+18714>, 0x689c26 <exec_byte_code+19617> <repeats 64 times>}
        count = 5
        op = 0
        vectorp = 0xaca850 <pure+1197072>
        stack = {
          pc = 0xca1e51 <pure+3127825> "\210)\210\375\376\377\"\210\201H", 
          byte_string = {
            i = 11315244
          }, 
          byte_string_start = 0xca1cdd <pure+3127453> "\b\203\b", 
          next = 0x0
        }
        top = 0x7fffffffd340
        result = {
          i = 15079300
        }
        type = CATCHER
#71 0x000000000063873d in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffda20) at eval.c:2855
        size = 5
        val = {
          i = 140737488345584
        }
        syms_left = {
          i = 2
        }
        next = {
          i = 0
        }
        lexenv = {
          i = 0
        }
        count = 5
        i = 0
        optional = false
        rest = false
#72 0x000000000063839c in apply_lambda (fun=..., args=..., count=4) at eval.c:2794
        args_left = {
          i = 0
        }
        i = 0
        numargs = 0
        arg_vector = 0x7fffffffda20
        tem = {
          i = 0
        }
        sa_avail = 16384
        sa_count = 5
        sa_must_free = false
#73 0x0000000000636629 in eval_sub (form=...) at eval.c:2211
        fun = {
          i = 11315197
        }
        val = {
          i = 21474836480
        }
        original_fun = {
          i = 8974768
        }
        original_args = {
          i = 0
        }
        funcar = {
          i = 0
        }
        count = 4
        argvals = {{
            i = 140737488346080
          }, {
            i = 6525521
          }, {
            i = 0
          }, {
            i = 14316352
          }, {
            i = 27216
          }, {
            i = 5740786
          }, {
            i = 0
          }, {
            i = 14316352
          }}
#74 0x0000000000635a13 in Feval (form=..., lexical=...) at eval.c:1988
        count = 3
#75 0x00000000005838b8 in top_level_2 () at keyboard.c:1116
No locals.
#76 0x0000000000633fcb in internal_condition_case (bfun=0x58389b <top_level_2>, handlers=..., hfun=0x583296 <cmd_error>) at eval.c:1309
        val = {
          i = 18149064
        }
        c = 0x114efc0
#77 0x00000000005838f9 in top_level_1 (ignore=...) at keyboard.c:1124
No locals.
#78 0x0000000000633539 in internal_catch (tag=..., func=0x5838ba <top_level_1>, arg=...) at eval.c:1074
        val = {
          i = 140737278924728
        }
        c = 0x114ee90
#79 0x00000000005837f1 in command_loop () at keyboard.c:1085
No locals.
#80 0x0000000000582d8d in recursive_edit_1 () at keyboard.c:692
        count = 1
        val = {
          i = 140737488346448
        }
#81 0x0000000000582f89 in Frecursive_edit () at keyboard.c:763
        count = 0
        buffer = {
          i = 0
        }
#82 0x0000000000580bfb in main (argc=4, argv=0x7fffffffdf38) at emacs.c:1626
        dummy = {
          i = 4131212846
        }
        stack_bottom_variable = -1 '\377'
        do_initial_setlocale = true
        dumping = false
        skip_args = 0
        rlim = {
          rlim_cur = 8720000, 
          rlim_max = 18446744073709551615
        }
        no_loadup = false
        junk = 0x0
        dname_arg = 0x0
        ch_to_dir = 0x0
        original_pwd = 0x0

Lisp Backtrace:
"string-match" (0xffff5df8)
"widget-documentation-string-value-create" (0xffff66d8)
"widget-apply" (0xffff6828)
"widget-default-create" (0xffff70b8)
"widget-apply" (0xffff71e0)
"widget-create-child-and-convert" (0xffff7978)
"apply" (0xffff7b80)
"widget-add-documentation-string-button" (0xffff8358)
"custom-face-value-create" (0xffff8c38)
"widget-apply" (0xffff8d88)
"widget-default-create" (0xffff9618)
"widget-apply" (0xffff9738)
"widget-create" (0xffff9eb8)
0x145c310 PVEC_COMPILED
"mapcar" (0xffffa8b0)
"custom-buffer-create-internal" (0xffffb088)
"custom-buffer-create" (0xffffb818)
"customize-face" (0xffffbec0)
"progn" (0xffffc120)
"eval" (0xffffc398)
"command-line-1" (0xffffcb40)
"command-line" (0xffffd348)
"normal-top-level" (0xffffda20)
(gdb) backtrace
#0  terminate_due_to_signal (sig=6, backtrace_limit=2147483647) at emacs.c:354
#1  0x00000000006122e6 in die (msg=0x732ed0 "CHAR_VALID_P (ch)", file=0x732ec4 "character.h", line=703) at alloc.c:7223
#2  0x000000000057c60d in char_table_translate (obj=..., ch=4195776) at character.h:703
#3  0x00000000005fe182 in re_search_2 (bufp=0xd76160 <searchbufs+5792>, str1=0x0, size1=0, str2=0x1ae6898 "‘\240’", size2=7, startpos=0, range=1, regs=0xd766f0 <search_regs>, stop=7) at regex.c:4370
#4  0x00000000005fdcef in re_search (bufp=0xd76160 <searchbufs+5792>, string=0x1ae6898 "‘\240’", size=7, startpos=0, range=7, regs=0xd766f0 <search_regs>) at regex.c:4228
#5  0x00000000005ea018 in string_match_1 (regexp=..., string=..., start=..., posix=false) at search.c:404
#6  0x00000000005ea18d in Fstring_match (regexp=..., string=..., start=...) at search.c:444
#7  0x0000000000637da1 in Ffuncall (nargs=3, args=0x7fffffff5df0) at eval.c:2700
#8  0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff66e0) at bytecode.c:880
#9  0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff66d8) at eval.c:2855
#10 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff66d0) at eval.c:2742
#11 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff66d0) at eval.c:2274
#12 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff6828) at fns.c:2931
#13 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff6820) at eval.c:2673
#14 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff70c0) at bytecode.c:880
#15 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff70b8) at eval.c:2855
#16 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff70b0) at eval.c:2742
#17 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff70b0) at eval.c:2274
#18 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff71e0) at fns.c:2931
#19 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff71d8) at eval.c:2673
#20 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=7, args=0x7fffffff7988) at bytecode.c:880
#21 0x000000000063873d in funcall_lambda (fun=..., nargs=7, arg_vector=0x7fffffff7978) at eval.c:2855
#22 0x0000000000637fbb in Ffuncall (nargs=8, args=0x7fffffff7970) at eval.c:2742
#23 0x0000000000636fb6 in Fapply (nargs=6, args=0x7fffffff7b80) at eval.c:2321
#24 0x0000000000637bef in Ffuncall (nargs=7, args=0x7fffffff7b78) at eval.c:2673
#25 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=3, args=0x7fffffff8360) at bytecode.c:880
#26 0x000000000063873d in funcall_lambda (fun=..., nargs=3, arg_vector=0x7fffffff8358) at eval.c:2855
#27 0x0000000000637fbb in Ffuncall (nargs=4, args=0x7fffffff8350) at eval.c:2742
#28 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff8c40) at bytecode.c:880
#29 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff8c38) at eval.c:2855
#30 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff8c30) at eval.c:2742
#31 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff8c30) at eval.c:2274
#32 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff8d88) at fns.c:2931
#33 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff8d80) at eval.c:2673
#34 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffff9620) at bytecode.c:880
#35 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffff9618) at eval.c:2855
#36 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffff9610) at eval.c:2742
#37 0x000000000063697b in Fapply (nargs=3, args=0x7fffffff9610) at eval.c:2274
#38 0x000000000064631d in Fwidget_apply (nargs=2, args=0x7fffffff9738) at fns.c:2931
#39 0x0000000000637bef in Ffuncall (nargs=3, args=0x7fffffff9730) at eval.c:2673
#40 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=9, args=0x7fffffff9ec0) at bytecode.c:880
#41 0x000000000063873d in funcall_lambda (fun=..., nargs=9, arg_vector=0x7fffffff9eb8) at eval.c:2855
#42 0x0000000000637fbb in Ffuncall (nargs=10, args=0x7fffffff9eb0) at eval.c:2742
#43 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffa680) at bytecode.c:880
#44 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffa678) at eval.c:2855
#45 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffffa670) at eval.c:2742
#46 0x000000000063768c in call1 (fn=..., arg1=...) at eval.c:2552
#47 0x0000000000644f36 in mapcar1 (leni=1, vals=0x7fffffffa720, fn=..., seq=...) at fns.c:2522
#48 0x00000000006453c7 in Fmapcar (function=..., sequence=...) at fns.c:2587
#49 0x0000000000637d66 in Ffuncall (nargs=3, args=0x7fffffffa8a8) at eval.c:2696
#50 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=2, args=0x7fffffffb098) at bytecode.c:880
#51 0x000000000063873d in funcall_lambda (fun=..., nargs=2, arg_vector=0x7fffffffb088) at eval.c:2855
#52 0x0000000000637fbb in Ffuncall (nargs=3, args=0x7fffffffb080) at eval.c:2742
#53 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=2, args=0x7fffffffb828) at bytecode.c:880
#54 0x000000000063873d in funcall_lambda (fun=..., nargs=2, arg_vector=0x7fffffffb818) at eval.c:2855
#55 0x0000000000637fbb in Ffuncall (nargs=3, args=0x7fffffffb810) at eval.c:2742
#56 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffbec8) at bytecode.c:880
#57 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffbec0) at eval.c:2855
#58 0x000000000063839c in apply_lambda (fun=..., args=..., count=13) at eval.c:2794
#59 0x0000000000636629 in eval_sub (form=...) at eval.c:2211
#60 0x00000000006312fa in Fprogn (body=...) at eval.c:426
#61 0x0000000000636035 in eval_sub (form=...) at eval.c:2119
#62 0x0000000000635a13 in Feval (form=..., lexical=...) at eval.c:1988
#63 0x0000000000637d66 in Ffuncall (nargs=2, args=0x7fffffffc390) at eval.c:2696
#64 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=1, args=0x7fffffffcb48) at bytecode.c:880
#65 0x000000000063873d in funcall_lambda (fun=..., nargs=1, arg_vector=0x7fffffffcb40) at eval.c:2855
#66 0x0000000000637fbb in Ffuncall (nargs=2, args=0x7fffffffcb38) at eval.c:2742
#67 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffd348) at bytecode.c:880
#68 0x000000000063873d in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffd348) at eval.c:2855
#69 0x0000000000637fbb in Ffuncall (nargs=1, args=0x7fffffffd340) at eval.c:2742
#70 0x0000000000685ea8 in exec_byte_code (bytestr=..., vector=..., maxdepth=..., args_template=..., nargs=0, args=0x7fffffffda20) at bytecode.c:880
#71 0x000000000063873d in funcall_lambda (fun=..., nargs=0, arg_vector=0x7fffffffda20) at eval.c:2855
#72 0x000000000063839c in apply_lambda (fun=..., args=..., count=4) at eval.c:2794
#73 0x0000000000636629 in eval_sub (form=...) at eval.c:2211
#74 0x0000000000635a13 in Feval (form=..., lexical=...) at eval.c:1988
#75 0x00000000005838b8 in top_level_2 () at keyboard.c:1116
#76 0x0000000000633fcb in internal_condition_case (bfun=0x58389b <top_level_2>, handlers=..., hfun=0x583296 <cmd_error>) at eval.c:1309
#77 0x00000000005838f9 in top_level_1 (ignore=...) at keyboard.c:1124
#78 0x0000000000633539 in internal_catch (tag=..., func=0x5838ba <top_level_1>, arg=...) at eval.c:1074
#79 0x00000000005837f1 in command_loop () at keyboard.c:1085
#80 0x0000000000582d8d in recursive_edit_1 () at keyboard.c:692
#81 0x0000000000582f89 in Frecursive_edit () at keyboard.c:763
#82 0x0000000000580bfb in main (argc=4, argv=0x7fffffffdf38) at emacs.c:1626

Lisp Backtrace:
"string-match" (0xffff5df8)
"widget-documentation-string-value-create" (0xffff66d8)
"widget-apply" (0xffff6828)
"widget-default-create" (0xffff70b8)
"widget-apply" (0xffff71e0)
"widget-create-child-and-convert" (0xffff7978)
"apply" (0xffff7b80)
"widget-add-documentation-string-button" (0xffff8358)
"custom-face-value-create" (0xffff8c38)
"widget-apply" (0xffff8d88)
"widget-default-create" (0xffff9618)
"widget-apply" (0xffff9738)
"widget-create" (0xffff9eb8)
0x145c310 PVEC_COMPILED
"mapcar" (0xffffa8b0)
"custom-buffer-create-internal" (0xffffb088)
"custom-buffer-create" (0xffffb818)
"customize-face" (0xffffbec0)
"progn" (0xffffc120)
"eval" (0xffffc398)
"command-line-1" (0xffffcb40)
"command-line" (0xffffd348)
"normal-top-level" (0xffffda20)
(gdb) 

In GNU Emacs 25.1.53 (x86_64-unknown-linux-gnu, GTK+ Version 3.10.8)
 of 2016-08-11 built on unknown
Repository revision: d2db5dd8358f132252c8d11d40b1457615c43a57
Windowing system distributor 'The X.Org Foundation', version 11.0.11702000
System Description:	Ubuntu 14.04 LTS

Configured using:
 'configure --enable-checking --enable-check-lisp-object-type
 'CFLAGS=-g3 -O0 -gdwarf-4''

Configured features:
XPM JPEG TIFF GIF PNG SOUND GSETTINGS NOTIFY GNUTLS FREETYPE XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message dired format-spec rfc822 mml
mml-sec password-cache epg epg-config gnus-util mm-decode mm-bodies
mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail
rfc2047 rfc2045 ietf-drums mm-util help-fns help-mode easymenu
cl-loaddefs pcase cl-lib mail-prsvr mail-utils time-date mule-util
tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type
mwheel x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt
fringe tabulated-list newcomment elisp-mode lisp-mode prog-mode register
page menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock
font-lock syntax facemenu font-core frame cl-generic cham georgian
utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean
japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european
ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote inotify dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 88111 5027)
 (symbols 48 19695 0)
 (miscs 40 298 147)
 (strings 32 14560 4939)
 (string-bytes 1 425838)
 (vectors 16 12636)
 (vector-slots 8 440301 4619)
 (floats 8 164 22)
 (intervals 56 196 0)
 (buffers 976 20)
 (heap 1024 40436 1149))




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 11 Aug 2016 20:06:01 GMT) Full text and rfc822 format available.

Message #8 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Phil <p.stephani2 <at> gmail.com>
Cc: 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Thu, 11 Aug 2016 23:05:08 +0300
> From: Phil <p.stephani2 <at> gmail.com>
> Date: Thu, 11 Aug 2016 11:55:05 -0700
> 
> 
> Build is from the emacs-25 branch.
> 
> $ ./emacs -Q -eval "(progn (defface test nil \"\`\\240'\") (customize-face 'test))"
> 
> character.h:703: Emacs fatal error: assertion failed: CHAR_VALID_P (ch)
> Fatal error 6: Aborted
> 
> I think this is serious enough to be release-blocking.  Seen in the wild
> with older versions of show-wspace.el.

Please show the real-life example where this rears its ugly head.  The
recipe (which is appreciated) is obscure enough to be easily avoided,
so it doesn't yet convince me this should block a release.  There's
always one more crash out there.

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 11 Aug 2016 23:52:01 GMT) Full text and rfc822 format available.

Message #11 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Philipp Stephani <p.stephani2 <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Thu, 11 Aug 2016 23:51:41 +0000
[Message part 1 (text/plain, inline)]
Eli Zaretskii <eliz <at> gnu.org> schrieb am Do., 11. Aug. 2016 um 13:05 Uhr:

> > From: Phil <p.stephani2 <at> gmail.com>
> > Date: Thu, 11 Aug 2016 11:55:05 -0700
> >
> >
> > Build is from the emacs-25 branch.
> >
> > $ ./emacs -Q -eval "(progn (defface test nil \"\`\\240'\")
> (customize-face 'test))"
> >
> > character.h:703: Emacs fatal error: assertion failed: CHAR_VALID_P (ch)
> > Fatal error 6: Aborted
> >
> > I think this is serious enough to be release-blocking.  Seen in the wild
> > with older versions of show-wspace.el.
>
> Please show the real-life example where this rears its ugly head.  The
> recipe (which is appreciated) is obscure enough to be easily avoided,
> so it doesn't yet convince me this should block a release.  There's
> always one more crash out there.
>
>
Ubuntu Trusty Tahr (supported until 2019) contains a package
emacs-goodies-el, which contains a file show-wspace.el, which contains a
face with the docstring "*Face for highlighting non-breaking spaces
(`\240')in Font-Lock mode." Attempting to customize that face leads to the
segfault.
[Message part 2 (text/html, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sat, 13 Aug 2016 08:34:02 GMT) Full text and rfc822 format available.

Message #14 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Philipp Stephani <p.stephani2 <at> gmail.com>, John Wiegley <johnw <at> gnu.org>
Cc: 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Sat, 13 Aug 2016 11:32:47 +0300
> From: Philipp Stephani <p.stephani2 <at> gmail.com>
> Date: Thu, 11 Aug 2016 23:51:41 +0000
> Cc: 24206 <at> debbugs.gnu.org
> 
> Eli Zaretskii <eliz <at> gnu.org> schrieb am Do., 11. Aug. 2016 um 13:05 Uhr:
> 
>  > From: Phil <p.stephani2 <at> gmail.com>
>  > Date: Thu, 11 Aug 2016 11:55:05 -0700
>  >
>  >
>  > Build is from the emacs-25 branch.
>  >
>  > $ ./emacs -Q -eval "(progn (defface test nil \"\`\\240'\") (customize-face 'test))"
>  >
>  > character.h:703: Emacs fatal error: assertion failed: CHAR_VALID_P (ch)
>  > Fatal error 6: Aborted
>  >
>  > I think this is serious enough to be release-blocking. Seen in the wild
>  > with older versions of show-wspace.el.
> 
>  Please show the real-life example where this rears its ugly head. The
>  recipe (which is appreciated) is obscure enough to be easily avoided,
>  so it doesn't yet convince me this should block a release. There's
>  always one more crash out there.
> 
> Ubuntu Trusty Tahr (supported until 2019) contains a package emacs-goodies-el, which contains a file
> show-wspace.el, which contains a face with the docstring "*Face for highlighting non-breaking spaces
> (`\240')in Font-Lock mode." Attempting to customize that face leads to the segfault. 

John, do you want us to wait with the next RC until this is fixed?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sat, 13 Aug 2016 12:26:02 GMT) Full text and rfc822 format available.

Message #17 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Petton <nicolas <at> petton.fr>
To: Eli Zaretskii <eliz <at> gnu.org>, Philipp Stephani <p.stephani2 <at> gmail.com>,
 John Wiegley <johnw <at> gnu.org>
Cc: 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Sat, 13 Aug 2016 14:25:11 +0200
[Message part 1 (text/plain, inline)]
Eli Zaretskii <eliz <at> gnu.org> writes:

> John, do you want us to wait with the next RC until this is fixed?

I'll wait for your decision regarding this issue.

Cheers,
Nico
[signature.asc (application/pgp-signature, inline)]

Reply sent to Paul Eggert <eggert <at> cs.ucla.edu>:
You have taken responsibility. (Sun, 14 Aug 2016 04:55:02 GMT) Full text and rfc822 format available.

Notification sent to Phil <p.stephani2 <at> gmail.com>:
bug acknowledged by developer. (Sun, 14 Aug 2016 04:55:02 GMT) Full text and rfc822 format available.

Message #22 received at 24206-done <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Phil <p.stephani2 <at> gmail.com>
Cc: Eli Zaretskii <eliz <at> gnu.org>, John Wiegley <johnw <at> gnu.org>,
 Nicolas Petton <nicolas <at> petton.fr>, 24206-done <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sat, 13 Aug 2016 23:54:43 -0500
[Message part 1 (text/plain, inline)]
Thanks forreporting that, Phil. Ituncovered several bugs in 
substitute-command-keys,some predating the curved-quote changes in Emacs 
25. I installed a patch into Emacs master as commit 
2791580f5eaa65948a13ea4ea4952d03b4da795b and am closing the bug as fixed.

For Emacs 25 I propose installing the attached patch, which should avoid 
the emacs-goodies-el problem though it does not fix the other 
(presumably less-likely) bugs in this area. This patch is considerably 
simpler than what I just installed into master.

[0001-Fix-core-dump-with-unibyte-substitute-command-keys.patch (text/x-patch, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 06:34:01 GMT) Full text and rfc822 format available.

Message #25 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Nicolas Petton <nicolas <at> petton.fr>
Cc: Eli Zaretskii <eliz <at> gnu.org>, Philipp Stephani <p.stephani2 <at> gmail.com>,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Sat, 13 Aug 2016 23:33:08 -0700
[Message part 1 (text/plain, inline)]
>>>>> Nicolas Petton <nicolas <at> petton.fr> writes:

> Eli Zaretskii <eliz <at> gnu.org> writes:
>> John, do you want us to wait with the next RC until this is fixed?

> I'll wait for your decision regarding this issue.

Yes, let's wait.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 14:29:02 GMT) Full text and rfc822 format available.

Message #28 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 17:27:14 +0300
> Cc: 24206-done <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>,
>  John Wiegley <johnw <at> gnu.org>, Nicolas Petton <nicolas <at> petton.fr>
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Sat, 13 Aug 2016 23:54:43 -0500
> 
> Thanks forreporting that, Phil. Ituncovered several bugs in 
> substitute-command-keys,some predating the curved-quote changes in Emacs 
> 25. I installed a patch into Emacs master as commit 
> 2791580f5eaa65948a13ea4ea4952d03b4da795b and am closing the bug as fixed.
> 
> For Emacs 25 I propose installing the attached patch, which should avoid 
> the emacs-goodies-el problem though it does not fix the other 
> (presumably less-likely) bugs in this area. This patch is considerably 
> simpler than what I just installed into master.

Thanks for fixing this.  However, I'm not sure I agree with the fix:
it looks like it loses support for unibyte strings in
substitute-command-keys?  If so, I don't think we should go that way:
Emacs in general tries to support both unibyte and multibyte strings
alike in all the primitives that handle strings (with the obvious
exception of encoding and decoding them), so losing that here would be
a regression.

Isn't it true that the problem was in this fragment:

      else if ((strp[0] == '`' || strp[0] == '\'')
	       && quoting_style == CURVE_QUOTING_STYLE)
	{
	  start = (unsigned char const *) (strp[0] == '`' ? uLSQM : uRSQM);
	  length = 1;
	  length_byte = sizeof uLSQM - 1;
	  idx = strp - SDATA (string) + 1;
	  goto subst_quote;
	}

The "length = 1" part is only correct if the argument string is
multibyte, and should otherwise count the number of bytes in
uLSQM/uRSQ, right?  If this is not the reason for the crash, could you
please describe the reason(s) in more detail, so that we could try to
find a solution that doesn't lose unibyte string support?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 14:52:02 GMT) Full text and rfc822 format available.

Message #31 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 09:51:43 -0500
On 08/14/2016 09:27 AM, Eli Zaretskii wrote:
> The "length = 1" part is only correct if the argument string is
> multibyte, and should otherwise count the number of bytes in
> uLSQM/uRSQ, right?

This string is by definition multibyte at that point, since that part of 
the code is inserting a Unicode character that is not ASCII.

More generally, Fsubstitute_command_keys is quite confused about unibyte 
versus multibyte issues. It merges together a number of strings, and 
assumes that they are all multibyte iff the original string is 
multibyte, which is obviously not true in general. (This problem is not 
limited to the requoting part of the code.) In master, I've altered the 
implementation to always generate either the original string, or an 
ASCII string, or a multibyte string. Since substitute-command-keys is 
not intended to be used on encoded unibyte text, that's good enough.





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 15:22:01 GMT) Full text and rfc822 format available.

Message #34 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: 24206 <at> debbugs.gnu.org, eggert <at> cs.ucla.edu, p.stephani2 <at> gmail.com
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Sun, 14 Aug 2016 18:21:29 +0300
On 08/14/2016 07:54 AM, Paul Eggert wrote:
> Thanks forreporting that, Phil. Ituncovered several bugs in
> substitute-command-keys,some predating the curved-quote changes in Emacs
> 25.

So much for "this is a simple feature that's easy to implement in C".

Could you please at least add some tests corresponding to the fix? 
Instead of just hoping that nobody breaks it later.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 17:20:01 GMT) Full text and rfc822 format available.

Message #37 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 20:18:18 +0300
> Cc: p.stephani2 <at> gmail.com, 24206 <at> debbugs.gnu.org, johnw <at> gnu.org,
>  nicolas <at> petton.fr
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Sun, 14 Aug 2016 09:51:43 -0500
> 
> On 08/14/2016 09:27 AM, Eli Zaretskii wrote:
> > The "length = 1" part is only correct if the argument string is
> > multibyte, and should otherwise count the number of bytes in
> > uLSQM/uRSQ, right?
> 
> This string is by definition multibyte at that point, since that part of 
> the code is inserting a Unicode character that is not ASCII.

Sorry, I don't understand what you are saying.  The sequence of bytes
"\xE2\x80\x98" can be either a sequence of unibyte bytes or a single
multibyte character, depending on whether a string it is in is unibyte
or multibyte.

More generally, a Lisp string with the same sequence of bytes as its
data can be treated either as unibyte or as multibyte, I'm sure you
know that.  Its multibyteness is entirely in Emacs's imagination.

> More generally, Fsubstitute_command_keys is quite confused about unibyte 
> versus multibyte issues. It merges together a number of strings, and 
> assumes that they are all multibyte iff the original string is 
> multibyte, which is obviously not true in general.

Could you please point out the specific places where this is done?
Because I'm not sure I agree with your interpretation.  (Let's use the
code on emacs-25, where it was still not changed, for the purposes of
this discussion.)

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 17:23:02 GMT) Full text and rfc822 format available.

Message #40 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 20:21:43 +0300
> Cc: 24206-done <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>,
>  John Wiegley <johnw <at> gnu.org>, Nicolas Petton <nicolas <at> petton.fr>
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Sat, 13 Aug 2016 23:54:43 -0500
> 
> For Emacs 25 I propose installing the attached patch, which should avoid 
> the emacs-goodies-el problem though it does not fix the other 
> (presumably less-likely) bugs in this area. This patch is considerably 
> simpler than what I just installed into master.

Paul, would you agree with the following alternative patch for the
release branch?

Phil, is the recipe you presented in this bug _exactly_ what
emacs-goodies-el does?  If not, could you please see if the proposed
patch below fixes the real-life use case as well, and if not, show
that use case?  TIA.

diff --git a/src/doc.c b/src/doc.c
index 7cdb0d0..bba30b4 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -965,7 +965,8 @@ Otherwise, return a new string.  */)
 	  }
 	}
       else if ((strp[0] == '`' || strp[0] == '\'')
-	       && quoting_style == CURVE_QUOTING_STYLE)
+	       && quoting_style == CURVE_QUOTING_STYLE
+	       && multibyte)
 	{
 	  start = (unsigned char const *) (strp[0] == '`' ? uLSQM : uRSQM);
 	  length = 1;




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Sun, 14 Aug 2016 20:18:02 GMT) Full text and rfc822 format available.

Message #43 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 15:16:47 -0500
On 08/14/2016 12:21 PM, Eli Zaretskii wrote:
> Paul, would you agree with the following alternative patch for the
> release branch?

Sure, that patch should also prevent crash that initiated this bug 
report (though it does not fix the problem in general). Please mark it 
with "Do not merge to master".





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 01:13:02 GMT) Full text and rfc822 format available.

Message #46 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 18:12:25 -0700
Paul Eggert wrote:
> On 08/14/2016 12:21 PM, Eli Zaretskii wrote:
>> Paul, would you agree with the following alternative patch for the
>> release branch?
>
> Sure, that patch should also prevent crash that initiated this bug report
> (though it does not fix the problem in general). Please mark it with "Do not
> merge to master".
>

Whoops, I spoke too soon. Although your patch would prevent the crash, it has 
the unfortunate side effect of almost always disabling text-quoting-style, as 
the input to substitute-command-keys is normally not multibyte. So we really 
need some other fix, such as the one in <http://bugs.gnu.org/24206#22>.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 01:54:01 GMT) Full text and rfc822 format available.

Message #49 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Dmitry Gutov <dgutov <at> yandex.ru>, 24206 <at> debbugs.gnu.org,
 p.stephani2 <at> gmail.com
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Sun, 14 Aug 2016 18:53:22 -0700
Dmitry Gutov wrote:

> So much for "this is a simple feature that's easy to implement in C".

:-)  In my defense, my error was assuming that the original C implementation was 
correct, and copying its mistakes in my additions.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 01:58:01 GMT) Full text and rfc822 format available.

Message #52 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Paul Eggert <eggert <at> cs.ucla.edu>, 24206 <at> debbugs.gnu.org,
 p.stephani2 <at> gmail.com
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Mon, 15 Aug 2016 04:57:38 +0300
On 08/15/2016 04:53 AM, Paul Eggert wrote:

> :-)  In my defense, my error was assuming that the original C
> implementation was correct, and copying its mistakes in my additions.

Is it possible to trigger a segfault in the previous version, too?




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 02:05:01 GMT) Full text and rfc822 format available.

Message #55 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Sun, 14 Aug 2016 19:04:42 -0700
Eli Zaretskii wrote:
> Its multibyteness is entirely in Emacs's imagination.

Sure, but Emacs should not substitute "\342\200\230" for "`". The point of 
text-quoting-style is to substitute quotes, not byte string encodings of quotes.

>> > More generally, Fsubstitute_command_keys is quite confused about unibyte
>> > versus multibyte issues. It merges together a number of strings, and
>> > assumes that they are all multibyte iff the original string is
>> > multibyte, which is obviously not true in general.
> Could you please point out the specific places where this is done?

OK, here's a contrived example. Run this code in emacs-25:

(progn
  (setq km (make-keymap))
  (define-key km "≠" 'global-set-key)
  (substitute-command-keys "\200\\<km>\\[global-set-key]"))

This should return a 2-character string equal to "\200≠". But in Emacs 25 it 
dumps core, at least on my platform (Fedora 23 x86-64). And in Emacs 24 on my 
platform it returns a malformed string that prints as "\242\1340" but has length 
2. I suppose we could make Emacs 24 dump core too, though I haven't tried hard 
to do that.

The problem is that the older Emacs code incorrectly assumes that the output of 
substitution must be properly-encoded if the substitution changes something. 
This assumption can fail if the input is unibyte and contains bytes that are not 
properly-encoded for UTF-8. (There are other ways the assumption can fail.)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 02:06:02 GMT) Full text and rfc822 format available.

Message #58 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Dmitry Gutov <dgutov <at> yandex.ru>, 24206 <at> debbugs.gnu.org,
 p.stephani2 <at> gmail.com
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Sun, 14 Aug 2016 19:05:35 -0700
Dmitry Gutov wrote:
> Is it possible to trigger a segfault in the previous version, too?

I haven't tried hard to do that. My guess is that one can make Emacs abort, though.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 16:11:01 GMT) Full text and rfc822 format available.

Message #61 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: 25.1; Curly quotes generate invalid strings, leading to a segfault
Date: Mon, 15 Aug 2016 19:09:40 +0300
> Cc: p.stephani2 <at> gmail.com, 24206 <at> debbugs.gnu.org, johnw <at> gnu.org,
>  nicolas <at> petton.fr
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Sun, 14 Aug 2016 19:04:42 -0700
> 
> Eli Zaretskii wrote:
> > Its multibyteness is entirely in Emacs's imagination.
> 
> Sure, but Emacs should not substitute "\342\200\230" for "`". The point of 
> text-quoting-style is to substitute quotes, not byte string encodings of quotes.

I'm not sure.  We never discussed what should Emacs do when
substitute-command-keys is called on a unibyte non-ASCII string which
requires quote substitution.  Other substitutions, including those
that produce ASCII quote characters, previously would leave the
unibyte string unibyte.  But with your changes, any substitution
converts the string into multibyte:

  (multibyte-string-p (substitute-command-keys "\200\\[goto-char]"))
    => t

I think this is might be a subtle regression, because some code might
just find itself mixing multibyte and unibyte strings where previously
there were only unibyte strings.

> >> > More generally, Fsubstitute_command_keys is quite confused about unibyte
> >> > versus multibyte issues. It merges together a number of strings, and
> >> > assumes that they are all multibyte iff the original string is
> >> > multibyte, which is obviously not true in general.
> > Could you please point out the specific places where this is done?
> 
> OK, here's a contrived example. Run this code in emacs-25:
> 
> (progn
>    (setq km (make-keymap))
>    (define-key km "≠" 'global-set-key)
>    (substitute-command-keys "\200\\<km>\\[global-set-key]"))
> 
> This should return a 2-character string equal to "\200≠".

I'm not sure your expectations are correct: as the original string is
unibyte, the output of "\200≠", which is multibyte, might not be what
the users expect.  They might expect "\200\342\211\240" instead.

> But in Emacs 25 it dumps core, at least on my platform (Fedora 23
> x86-64). And in Emacs 24 on my platform it returns a malformed
> string that prints as "\242\1340" but has length 2. I suppose we
> could make Emacs 24 dump core too, though I haven't tried hard to do
> that.

The errors are easily fixed, though.  Below I show 2 patches.  The
first one should go to master (after reverting yours), and IMO is also
safe enough for emacs-25.  But if it is deemed not safe enough for the
release, the second patch is safer.  The second patch doesn't produce
"\200≠" in your test case, but neither did Emacs 24, so this is not a
regression.

Comments?  Let's decide on what to do with emacs-25 first, since that
blocks the release, and then discuss master if needed.

Thanks.

--- src/doc.c~0	2016-06-20 08:49:44.000000000 +0300
+++ src/doc.c	2016-08-15 11:24:07.894579900 +0300
@@ -738,8 +738,9 @@ Otherwise, return a new string.  */)
   unsigned char const *start;
   ptrdiff_t length, length_byte;
   Lisp_Object name;
-  bool multibyte;
+  bool multibyte, pure_ascii;
   ptrdiff_t nchars;
+  Lisp_Object orig_string = Qnil;
 
   if (NILP (string))
     return Qnil;
@@ -752,6 +753,20 @@ Otherwise, return a new string.  */)
   enum text_quoting_style quoting_style = text_quoting_style ();
 
   multibyte = STRING_MULTIBYTE (string);
+  /* Pure-ASCII unibyte input strings should produce unibyte strings
+     if substitution doesn't yield non-ASCII bytes, otherwise they
+     should produce multibyte strings.  */
+  pure_ascii = SBYTES (string) == count_size_as_multibyte (SDATA (string),
+							   SCHARS (string));
+  /* If the input string is unibyte and includes non-ASCII characters,
+     make a multibyte copy, so as to be able to return the original
+     unibyte string if no substitution eventually happens.  */
+  if (!multibyte && !pure_ascii)
+    {
+      orig_string = string;
+      string = Fstring_make_multibyte (Fcopy_sequence (string));
+      multibyte = true;
+    }
   nchars = 0;
 
   /* KEYMAP is either nil (which means search all the active keymaps)
@@ -933,8 +948,8 @@ Otherwise, return a new string.  */)
 
 	subst_string:
 	  start = SDATA (tem);
-	  length = SCHARS (tem);
 	  length_byte = SBYTES (tem);
+	  length = SCHARS (tem);
 	subst:
 	  nonquotes_changed = true;
 	subst_quote:
@@ -956,8 +971,8 @@ Otherwise, return a new string.  */)
 	       && quoting_style == CURVE_QUOTING_STYLE)
 	{
 	  start = (unsigned char const *) (strp[0] == '`' ? uLSQM : uRSQM);
-	  length = 1;
 	  length_byte = sizeof uLSQM - 1;
+	  length = 1;
 	  idx = strp - SDATA (string) + 1;
 	  goto subst_quote;
 	}
@@ -995,6 +1010,8 @@ Otherwise, return a new string.  */)
 	    }
 	}
     }
+  else if (!NILP (orig_string))
+    tem = orig_string;
   else
     tem = string;
   xfree (buf);


--- src/doc.c~0	2016-06-20 08:49:44.000000000 +0300
+++ src/doc.c	2016-08-15 11:13:15.132137200 +0300
@@ -738,7 +738,7 @@ Otherwise, return a new string.  */)
   unsigned char const *start;
   ptrdiff_t length, length_byte;
   Lisp_Object name;
-  bool multibyte;
+  bool multibyte, pure_ascii;
   ptrdiff_t nchars;
 
   if (NILP (string))
@@ -752,6 +752,11 @@ Otherwise, return a new string.  */)
   enum text_quoting_style quoting_style = text_quoting_style ();
 
   multibyte = STRING_MULTIBYTE (string);
+  /* Pure-ASCII unibyte input strings should produce unibyte strings
+     if substitution doesn't yield non-ASCII bytes, otherwise they
+     should produce multibyte strings.  */
+  pure_ascii = SBYTES (string) == count_size_as_multibyte (SDATA (string),
+							   SCHARS (string));
   nchars = 0;
 
   /* KEYMAP is either nil (which means search all the active keymaps)
@@ -933,8 +938,11 @@ Otherwise, return a new string.  */)
 
 	subst_string:
 	  start = SDATA (tem);
-	  length = SCHARS (tem);
 	  length_byte = SBYTES (tem);
+	  if (multibyte || pure_ascii)
+	    length = SCHARS (tem);
+	  else
+	    length = length_byte;
 	subst:
 	  nonquotes_changed = true;
 	subst_quote:
@@ -956,8 +964,11 @@ Otherwise, return a new string.  */)
 	       && quoting_style == CURVE_QUOTING_STYLE)
 	{
 	  start = (unsigned char const *) (strp[0] == '`' ? uLSQM : uRSQM);
-	  length = 1;
 	  length_byte = sizeof uLSQM - 1;
+	  if (multibyte || pure_ascii)
+	    length = 1;
+	  else
+	    length = length_byte;
 	  idx = strp - SDATA (string) + 1;
 	  goto subst_quote;
 	}




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 16:47:02 GMT) Full text and rfc822 format available.

Message #64 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Andreas Schwab <schwab <at> linux-m68k.org>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, Paul Eggert <eggert <at> cs.ucla.edu>, nicolas <at> petton.fr,
 johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Mon, 15 Aug 2016 18:46:19 +0200
On Aug 15 2016, Eli Zaretskii <eliz <at> gnu.org> wrote:

> I'm not sure.  We never discussed what should Emacs do when
> substitute-command-keys is called on a unibyte non-ASCII string which
> requires quote substitution.

Unibyte strings should not be used for anything but pre-decoding /
post-encoding situations directly after / before doing the actual I/O
operation.  Thus substitute-command-keys should never be called with an
undecoded unibyte string.  IMHO it would be ok to return something
useless in this case (but it shouldn't cause Emacs to crash, of course).

Andreas.

-- 
Andreas Schwab, schwab <at> linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 18:44:01 GMT) Full text and rfc822 format available.

Message #67 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Andreas Schwab <schwab <at> linux-m68k.org>, Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Mon, 15 Aug 2016 11:43:16 -0700
[Message part 1 (text/plain, inline)]
Andreas Schwab wrote:
> Unibyte strings should not be used for anything but pre-decoding /
> post-encoding situations directly after / before doing the actual I/O
> operation.  Thus substitute-command-keys should never be called with an
> undecoded unibyte string.  IMHO it would be ok to return something
> useless in this case (but it shouldn't cause Emacs to crash, of course).

Yes. This is in the Elisp manual, which says "We recommend that
you never use unibyte buffers and strings except for manipulating
encoded text or binary non-text data."

Eli Zaretskii wrote:
> as the original string is
> unibyte, the output of "\200≠", which is multibyte, might not be what
> the users expect.  They might expect "\200\342\211\240" instead.

No, as per Andreas's comment and the Elisp reference manual, users should not 
expect substitute-command-keys to do that. As long as it doesn't crash on 
non-ASCII unibyte data we needn't sweat the details about whether it returns 
unibyte or multibyte strings for such data.

That being said, it shouldn't hurt to return the original string if there is no 
substitution. Although I think your first patch in 
<http://bugs.gnu.org/24206#61> should work, it'd be safer and simpler to 
backport that part of master, as in the attached patch to emacs-25.

[0001-Fix-core-dump-with-unibyte-substitute-command-keys.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 18:53:02 GMT) Full text and rfc822 format available.

Message #70 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Andreas Schwab <schwab <at> linux-m68k.org>
Cc: p.stephani2 <at> gmail.com, eggert <at> cs.ucla.edu, nicolas <at> petton.fr, johnw <at> gnu.org,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Mon, 15 Aug 2016 21:51:37 +0300
> From: Andreas Schwab <schwab <at> linux-m68k.org>
> Cc: Paul Eggert <eggert <at> cs.ucla.edu>,  p.stephani2 <at> gmail.com,  johnw <at> gnu.org,  nicolas <at> petton.fr,  24206 <at> debbugs.gnu.org
> Date: Mon, 15 Aug 2016 18:46:19 +0200
> 
> Unibyte strings should not be used for anything but pre-decoding /
> post-encoding situations directly after / before doing the actual I/O
> operation.  Thus substitute-command-keys should never be called with an
> undecoded unibyte string.  IMHO it would be ok to return something
> useless in this case (but it shouldn't cause Emacs to crash, of course).

I mostly agree, but there's one situation where the above cannot hold:
during startup, before Emacs sets up its encoding/decoding machinery
and defaults, and decodes the relevant variables (such as load-path)
after that.  Until that is done, we cannot have multibyte strings in
Emacs, because we don't know how to decode them.  During that short
period, Emacs still calls various primitives that manipulate strings,
and they need to work with unibyte strings, because Emacs must be able
to start up in directories with non-ASCII names.

Granted, substitute-command-keys are not supposed to be called during
that period.  Or at least I think so.  But who knows?  We definitely
call it when we construct the menu-bar menus, and some user could
perhaps cause it to be called in some startup hook.

So I'm okay with changing the output for unibyte strings on master,
but I think emacs-25 should not produce multibyte strings from
substitute-command-keys more eagerly than previous versions.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 19:05:02 GMT) Full text and rfc822 format available.

Message #73 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Mon, 15 Aug 2016 22:04:18 +0300
> Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
>  24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Mon, 15 Aug 2016 11:43:16 -0700
> 
> Yes. This is in the Elisp manual, which says "We recommend that
> you never use unibyte buffers and strings except for manipulating
> encoded text or binary non-text data."

That advice is for Lisp programmers, so it's only tangentially
relevant in this case.

> Eli Zaretskii wrote:
> > as the original string is
> > unibyte, the output of "\200≠", which is multibyte, might not be what
> > the users expect.  They might expect "\200\342\211\240" instead.
> 
> No, as per Andreas's comment and the Elisp reference manual, users should not 
> expect substitute-command-keys to do that.

We still want them to be as little surprised as possible, do we?

> As long as it doesn't crash on non-ASCII unibyte data we needn't
> sweat the details about whether it returns unibyte or multibyte
> strings for such data.

I explained why this cannot be 100% true.  So I'd like to avoid
converting unibyte strings to multibyte as much as reasonably
possible.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 19:06:01 GMT) Full text and rfc822 format available.

Message #76 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, eggert <at> cs.ucla.edu,
 Andreas Schwab <schwab <at> linux-m68k.org>, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Mon, 15 Aug 2016 12:05:44 -0700
>>>>> Eli Zaretskii <eliz <at> gnu.org> writes:

> So I'm okay with changing the output for unibyte strings on master, but I
> think emacs-25 should not produce multibyte strings from
> substitute-command-keys more eagerly than previous versions.

Very much agreed.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Mon, 15 Aug 2016 20:42:01 GMT) Full text and rfc822 format available.

Message #79 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>, Andreas Schwab <schwab <at> linux-m68k.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Mon, 15 Aug 2016 13:41:44 -0700
Eli Zaretskii wrote:
> So I'm okay with changing the output for unibyte strings on master,
> but I think emacs-25 should not produce multibyte strings from
> substitute-command-keys more eagerly than previous versions.

OK, in that case the emacs-25 patch just I proposed should suffice 
<http://bugs.gnu.org/24206#67>.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 14:40:02 GMT) Full text and rfc822 format available.

Message #82 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 17:38:50 +0300
> Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, nicolas <at> petton.fr,
>  24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Mon, 15 Aug 2016 13:41:44 -0700
> 
> Eli Zaretskii wrote:
> > So I'm okay with changing the output for unibyte strings on master,
> > but I think emacs-25 should not produce multibyte strings from
> > substitute-command-keys more eagerly than previous versions.
> 
> OK, in that case the emacs-25 patch just I proposed should suffice 
> <http://bugs.gnu.org/24206#67>.

Thanks, I preferred to install one of the 2 patches I posted
yesterday.

The emacs-25 branch is ready for another RC, from my POV.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 14:54:02 GMT) Full text and rfc822 format available.

Message #85 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 17:52:55 +0300
Paul,

I've reviewed the changes you pushed to master for fixing this bug,
and I must say that most of them look like purely stylistic changes,
to make the code more to your personal liking.  The actual bugs were
very few and minor, and didn't necessitate such thorough changes.

I think we should try to avoid such thorough changes due to style,
because they risk introducing regressions into code that was working
fine for many years.  This is especially true in the absence of test
coverage for the functionality of the code that gets refactored.

One thing I find suboptimal in the new code is that you removed all
the unibyte code, and instead rely on this:

  Lisp_Object str = Fstring_make_multibyte (string);

But string-make-multibyte doesn't necessarily produce a multibyte
string, e.g.:

  (multibyte-string-p (string-make-multibyte "abcd"))
    => nil

So without any comments as to why we handle the input string as
multibyte for the rest of the function, I think this will confuse
someone down the road.

More importantly, I think the refactoring already introduced a
regression.  On the emacs-25 branch we have:

  (let ((text-quoting-style 'straight))
    (substitute-command-keys "‘balls’"))
    => "'balls'"

But on master:

  (let ((text-quoting-style 'straight))
    (substitute-command-keys "‘balls’"))
    => "‘balls’"

I think that's because this chunk of code from the original
implementation disappeared without a trace:

	  int len;
	  int ch = STRING_CHAR_AND_LENGTH (strp, len);
	  if ((ch == LEFT_SINGLE_QUOTATION_MARK
	       || ch == RIGHT_SINGLE_QUOTATION_MARK)
	      && quoting_style != CURVE_QUOTING_STYLE)
	    {
	      *bufp++ = ((ch == LEFT_SINGLE_QUOTATION_MARK
			  && quoting_style == GRAVE_QUOTING_STYLE)
			 ? '`' : '\'');
	      strp += len;
	      changed = true;
	    }

Once again, we should have a test covering functionality before we
attempt such refactoring.

Or maybe we should just go to the original code, after fixing the
immediate bugs, as I proposed in a patch yesterday?

Thanks.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 15:26:02 GMT) Full text and rfc822 format available.

Message #88 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, Paul Eggert <eggert <at> cs.ucla.edu>,
 schwab <at> linux-m68k.org, nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Tue, 16 Aug 2016 08:25:11 -0700
[Message part 1 (text/plain, inline)]
>>>>> Eli Zaretskii <eliz <at> gnu.org> writes:

> The emacs-25 branch is ready for another RC, from my POV.

Good, can you cut one for us, Nicolas?

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 16:10:02 GMT) Full text and rfc822 format available.

Message #91 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Petton <nicolas <at> petton.fr>
To: John Wiegley <jwiegley <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, Paul Eggert <eggert <at> cs.ucla.edu>,
 schwab <at> linux-m68k.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Tue, 16 Aug 2016 18:09:08 +0200
[Message part 1 (text/plain, inline)]
John Wiegley <jwiegley <at> gmail.com> writes:

> Good, can you cut one for us, Nicolas?

Yes! You'll have to wait until tomorrow though.

Cheers,
Nico
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 17:38:02 GMT) Full text and rfc822 format available.

Message #94 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 10:37:39 -0700
[Message part 1 (text/plain, inline)]
Eli Zaretskii wrote:

> I preferred to install one of the 2 patches I posted yesterday.

Let's not cut the RC now, as unfortunately that patch fails spectacularly. (I 
didn't test it yesterday; I tested your other patch, which is obviously better.) 
To reproduce the problem, run emacs -Q and "C-h f car RET"; Emacs will display 
"Wrong type argument: integer-or-marker-p, nil" instead of help.

The attached patch to emacs-25 fixes the problem. It makes the code functionally 
equivalent to the other of the 2 patches that you posted yesterday, and is 
simpler. OK to install in emacs-25?
[0001-Fix-wrong-type-argument-bug-with-C-h-f.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 17:46:02 GMT) Full text and rfc822 format available.

Message #97 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: 24206 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>, schwab <at> linux-m68k.org,
 p.stephani2 <at> gmail.com, nicolas <at> petton.fr
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Tue, 16 Aug 2016 10:45:06 -0700
[Message part 1 (text/plain, inline)]
>>>>> Paul Eggert <eggert <at> cs.ucla.edu> writes:

> Let's not cut the RC now, as unfortunately that patch fails spectacularly.

I'm rather disturbed by patches being added to emacs-25 which "fail
spectacularly". Can you please ensure that there is intensive testing being
done on these patches before pushing them to our release branch?  Thanks!

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 17:56:01 GMT) Full text and rfc822 format available.

Message #100 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: John Wiegley <jwiegley <at> gmail.com>
Cc: 24206 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>, schwab <at> linux-m68k.org,
 p.stephani2 <at> gmail.com, nicolas <at> petton.fr
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 10:55:46 -0700
John Wiegley wrote:
> I'm rather disturbed by patches being added to emacs-25 which "fail
> spectacularly".

So am I.

> Can you please ensure that there is intensive testing being
> done on these patches before pushing them to our release branch?

My name is on the "To:" line of your email, so are you under the impression that 
I pushed the patch? I did not, and would not have done so. Eli wrote and 
installed the patch, despite my recommendation of a different patch that would 
have avoided the failure. So this is really more a matter for Eli.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 17:58:01 GMT) Full text and rfc822 format available.

Message #103 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: 24206 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>, schwab <at> linux-m68k.org,
 p.stephani2 <at> gmail.com, nicolas <at> petton.fr
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Tue, 16 Aug 2016 10:57:43 -0700
>>>>> Paul Eggert <eggert <at> cs.ucla.edu> writes:

>> Can you please ensure that there is intensive testing being done on these
>> patches before pushing them to our release branch?

> My name is on the "To:" line of your email, so are you under the impression
> that I pushed the patch? I did not, and would not have done so. Eli wrote
> and installed the patch, despite my recommendation of a different patch that
> would have avoided the failure. So this is really more a matter for Eli.

I trust Eli to have chastised himself sufficiently in that case, and
expectantly await correction of the problem. :)

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 18:33:01 GMT) Full text and rfc822 format available.

Message #106 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 21:31:40 +0300
> Cc: schwab <at> linux-m68k.org, p.stephani2 <at> gmail.com, johnw <at> gnu.org,
>  nicolas <at> petton.fr, 24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Tue, 16 Aug 2016 10:37:39 -0700
> 
> Let's not cut the RC now, as unfortunately that patch fails spectacularly. (I 
> didn't test it yesterday; I tested your other patch, which is obviously better.) 
> To reproduce the problem, run emacs -Q and "C-h f car RET"; Emacs will display 
> "Wrong type argument: integer-or-marker-p, nil" instead of help.

Thanks, that blunder should be fixed now.

> The attached patch to emacs-25 fixes the problem. It makes the code functionally 
> equivalent to the other of the 2 patches that you posted yesterday, and is 
> simpler. OK to install in emacs-25?

Sorry, no.  I don't want to indiscriminately convert unibyte strings
to multibyte in substitute-command-keys.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 18:45:02 GMT) Full text and rfc822 format available.

Message #109 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Paul Eggert <eggert <at> cs.ucla.edu>, John Wiegley <jwiegley <at> gmail.com>
Cc: p.stephani2 <at> gmail.com, schwab <at> linux-m68k.org, 24206 <at> debbugs.gnu.org,
 nicolas <at> petton.fr
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 21:44:25 +0300
On 08/16/2016 08:55 PM, Paul Eggert wrote:
> John Wiegley wrote:
>> I'm rather disturbed by patches being added to emacs-25 which "fail
>> spectacularly".
>
> So am I.

I'm disturbed by the lack of tests (in all proposed patches, as well as 
the one that was pushed), even when this bug report shows that the 
function is question is easy to get wrong.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Tue, 16 Aug 2016 21:08:02 GMT) Full text and rfc822 format available.

Message #112 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Tue, 16 Aug 2016 14:07:05 -0700
[Message part 1 (text/plain, inline)]
Eli Zaretskii wrote:
> I've reviewed the changes you pushed to master for fixing this bug,
> and I must say that most of them look like purely stylistic changes,
> to make the code more to your personal liking.  The actual bugs were
> very few and minor, and didn't necessitate such thorough changes.

The changes were motivated by bug fixes, not style. Although the bugs were 
mostly minor (e.g., generating bogus NUL bytes due to miscounting) it's fine to 
fix minor bugs. I did change nearby style (indenting as per GNU style, switching 
some locals to C99-style decl-after-statement, etc.) but none of the changes 
were pervasive or were intended for the emacs-25 branch, and it's fine to make 
such changes in master.

One of the bugs was O(N**2) performance when reallocating a temporary buffer. 
While I was at it, I changed the code to allocate a small temp buffer on the 
stack to avoid a malloc/free in the usual case, which should be a small win. 
This accounts for many changes that a quick glance might give the mistaken 
impression of being stylistic.

> without any comments as to why we handle the input string as
> multibyte for the rest of the function, I think this will confuse
> someone down the road.

OK, I added some comments along those lines (see attached patch).

> I think the refactoring already introduced a
> regression.

This comment appears to be about changes made in May for Bug#23425, not about 
code changes I made recently. The May changes were not a regression; they were 
intended and are documented in etc/NEWS. Alan Mackenzie felt strongly that some 
changes were needed in this area. See commit 
433d366dc7b053048abf710d790ff62421dd1570.

> maybe we should just go to the original code, after fixing the
> immediate bugs, as I proposed in a patch yesterday?

No, the code in master should be uniformly better than what's in emacs-25.

It would be nice to have good tests for substitute-command-keys, of course. (We 
can all add this to our lists of things to do. :-)
[0001-Omit-substitute-command-keys-code-no-longer-needed.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Wed, 17 Aug 2016 15:13:02 GMT) Full text and rfc822 format available.

Message #115 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Wed, 17 Aug 2016 18:12:48 +0300
> Cc: schwab <at> linux-m68k.org, p.stephani2 <at> gmail.com, johnw <at> gnu.org,
>  24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Tue, 16 Aug 2016 14:07:05 -0700
> 
> The changes were motivated by bug fixes, not style.

That's not what I see.  E.g., this hunk simply replaces valid code by
an equivalently valid code:

  -	  if (multibyte)
  -	    {
  -	      int len;
  -
  -	      STRING_CHAR_AND_LENGTH (strp, len);
  -	      if (len == 1)
  -		*bufp = *strp;
  -	      else
  -		memcpy (bufp, strp, len);
  -	      strp += len;
  -	      bufp += len;
  -	      nchars++;
  -	    }
  -	  else
  -	    *bufp++ = *strp++, nchars++;
  +	  /* Fall through to copy one char.  */

Same here:

  -      else if (strp[0] == '\\' && strp[1] == '[')
  +      else if (strp[0] == '\\' && strp[1] == '['
  +	       && (close_bracket
  +		   = memchr (strp + 2, ']',
  +			     SDATA (str) + strbytes - (strp + 2))))
	  {
  -	  ptrdiff_t start_idx;
	    bool follow_remap = 1;

  -	  strp += 2;		/* skip \[ */
  -	  start = strp;
  -	  start_idx = start - SDATA (string);
  -
  -	  while ((strp - SDATA (string)
  -		  < SBYTES (string))
  -		 && *strp != ']')
  -	    strp++;
  -	  length_byte = strp - start;
  -
  -	  strp++;		/* skip ] */

and here (which, for some reason, loses part of a comment, and IMO
makes it half a riddle for the uninitiated):

  -	  /* Note the Fwhere_is_internal can GC, so we have to take
  -	     relocation of string contents into account.  */
  -	  strp = SDATA (string) + idx;
  -	  start = SDATA (string) + start_idx;
  +	  /* Take relocation of string contents into account.  */
  +	  strp = SDATA (str) + idx;
  +	  start = strp - length_byte - 1;

etc. etc. -- I see a lot of changes that have nothing to do with the
real bugs in this function, they just rearrange valid code, change the
way intermediate variables are used, etc.

> Although the bugs were mostly minor (e.g., generating bogus NUL bytes due to miscounting) it's fine to fix minor bugs. I did change nearby style (indenting as per GNU style, switching some locals to C99-style decl-after-statement, etc.) but none of the changes were pervasive or were intended for the emacs-25 branch, and it's fine to make such changes in master.

What code generated bogus null bytes?

I'm not saying it isn't fine to make such changes, I'm urging you and
the others to resist the temptation of doing so unless really
necessary.  We are operating in the area of diminishing returns, and
too many times introduce regressions into code that was working
properly for decades.  We should try to minimize that.  Emacs is not
supposed to become less stable in core code, unless its gets
significant improvements or new features.

> One of the bugs was O(N**2) performance when reallocating a temporary buffer. While I was at it, I changed the code to allocate a small temp buffer on the stack to avoid a malloc/free in the usual case, which should be a small win. This accounts for many changes that a quick glance might give the mistaken impression of being stylistic.

Where's the O(N**2) performance, and why does performance matter in
this function anyway?  I don't think we ever had complaints about this
being slow.  The new code is more complex, because it sometimes uses
the stack and sometimes the heap, so more opportunities for bugs in
it.  I don't see any net gains, sorry.

>     without any comments as to why we handle the input string as
>     multibyte for the rest of the function, I think this will confuse
>     someone down the road.
> 
> OK, I added some comments along those lines (see attached patch).

Thanks.

>     I think the refactoring already introduced a
>     regression.
> 
> This comment appears to be about changes made in May for Bug#23425, not about code changes I made recently. The May changes were not a regression; they were intended and are documented in etc/NEWS. Alan Mackenzie felt strongly that some changes were needed in this area. See commit 433d366dc7b053048abf710d790ff62421dd1570.

Right, sorry I forgot about that.  Unlike at that time, I now think
this was a bad move, because Emacs 25.1 will have the disabled
conversion in it, so by the time we release the code in master, it
would be an incompatible change.  Also, ‘..’ is left unchanged, but
'..' is not, which is inconsistent.  So I think that change should be
reverted on master.  (I also don't see how it is related to the
original bug report, which AFAIU was about (message "`foo'") that
still behaves as in the bug report.)

>     maybe we should just go to the original code, after fixing the
>     immediate bugs, as I proposed in a patch yesterday?
> 
> No, the code in master should be uniformly better than what's in emacs-25.

I can't say I see that, sorry.

> It would be nice to have good tests for substitute-command-keys, of course. (We can all add this to our lists of things to do. :-) 

Which seems to be just another way of saying NO, sigh.

(Mumbles something about Emacs maintenance being a lonely business...)




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Wed, 17 Aug 2016 17:43:01 GMT) Full text and rfc822 format available.

Message #118 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Wed, 17 Aug 2016 10:41:52 -0700
[Message part 1 (text/plain, inline)]
Eli Zaretskii wrote:

>> The changes were motivated by bug fixes, not style.
>
> That's not what I see.  E.g., this hunk simply replaces valid code by
> an equivalently valid code:
>
>   -	  if (multibyte)
>   -	    {
>   -	      int len;
>   -
>   -	      STRING_CHAR_AND_LENGTH (strp, len);
>   -	      if (len == 1)
>   -		*bufp = *strp;
>   -	      else
>   -		memcpy (bufp, strp, len);
>   -	      strp += len;
>   -	      bufp += len;
>   -	      nchars++;
>   -	    }
>   -	  else
>   -	    *bufp++ = *strp++, nchars++;
>   +	  /* Fall through to copy one char.  */

Some change in this area was needed because the 'multibyte' flag went away. 
While doing that, I noticed that discarding all the code made this 
somewhat-tricky area easier to follow. It's not merely that the old multibyte 
code is unnecessarily long and hard to follow; it's that the old code does 
something fairly-typical (copy a multibyte character) in an unusual way, which 
is too likely to lead the reader into incorrectly thinking that there is 
something actually unusual about the action. Misleading code like this really 
cries out to be rewritten, particularly if the rewriting simply ionvolves 
deleting it.

In short, the main motivation here was clarity, not merely style.

(I hope I don't have to go into such details to defend every code change I 
install! I'm finding it difficult-enough now to find time to improve Emacs.)

> Same here:
>
>   -      else if (strp[0] == '\\' && strp[1] == '[')
>   +      else if (strp[0] == '\\' && strp[1] == '['
>   +	       && (close_bracket
>   +		   = memchr (strp + 2, ']',
>   +			     SDATA (str) + strbytes - (strp + 2))))
> 	  {
>   -	  ptrdiff_t start_idx;
> 	    bool follow_remap = 1;
>
>   -	  strp += 2;		/* skip \[ */
>   -	  start = strp;
>   -	  start_idx = start - SDATA (string);
>   -
>   -	  while ((strp - SDATA (string)
>   -		  < SBYTES (string))
>   -		 && *strp != ']')
>   -	    strp++;
>   -	  length_byte = strp - start;
>   -
>   -	  strp++;		/* skip ] */

This one is not merely a style change. The old code matched \[ even if not 
followed by ], the new code does not. This is an intended improvement. I plead 
guilty to the charge that the new code is also shorter and clearer.

> and here (which, for some reason, loses part of a comment, and IMO
> makes it half a riddle for the uninitiated):
>
>   -	  /* Note the Fwhere_is_internal can GC, so we have to take
>   -	     relocation of string contents into account.  */
>   -	  strp = SDATA (string) + idx;
>   -	  start = SDATA (string) + start_idx;
>   +	  /* Take relocation of string contents into account.  */
>   +	  strp = SDATA (str) + idx;
>   +	  start = strp - length_byte - 1;

The new comment came because I copied it from somewhere else in the interest of 
consistency. You're right, I omitted some commentary in the process. I thought 
the omitted info obvious, but evidently you think otherwise. It's obviously no 
big deal, so I brought it back by applying the attached patch to master.

> What code generated bogus null bytes?

For example, (substitute-command-keys "\\=") generated "\0".

> I'm not saying it isn't fine to make such changes, I'm urging you and
> the others to resist the temptation of doing so unless really
> necessary.  We are operating in the area of diminishing returns, and
> too many times introduce regressions into code that was working
> properly for decades.

This particular code has been buggy for decades in unusual areas. There is no 
harm in simplifying it when fixing the bugs. On the contrary, we should 
encourage bug fixes that simplify code.

> Where's the O(N**2) performance

When the buffer grew slightly, it was reallocated to be slightly bigger and the 
old data was copied to the new; this is an O(N**2) algorithm, where N is the 
final buffer size. The new approach doubles the buffer size instead (actually, 
multiplies it by 1.5, but that's good enough to bring worst-case behavior down 
to O(N)). This sort of thing is standard programming practice when growing a 
buffer whose eventual size is not yet known.

> and why does performance matter in this function anyway?

It usually doesn't, but it might in the worst case, so I figured I might as well 
fix the O(N**2) problem while I was fixing related bugs. This is a good thing to 
do in master.

> Unlike at that time, I now think
> this was a bad move, because Emacs 25.1 will have the disabled
> conversion in it, so by the time we release the code in master, it
> would be an incompatible change.

If that's the main objection, then let's change Emacs 25 to behave similarly. 
This would be a simple and conservative change to Emacs 25. But even if you 
don't want to change Emacs 25 (and thus you want to Emacs 25 to continue to be 
less-compatible with Emacs 24), it's OK to change this minor detail back to the 
way Emacs 24 does things.

> (I also don't see how it is related to the
> original bug report, which AFAIU was about (message "`foo'") that
> still behaves as in the bug report.)

Alan wanted something that he could put into his .emacs that would cause 
(message PERCENTLESS) to output the string PERCENTLESS as-is, assuming 
PERCENTLESS lacks %. This was the point of his original bug report; his original 
example involved ` and ' but he wanted the same behavior for ‘ and ’, a point 
that became clear during the discussion of Bug#23425. In Message #95 of that bug 
report I proposed the change in question, and in Message #104 you said it 
sounded good to you.

This is a contentious area, and unless there's good reason I'd rather let 
sleeping dogs lie and stick with master's current behavior here.

> (Mumbles something about Emacs maintenance being a lonely business...)

But we have all these nice conversations! :-)

[0001-src-doc.c-Fsubstitute_command_keys-Clarify-GC-commen.patch (text/x-diff, attachment)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Wed, 17 Aug 2016 17:51:02 GMT) Full text and rfc822 format available.

Message #121 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Paul Eggert <eggert <at> cs.ucla.edu>, Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, johnw <at> gnu.org, schwab <at> linux-m68k.org,
 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Wed, 17 Aug 2016 20:50:29 +0300
On 08/17/2016 12:07 AM, Paul Eggert wrote:

> It would be nice to have good tests for substitute-command-keys, of
> course. (We can all add this to our lists of things to do. :-)

Tests written after the fact are often less than helpful, because you 
don't see the problem anymore. Not to mention that there's little 
motivation for anyone to do that.

Never mind "good" tests, let's at least have _some_ tests first.

It should be the responsibility of the person who fixes the bug, or the 
one who introduced it, at least.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Wed, 17 Aug 2016 18:08:01 GMT) Full text and rfc822 format available.

Message #124 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Wed, 17 Aug 2016 21:06:42 +0300
> Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Wed, 17 Aug 2016 10:41:52 -0700
> 
> >   -	  if (multibyte)
> >   -	    {
> >   -	      int len;
> >   -
> >   -	      STRING_CHAR_AND_LENGTH (strp, len);
> >   -	      if (len == 1)
> >   -		*bufp = *strp;
> >   -	      else
> >   -		memcpy (bufp, strp, len);
> >   -	      strp += len;
> >   -	      bufp += len;
> >   -	      nchars++;
> >   -	    }
> >   -	  else
> >   -	    *bufp++ = *strp++, nchars++;
> >   +	  /* Fall through to copy one char.  */
> 
> Some change in this area was needed because the 'multibyte' flag went away. 

Only because you removed it.  You could have left it alone, it would
have worked even after the call to Fstring_make_multibyte, for the
reasons I explained earlier: the result is not necessarily a multibyte
string.

> While doing that, I noticed that discarding all the code made this 
> somewhat-tricky area easier to follow. It's not merely that the old multibyte 
> code is unnecessarily long and hard to follow; it's that the old code does 
> something fairly-typical (copy a multibyte character) in an unusual way, which 
> is too likely to lead the reader into incorrectly thinking that there is 
> something actually unusual about the action. Misleading code like this really 
> cries out to be rewritten, particularly if the rewriting simply ionvolves 
> deleting it.

I don't see why it is tricky, we do that in Emacs in other places.
It's pretty boilerplate.

> In short, the main motivation here was clarity, not merely style.

That's exactly my point: it's more clear for you, but that alone is
not reason good enough to make such changes in code that worked for
many years.

> (I hope I don't have to go into such details to defend every code change I 
> install! I'm finding it difficult-enough now to find time to improve Emacs.)

I could simply revert your commit, it would have saved us both quite
some time.  Would you prefer that?

> This one is not merely a style change. The old code matched \[ even if not 
> followed by ], the new code does not. This is an intended improvement. I plead 
> guilty to the charge that the new code is also shorter and clearer.

Then why is there nothing about this in the log entry?

> >   -	  /* Note the Fwhere_is_internal can GC, so we have to take
> >   -	     relocation of string contents into account.  */
> >   -	  strp = SDATA (string) + idx;
> >   -	  start = SDATA (string) + start_idx;
> >   +	  /* Take relocation of string contents into account.  */
> >   +	  strp = SDATA (str) + idx;
> >   +	  start = strp - length_byte - 1;
> 
> The new comment came because I copied it from somewhere else in the interest of 
> consistency. You're right, I omitted some commentary in the process. I thought 
> the omitted info obvious, but evidently you think otherwise. It's obviously no 
> big deal, so I brought it back by applying the attached patch to master.

Thanks.

> > Unlike at that time, I now think
> > this was a bad move, because Emacs 25.1 will have the disabled
> > conversion in it, so by the time we release the code in master, it
> > would be an incompatible change.
> 
> If that's the main objection, then let's change Emacs 25 to behave similarly. 
> This would be a simple and conservative change to Emacs 25. But even if you 
> don't want to change Emacs 25 (and thus you want to Emacs 25 to continue to be 
> less-compatible with Emacs 24), it's OK to change this minor detail back to the 
> way Emacs 24 does things.

Alas, it's too late to change Emacs 25.1.

> > (I also don't see how it is related to the
> > original bug report, which AFAIU was about (message "`foo'") that
> > still behaves as in the bug report.)
> 
> Alan wanted something that he could put into his .emacs that would cause 
> (message PERCENTLESS) to output the string PERCENTLESS as-is, assuming 
> PERCENTLESS lacks %. This was the point of his original bug report; his original 
> example involved ` and ' but he wanted the same behavior for ‘ and ’, a point 
> that became clear during the discussion of Bug#23425.

Then why not for '..' as well?  How is that different from ‘..’?  What
we have now on master is inconsistent and cannot be defended, IMO.

> > (Mumbles something about Emacs maintenance being a lonely business...)
> 
> But we have all these nice conversations! :-)

Oh yes, what a relief!




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Wed, 17 Aug 2016 20:53:02 GMT) Full text and rfc822 format available.

Message #127 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Wed, 17 Aug 2016 13:52:42 -0700
Eli Zaretskii wrote:

>> Some change in this area was needed because the 'multibyte' flag went away.
>
> Only because you removed it.  You could have left it alone, it would
> have worked

Sure, but it was no longer necessary, as the code no longer needs to record 
whether the original string was multibyte. Keeping an unnecessary variable 
around would make the code harder to read.

> even after the call to Fstring_make_multibyte, for the
> reasons I explained earlier: the result is not necessarily a multibyte
> string.

That doesn't affect the fact that the 'multibyte' variable is no longer 
necessary. In emacs-25, 'multibyte' does not mean that the result is a multibyte 
string; it means that the input is a multibyte string. There is no need to keep 
track of that in master now, and it simplifies the code to not worry about it.

>> While doing that, I noticed that discarding all the code made this
>> somewhat-tricky area easier to follow. It's not merely that the old multibyte
>> code is unnecessarily long and hard to follow; it's that the old code does
>> something fairly-typical (copy a multibyte character) in an unusual way, which
>> is too likely to lead the reader into incorrectly thinking that there is
>> something actually unusual about the action.

> I don't see why it is tricky, we do that in Emacs in other places.

Really? A call to STRING_CHAR_AND_LENGTH followed by a length test followed by a 
call to memcpy for length > 1 and a special case inline copy for length == 1? 
When copying multibyte data? Where else does Emacs do that?

> it's more clear for you

Replacing 14 unusually and unnecessarily tricky lines with zero lines should 
help clarify things for most readers.

> I could simply revert your commit, it would have saved us both quite
> some time.  Would you prefer that?

It'd be even simpler to leave things alone, as the master code works better than 
emacs-25 does. (Merely reverting the commit wouldn't suffice, of course.)

>> This one is not merely a style change. The old code matched \[ even if not
>> followed by ], the new code does not. This is an intended improvement. I plead
>> guilty to the charge that the new code is also shorter and clearer.
>
> Then why is there nothing about this in the log entry?

I didn't think such detail was necessary, since it was a change to undocumented 
behavior. If you think it worth mentioning, I can add a NEWS item.

>> Alan wanted something that he could put into his .emacs that would cause
>> (message PERCENTLESS) to output the string PERCENTLESS as-is, assuming
>> PERCENTLESS lacks %. This was the point of his original bug report; his original
>> example involved ` and ' but he wanted the same behavior for ‘ and ’, a point
>> that became clear during the discussion of Bug#23425.
>
> Then why not for '..' as well?  How is that different from ‘..’?

It's not different. Alan wanted the same behavior for '..', and he got that too.





Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 14:31:01 GMT) Full text and rfc822 format available.

Message #130 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Thu, 18 Aug 2016 17:30:44 +0300
> Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Wed, 17 Aug 2016 13:52:42 -0700
> 
>         Some change in this area was needed because the 'multibyte' flag went away.
> 
>     Only because you removed it.  You could have left it alone, it would
>     have worked
> 
> Sure, but it was no longer necessary, as the code no longer needs to record whether the original string was multibyte. Keeping an unnecessary variable around would make the code harder to read.

The code that got removed was the easy and intuitive part: it dealt
with processing single-byte strings one byte at a time.  The
hard-to-read part of the code is still with us.  We have less 'if'
conditionals, but that's hardly the main complication in the original
code.

>     even after the call to Fstring_make_multibyte, for the
>     reasons I explained earlier: the result is not necessarily a multibyte
>     string.
> 
> That doesn't affect the fact that the 'multibyte' variable is no longer necessary. In emacs-25, 'multibyte' does not mean that the result is a multibyte string

You are missing my point: the code on master now processes a string,
that could be either unibyte or multibyte, using only multibyte
methods.  With the flag in place, each kind of string would have used
the method that's natural with it.  The way things are now, one has to
think hard about what the code does to convince oneself it's valid.

>     I don't see why it is tricky, we do that in Emacs in other places.
>
> Really? A call to STRING_CHAR_AND_LENGTH followed by a length test followed by a call to memcpy for length > 1 and a special case inline copy for length == 1? When copying multibyte data? Where else does Emacs do that?

What exactly confuses you in that snippet?  The call to
STRING_CHAR_AND_LENGTH itself? we have that in umpteen other places.
The single-byte optimization of not calling memcpy?  That's standard
practice in C.  If you need an example for using
STRING_CHAR_AND_LENGTH while copying text, you can find it in
copy_text, for example.  I really don't understand what's your problem
with that code.

>     it's more clear for you
> 
> Replacing 14 unusually and unnecessarily tricky lines with zero lines should help clarify things for most readers.

They are not unusually tricky at all.  And you replaced it with a
fall-through, which is harder to follow and easier to introduce subtle
bugs.

>     I could simply revert your commit, it would have saved us both quite
>     some time.  Would you prefer that?
> 
> It'd be even simpler to leave things alone, as the master code works better than emacs-25 does.

Sorry, leaving alone changes that I find questionable or gratuitous is
not in the job description.

>         Alan wanted something that he could put into his .emacs that would cause
>         (message PERCENTLESS) to output the string PERCENTLESS as-is, assuming
>         PERCENTLESS lacks %. This was the point of his original bug report; his original
>         example involved ` and ' but he wanted the same behavior for ‘ and ’, a point
>         that became clear during the discussion of Bug#23425.
> 
>     Then why not for '..' as well?  How is that different from ‘..’?
> 
> It's not different. Alan wanted the same behavior for '..', and he got that too.

But the behavior is not the same:

  (let ((text-quoting-style 'curve))
    (substitute-command-keys "'foo'"))
      => ’foo’

but

  (let ((text-quoting-style 'grave))
    (substitute-command-keys "‘foo’"))
      => ‘foo’

I would have expected the first example to yield 'foo', i.e. leave the
apostrophes alone, as we do with curved quotes in the second example.
What we have now is inconsistent, and its rationale evades me.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 16:34:02 GMT) Full text and rfc822 format available.

Message #133 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Nicolas Petton <nicolas <at> petton.fr>
To: John Wiegley <jwiegley <at> gmail.com>, Eli Zaretskii <eliz <at> gnu.org>
Cc: p.stephani2 <at> gmail.com, Paul Eggert <eggert <at> cs.ucla.edu>,
 schwab <at> linux-m68k.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Thu, 18 Aug 2016 18:30:32 +0200
[Message part 1 (text/plain, inline)]
John Wiegley <jwiegley <at> gmail.com> writes:

>> The emacs-25 branch is ready for another RC, from my POV.
>
> Good, can you cut one for us, Nicolas?

I'm at the GNU Hackers Meeting and I haven't followed the latest
development regarding this issue, are we ready for another pretest?

Cheers,
Nico
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 16:44:01 GMT) Full text and rfc822 format available.

Message #136 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: John Wiegley <jwiegley <at> gmail.com>
To: Nicolas Petton <nicolas <at> petton.fr>
Cc: Eli Zaretskii <eliz <at> gnu.org>, Paul Eggert <eggert <at> cs.ucla.edu>,
 schwab <at> linux-m68k.org, p.stephani2 <at> gmail.com, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Thu, 18 Aug 2016 09:41:57 -0700
[Message part 1 (text/plain, inline)]
>>>>> Nicolas Petton <nicolas <at> petton.fr> writes:

> I'm at the GNU Hackers Meeting and I haven't followed the latest development
> regarding this issue, are we ready for another pretest?

I had thought so, but I'll let Eli confirm again.

-- 
John Wiegley                  GPG fingerprint = 4710 CF98 AF9B 327B B80F
http://newartisans.com                          60E1 46C4 BD1A 7AC1 4BA2
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 17:36:01 GMT) Full text and rfc822 format available.

Message #139 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: John Wiegley <jwiegley <at> gmail.com>
Cc: nicolas <at> petton.fr, eggert <at> cs.ucla.edu, schwab <at> linux-m68k.org,
 p.stephani2 <at> gmail.com, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1;
 Curly quotes generate invalid strings, leading to a segfault
Date: Thu, 18 Aug 2016 20:35:29 +0300
> From: John Wiegley <jwiegley <at> gmail.com>
> Cc: Eli Zaretskii <eliz <at> gnu.org>,  Paul Eggert <eggert <at> cs.ucla.edu>,  schwab <at> linux-m68k.org,  p.stephani2 <at> gmail.com,  24206 <at> debbugs.gnu.org
> Date: Thu, 18 Aug 2016 09:41:57 -0700
> 
> >>>>> Nicolas Petton <nicolas <at> petton.fr> writes:
> 
> > I'm at the GNU Hackers Meeting and I haven't followed the latest development
> > regarding this issue, are we ready for another pretest?
> 
> I had thought so, but I'll let Eli confirm again.

Confirmed.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 18:34:02 GMT) Full text and rfc822 format available.

Message #142 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Paul Eggert <eggert <at> cs.ucla.edu>
To: Eli Zaretskii <eliz <at> gnu.org>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Thu, 18 Aug 2016 11:33:36 -0700
Eli Zaretskii wrote:

> The code that got removed was the easy and intuitive part: it dealt
> with processing single-byte strings one byte at a time.  The
> hard-to-read part of the code is still with us.  We have less 'if'
> conditionals, but that's hardly the main complication in the original
> code.

Sure, but removing unnecessary easy stuff lets the reader see the hard stuff 
more clearly.

> You are missing my point: the code on master now processes a string,
> that could be either unibyte or multibyte, using only multibyte
> methods.  With the flag in place, each kind of string would have used
> the method that's natural with it.  The way things are now, one has to
> think hard about what the code does to convince oneself it's valid.

The way things were before it was even harder, because one had to worry not only 
about processing Emacs-encoded text, one also had to worry about processing 
unibyte text containing non-ASCII bytes. The code is simpler now, because it 
needs only to process Emacs-encoded text.

The old code might have flown despite its problems, if all the input data were 
consistent (i.e., either all unibyte, or all with Emacs-encoded text). But 
inputs need not be consistent, so the old approach simply did not work.

As I take it, your principal objection to the new code is not to its internals: 
it's that substitute-command-keys can now return a multibyte string even when 
all the input data is unibyte. I don't think that's a big deal, but if this is 
the primary reason for our lengthy conversation, I can move things forward by 
changing the code so that it instead returns a unibyte string when all the input 
data are unibyte. Would that suffice?

>>     I don't see why it is tricky, we do that in Emacs in other places.
>>
>> Really? A call to STRING_CHAR_AND_LENGTH followed by a length test followed by a call to memcpy for length > 1 and a special case inline copy for length == 1? When copying multibyte data? Where else does Emacs do that?
>
> What exactly confuses you in that snippet?

Nothing confuses me in that snippet. I know what the snippet does, now that I've 
read and understood it. It is a longwinded and unnecessarily tricky way of doing 
something simple.

> The call to
> STRING_CHAR_AND_LENGTH itself? we have that in umpteen other places.
> The single-byte optimization of not calling memcpy?  That's standard
> practice in C.

I'm not talking about each individual line of code in that snippet. I am talking 
about the entire construction. A reader must look at all 14 lines to deduce what 
it does, deduce that it's unnecessarily complicated, and deduce that the 
unnecessary complication is not a sign that something unusual is going on. No 
place else in Emacs has this construction.

> If you need an example for using
> STRING_CHAR_AND_LENGTH while copying text, you can find it in
> copy_text, for example.

copy_text does something quite different. When copying multibyte text, it does a 
single memcpy for the entire string. copy_text does not call memcpy for each 
multibyte character, and nothing in copy_text is particularly close to the 
snippet in question.

> you replaced it with a
> fall-through, which is harder to follow and easier to introduce subtle
> bugs.

True, but the fall-through is clearly marked in comments. The new way is a bit 
more efficent (smaller code space, more likely to fit in cache); the old way 
duplicated character-copying code, a practice that also introduces subtle bugs 
-- in addition to temporarily mystifying the reader because the old code 
duplicates were not identical (itself a sign of cruft). With all that in mind, 
it was reasonable to switch from the old way to the new, despite the 
disadvantage you mention.

>>         Alan wanted something that he could put into his .emacs that would cause
>>         (message PERCENTLESS) to output the string PERCENTLESS as-is, assuming
>>         PERCENTLESS lacks %. This was the point of his original bug report; his original
>>         example involved ` and ' but he wanted the same behavior for ‘ and ’, a point
>>         that became clear during the discussion of Bug#23425.
>>
>>     Then why not for '..' as well?  How is that different from ‘..’?
>>
>> It's not different. Alan wanted the same behavior for '..', and he got that too.
>
> But the behavior is not the same:

I was referring to Alan's desire to treat all quotes the same (i.e., to not 
substitute for any of them), which is now supported by setting 
text-quoting-style to grave.

>   (let ((text-quoting-style 'curve))
>     (substitute-command-keys "'foo'"))
>       => ’foo’
>
> but
>
>   (let ((text-quoting-style 'grave))
>     (substitute-command-keys "‘foo’"))
>       => ‘foo’
>
> I would have expected the first example to yield 'foo'

No, substitute-command-keys works on each grave accent and apostrophe 
separately, without looking at the others. As I recall it's worked that way and 
has been documented that way, in both master and emacs-25, ever since the 
feature was installed. One could posit a "smarter" form of substitution, which 
leaves 'foo' alone but which translates `foo'. Although we considered that 
possibility during design, we rejected it because it is more complicated and has 
more problems and quirks that are a pain to document and would surprise users in 
other ways.




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#24206; Package emacs. (Thu, 18 Aug 2016 18:59:02 GMT) Full text and rfc822 format available.

Message #145 received at 24206 <at> debbugs.gnu.org (full text, mbox):

From: Eli Zaretskii <eliz <at> gnu.org>
To: Paul Eggert <eggert <at> cs.ucla.edu>
Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
Subject: Re: bug#24206: 25.1; Curly quotes generate invalid strings, leading
 to a segfault
Date: Thu, 18 Aug 2016 21:58:25 +0300
> Cc: johnw <at> gnu.org, 24206 <at> debbugs.gnu.org
> From: Paul Eggert <eggert <at> cs.ucla.edu>
> Date: Thu, 18 Aug 2016 11:33:36 -0700
> 
> As I take it, your principal objection to the new code is not to its internals: 
> it's that substitute-command-keys can now return a multibyte string even when 
> all the input data is unibyte. I don't think that's a big deal, but if this is 
> the primary reason for our lengthy conversation, I can move things forward by 
> changing the code so that it instead returns a unibyte string when all the input 
> data are unibyte. Would that suffice?

No, that's not the primary reason.  The primary reason is that I think
we should avoid changing code that doesn't necessarily need any
changes.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 16 Sep 2016 11:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 7 years and 195 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.