From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 03 Nov 2016 19:31:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 24870@debbugs.gnu.org X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.147820141110595 (code B ref -1); Thu, 03 Nov 2016 19:31:01 +0000 Received: (at submit) by debbugs.gnu.org; 3 Nov 2016 19:30:11 +0000 Received: from localhost ([127.0.0.1]:41890 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c2NiF-0002kp-EQ for submit@debbugs.gnu.org; Thu, 03 Nov 2016 15:30:11 -0400 Received: from eggs.gnu.org ([208.118.235.92]:43731) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c2NiD-0002jl-83 for submit@debbugs.gnu.org; Thu, 03 Nov 2016 15:30:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c2Ni7-0005Sj-Dg for submit@debbugs.gnu.org; Thu, 03 Nov 2016 15:30:04 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: * X-Spam-Status: No, score=1.3 required=5.0 tests=BAYES_50,RCVD_IN_SORBS_SPAM autolearn=disabled version=3.3.2 Received: from lists.gnu.org ([2001:4830:134:3::11]:47893) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c2Ni7-0005SW-90 for submit@debbugs.gnu.org; Thu, 03 Nov 2016 15:30:03 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34662) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c2Ni6-0007Bi-6s for bug-gnu-emacs@gnu.org; Thu, 03 Nov 2016 15:30:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c2Ni2-0005M2-VP for bug-gnu-emacs@gnu.org; Thu, 03 Nov 2016 15:30:02 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:57354) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c2Ni2-0005JN-75 for bug-gnu-emacs@gnu.org; Thu, 03 Nov 2016 15:29:58 -0400 Received: from [192.168.178.35] ([77.12.113.130]) by mrelayeu.kundenserver.de (mreue005) with ESMTPSA (Nemesis) id 0M6ym1-1cpWVw3NIr-00wjr9 for ; Thu, 03 Nov 2016 20:29:56 +0100 From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> Date: Thu, 3 Nov 2016 20:38:09 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------06F9353005710C799CE3CD9D" X-Provags-ID: V03:K0:4nmFdEoljAWX4YFvUqvdUvS2YQUVytqOH7g+NryjGXwEjjpr5fW bktH+OmlzwxzGnFM/XT8nS8o9aTriCcQH+mtKwN982ImK9bIz3ggQCd3S49RdpPqucO+gn5 AnR9O4QoIpsoHfzvzvJj2SgizkA/ymvQOSa/yol/y6hPkQ8tib140SKRKSgsici06Z1X8zD gSDKudsEl6MVn9BU/PZHw== X-UI-Out-Filterresults: notjunk:1;V01:K0:6zZkFOnJjtI=:avtCCQXvzuUsUTgcc6FpyV oS3r45NKUP8UhWDITy01jH7jcpgXHJXV5ipbetUmP30sv2jPDs8meNv03G3bnv2OgaQtUTmH/ YzhUydFaW4mE/Tk9Jq1oLTPZvfEoH7Alwzkoi1Xb2LPogub5w+CbA0D8ZhfNIOPRHyPW/m/k4 CJT859/Qr7r4CuR6wF8LvBtg1BC+CYD/zA1zH26oXMUfPw25Mk4Mb8TaFSK1qdIbd4x/BcnMX HnRoMd0Irbje6ncbh4wZfik7T5DRdRyCPgSO47lp/sUSIZotgyUW4w2nOF+iPi/3b23X3TNgY Dre8WSWg1p/dKmn473wjy+osTUw/Dcb9LdH9MqJfmCBOXbN43cjz8UfJZ8WMIxqdhBRL5I/9V 9cwbKDzEO+IyQ5I9XwJyNpVbme8BIRLQwwRe2X4sBsqlIty5CvRFj7V0y+eEw2W5x7TwF3AWs qXRi4Szh2Vvvuze+9myEmom+dHuwmKljEU5g/LsJatbxxSGYGHM7old1dK1tmr+pA6vjVo/69 cZiOzzym3ridI70TxSvPBaU7qVWC3XXy18F1Z0Sj2U8bLlYWG0kA+qfDVrzZhQdmOnrMGcVNl gUn+tS+pnPb2m7P1X8kQuDVKTlmgjDZBZYZs8OObLckZlqEkiqzQG1bMSXF92EMXAXZaDfB+R /5oQJOh/iw0LH+h+HcN03yXMFQI1PVNE15MIgUO0LbocHiw== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Received-From: 2001:4830:134:3::11 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" This is a multi-part message in MIME format. --------------06F9353005710C799CE3CD9D Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit haskell-mode, at EOB: --- {- To explore this file: -} asdf = --- parse-partial-sexp thinks being inside a paren - see attachment. GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11 --------------06F9353005710C799CE3CD9D Content-Type: image/png; name="after-haskell-comment.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="after-haskell-comment.png" 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 xESRR7jie9dOp9NYUREaEuI+F/XyxQlOnXuv8coHAACAq1pgFaMX5r88avjwUSOGey3Pzct7 /qX5YrE4NDQkNy//+aef7JOaWn+ZpD+PH5/78oKE+Dir1daje7fq+fnuh7V5+QU//vzLlq1b 2yS1fvapOQFt32azbU7b+sRjs1R/V98Zhnlg5vT7Zt5/7MSJHt26Pf38C62Tkk5kZERFRWae PTf9vimT75hYfaee5ZN57tz8BQu1Go2LZZ1O54J5L7VpnURETz//QoeUlKPHjoWEaLOzzz/8 4APjx4zmOO6V117POH26datWxopKnS707ddfu/xyY4iRSqXC6wf/M+u5p5/s1bMnEekNhjvv mbJu7fdff7N634GDRJSTe4mI7Ha7y+Wa+/Ir4WFhb7y6oLbT+vTzLyS3bXvoSHp4WNi9d92V tm1bveecai/A2pa7NVBhenlr8ZJjJ07ExcYWFBaGhoQseuO1EK22zl1XVFbOnf9Ki8SEJ2c/ Tg3/xfHNn73XeOU3Wg4BAACgIdQRAKQf/fPtd98TXt82dkyNaXief3PxO7cMunnGfVOIaO/+ A2++/c7qr/5bZ+/zGh09dmzJB0vdbx954H6ZTPbuB8smTbx9yt138Ty/8M23qq/1f9OnHUpP D7oLUM6lS06ns0P7dp4LWyQmqlSqrOzzPbp1I6JTZ86s+HCZVqs5duLEU8+9cOOA/j52ynHc G4vevuXmmx6YOYOI3l267M3Fiz9ZtpRhGCI6c/ascKth5+49by1+Z+yokRcu5hw8nP7zd2uE QrNYAugu4uXYiZPLln/Mcdy5rGxdmG78mNE+Ev/noQddLhfLcXMem0VEmefOPTbnqU+WLaW6 TuupM2c+/+TjEK02+/yF+sq5p9oKkOd5HwUrqMfC9LoaC4uK3K9nTLsvKjJSyOrLC1//9vsf 7p8x3feuCwoLn33xpVtuvmn6fVOovr84gR6C/3uvfuV7DioAAACAq04d3aw1Gk1CXJzwV1vn n6Li4lOnz/Tq2SMrOzsrOzs6KtLhdJ6/cDG4DCkVyqjISPefSCTKy8+/lJs78bbbiIhhmNvH jw9uyz7Y7HYiUqvVXss1arXdbhdeDx86RKvVEFH3rl3btE46eDjdxwbzCwpyLuXeefsE4e2k ibefy8ouLSsT3o4YOkS41XBdj+4Wq9VQXh4SomVZdu3Pv+QXFBCRSqUK+lgUCkV4WFhERESL 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 zz8f9TLA17/+9ba2to6Ojmeeeea+++7TaDRjY2OnTp2am5urq6sLPzhanfMIax1CwonlpNq9 e/dzzz330ksvDQwMcPMfA0BKSsojjzyyFkYDry+lpaXf+973XnzxRW6hLqlU+vDDDz/zzDPD w8Pd3d3T09OBQIAbBURR1HPPPffKK6+cOnVqcnIyGAxyn3OjhP/yL/9y2blN//Zv//aZZ54J hUJdXV3vvPPOsWPHAKCsrOznP//5yy+/3NjY6PP5uKtVjUZz9OjRr3zlK3FZ2DIu8vPzf/az n/3yl79saGgIv2yn1+sfe+yxRx55JPJx+b59+/7zP//zpZdeam1tDU+dkZmZ+cgjj3zxi18U esoa4eL57LPParXakydPhucCpygqLS0tanxIfK281q2C8Pif2yU4dOjQT3/606GhoZ6envHx 8fByDWHT09OR4yWeffZZACBPGYNdu3YxDDM8PDw0NMQtkrjQXXfdlZaW9vLLL7e3t09MTHAf KpXKY8eOhdeOiMQNfquvr19iJA8APPHEE3q9/r//+7/Dj0SSk5OfeOKJpfvkH3/8MQDs37+f qHibDMnRJKRWq//5n//5X//1Xzs7O7nbavX19T/84Q/T09OPHDly+vTpn/zkJw899BC3nMh9 990nl8t///vfc6t3hXN44oknnnrqqWW3dd9997W0tJw5cybyZQC1Wv3Tn/70l7/85Ycffviz n/2MS6nVav/iL/7iySefDLefq3MeYa1DSDjUxMREDC+TcSwWi8lkCoVCycnJ625ukzUlEAiM jIywLGs0GsODf1iWnZubo2k6PHdH2Pz8vMVi8Xg8KpXKYDDE5e6Iz+ebmJhwu91qtdpoNK6R uR0X8nq9k5OTHo8nKSlp6anQnU7n9PS03+/X6XSrP4RUoHiyLDs7O+v1eiUSiVarXc2pLYWo dZvZv/zLv5w+ffrBBx/8u7/7u6VTOp3Oqakpn8+3RF3yer33339/IBD4j//4j6jx/bfDLbCq UqmWrZ83b958+umnZTLZq6++uqYWf1g7yI8mCZZlTSaTzWbLyMiIDLjL5fJ6vQvXvLdYLPPz 816vN46tjd/vHx8fd7vdGo3GYDCs/i8C1jqEhHPixIkVdQAQQgjFZmRk5Gtf+5pIJPrd735H uCTwEpqbm7/zne9UVFS8+OKLcdm9SN///vcbGhq+9KUvfeMb34h75htDfI8mAqx1CAnpxIkT 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 QmCC --------------06F9353005710C799CE3CD9D-- From debbugs-submit-bounces@debbugs.gnu.org Wed Nov 30 04:00:28 2016 Received: (at control) by debbugs.gnu.org; 30 Nov 2016 09:00:28 +0000 Received: from localhost ([127.0.0.1]:46892 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC0kd-0003OK-PM for submit@debbugs.gnu.org; Wed, 30 Nov 2016 04:00:27 -0500 Received: from mail-pg0-f45.google.com ([74.125.83.45]:36070) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC0kb-0003O3-V2 for control@debbugs.gnu.org; Wed, 30 Nov 2016 04:00:26 -0500 Received: by mail-pg0-f45.google.com with SMTP id f188so79725779pgc.3 for ; Wed, 30 Nov 2016 01:00:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:date:message-id:to:subject; bh=WRHHRXdbQRHSeTjkwtb7LSXRMuIHpgEiOQGvXwG38YE=; b=ZpuiZp7M/XtsXI7dhbPnnMuz53/q+0vux5a/f8/9Zl12exzRk8WBuaD5ahrcsk+Yfm o5o73L6B8G0aQ4hpoFi+KhUygF/que388PDmawikSbr3INMplWT+SEZ4zBm+OPJ8lb7H EHArSRI1qW7JH3u5MEoFRwceb9Q20TjwKT1wNBWah5sfsL4boPrNrOHFc5HVnJzsY4MA fleC8ACBLppRxtPRUvpMsJeniuyez3fDOa8wPBchJUuXUA111oAcBbHWonm5KynEXpIY lvvzScPTDnkBj2z3rMqOI9yzKIcCTpVCqu9D/7FI+Zpf00tuUDn5I6MfJOpnwRLPW5ts Vckw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:date:message-id:to:subject; bh=WRHHRXdbQRHSeTjkwtb7LSXRMuIHpgEiOQGvXwG38YE=; b=ARG2BHmL/ncnjeapy/pg53o6I8xuCG+f2s1SR/R1+VsngRxoNYR6eVFIrblBJlQzE1 q6zLcbZsliBjZVE+wkSgj+hQ3TsvhyclDrJHIr8/fi/WjCQwyqp5xXGObthgQj2EuVx3 CdL2t9Xw3mrzvomcQ63GCDJZSm/KqiIuu2pE3mRA2hmKAhuambPzX2esLj96l8/mkoB0 BjtU7h3YdnS057mkM2hFmOGSsXnCYc6PzrjTEigwt3twekQlHTCgr0XrpAymn8P0AC5E Vx9KndWpFov3b47AqsRS3dRB8SPl42E8nQ1t1KmFFWdZzNZIa4bP+NDvObHLQwN7d49y H3AQ== X-Gm-Message-State: AKaTC00RzCgJhvbWpXewdZ+VDSq7TlWKBbgol7DJY/lQv6JN+pjJvUEauJEPIzRqbagKcSdS X-Received: by 10.84.214.15 with SMTP id h15mr70979356pli.135.1480496419655; Wed, 30 Nov 2016 01:00:19 -0800 (PST) Received: from marmstrong-macbookpro.roam.corp.google.com (50-46-113-121.evrt.wa.frontiernet.net. [50.46.113.121]) by smtp.gmail.com with ESMTPSA id a22sm100929041pfg.7.2016.11.30.01.00.18 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Nov 2016 01:00:18 -0800 (PST) From: Matt Armstrong X-Google-Original-From: Matt Armstrong Date: Wed, 30 Nov 2016 01:00:17 -0800 Message-Id: To: control@debbugs.gnu.org Subject: control message for bug #24870 X-Spam-Score: -2.9 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.9 (--) tags 24870 moreinfo From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Matt Armstrong Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Nov 2016 09:12:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148049706714106 (code B ref 24870); Wed, 30 Nov 2016 09:12:01 +0000 Received: (at 24870) by debbugs.gnu.org; 30 Nov 2016 09:11:07 +0000 Received: from localhost ([127.0.0.1]:46932 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC0ux-0003fS-Cx for submit@debbugs.gnu.org; Wed, 30 Nov 2016 04:11:07 -0500 Received: from mail-pg0-f41.google.com ([74.125.83.41]:33374) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC0uv-0003ex-NO for 24870@debbugs.gnu.org; Wed, 30 Nov 2016 04:11:06 -0500 Received: by mail-pg0-f41.google.com with SMTP id 3so80176025pgd.0 for <24870@debbugs.gnu.org>; Wed, 30 Nov 2016 01:11:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=TKbGYfkQqmJAdgqE5pb1ip9/kM5XW8yZdwBABgj2u3Q=; b=AS5HchtNNNCPMCMZiYhqtKzEdk3Xyml5XhbdQA02dqPKOvTu8YI38zkaH2ZQJJWf8n e39oRxvLsSEXqdeaWhfaA/JttCORI3awyYw4ob+BteEHZLT1d4dxjmNObbNpvtzF6ZJ+ yLpAiLoWTF5kVNaJdTj++11Ce3VHtfqwHAkhOzUwmipUegNhhr8o4uxlu/21rAFmLa0R RIrBBAu+Tb8PfFETgKshoewprMbRxij9Zt7fe39d922KSypZ2XZAdPxOgFft4xY6gBmm BNi46D6gaXuJ7UUrZhgo6pa3ADWNwn2AzQIb+oNQfAGDAAvXbGMhXT+eBNRT8HjHkFVk jIlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:references:date:in-reply-to :message-id:user-agent:mime-version:content-transfer-encoding; bh=TKbGYfkQqmJAdgqE5pb1ip9/kM5XW8yZdwBABgj2u3Q=; b=BHcq+TW6ZwfNKTX1Knc44MO14JMQxT928M0d2elJmJjQc/m1lIxb2SMKsyzULh/PMj ivgFhPFDf4UiJG9iIdhXE0/10HVNyh3VmwYBHhQvKKDuPgsvn7YKY5yGgREjuV3qt+Rh azdeEDoAmrDdOSElJjx4NSzMU9ufgZrkGajJEXFcf69zw4Y3ZErwRoYE/lIwvZtHR/cA d7y+zgUom8eF3G6pcB8e0RuwMlm675yDCojjH515Ec74v0Ih2CX2eFGOtfGbjmaxhYrX 3rwwFKWn8l3s0L3kZu4JPQO6T8IHcyA/CX1UoxpJu+bDAJ7ZAGuf5ItQiDaBj57y6Nvy FOHg== X-Gm-Message-State: AKaTC01j+ubWqYT4L/tGCuZLY8rZdSiXeY5pZpKlaOzAVJ0wAd2V8XLsfO1M7F3RgJNuWhQR X-Received: by 10.98.59.154 with SMTP id w26mr31921499pfj.112.1480497059728; Wed, 30 Nov 2016 01:10:59 -0800 (PST) Received: from marmstrong-macbookpro.roam.corp.google.com (50-46-113-121.evrt.wa.frontiernet.net. [50.46.113.121]) by smtp.gmail.com with ESMTPSA id a66sm101011640pfa.64.2016.11.30.01.10.58 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Nov 2016 01:10:58 -0800 (PST) From: Matt Armstrong X-Google-Original-From: Matt Armstrong References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> Date: Wed, 30 Nov 2016 01:10:58 -0800 In-Reply-To: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> ("Andreas \=\?utf-8\?Q\?R\=C3\=B6hler\=22's\?\= message of "Thu, 3 Nov 2016 20:38:09 +0100") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (darwin) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.9 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.9 (--) Andreas R=C3=B6hler writes: > haskell-mode, at EOB: > > --- > > {- To explore this file: -} > > asdf =3D > > --- > > parse-partial-sexp thinks being inside a paren - see attachment. > > GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11 Hi Andreas, Emacs does not have a haskell-mode, so this bug is difficult to reproduce. It may be more appropriate to report this to the haskell-mode maintainers for triage. They can figure out if it is a problem that should be fixed in haskell-mode itself, or a problem with Emacs. Alternatively, can you provide a series of clear instructions to reproduce the problem in a fresh Emacs started without your customizations? For example, begin by running "emacs -Q" and go from there. Your attached .png presents a buffer called *parse-partial-sexp-output*, but it is not clear how this was generated. Thanks From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Nov 2016 12:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Matt Armstrong Cc: 24870@debbugs.gnu.org Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148050889713058 (code B ref 24870); Wed, 30 Nov 2016 12:29:01 +0000 Received: (at 24870) by debbugs.gnu.org; 30 Nov 2016 12:28:17 +0000 Received: from localhost ([127.0.0.1]:47039 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC3zk-0003OY-T3 for submit@debbugs.gnu.org; Wed, 30 Nov 2016 07:28:17 -0500 Received: from mout.kundenserver.de ([217.72.192.75]:64151) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cC3zi-0003OJ-MD for 24870@debbugs.gnu.org; Wed, 30 Nov 2016 07:28:15 -0500 Received: from [192.168.178.35] ([77.12.119.56]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.183]) with ESMTPSA (Nemesis) id 0M6xID-1cxRLO0lPB-00wmH6; Wed, 30 Nov 2016 13:28:07 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: Date: Wed, 30 Nov 2016 13:37:06 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/alternative; boundary="------------588C47EDB22CB718449476F4" X-Provags-ID: V03:K0:zo3zyJmIXEbmJ5XrIg86R1SThy1EhQB2n4hoa9SuGUpX/lDKUvl pROQ8iqMIU7UaBxes6aC/AymrR46cjbQSJvvZi2/YbBn1K5yD1V53av+yQKp+EoDMxwRzOo RZ8e8p5gT6O4nyW9uJY9EzCDS8G5JuPlHhXDGZ6lTdx92RC7MyS8TChKGGp/4+dR5cSfiaS B8swiYW8Zo2SFTqDg3jeA== X-UI-Out-Filterresults: notjunk:1;V01:K0:Vp14YC/9AAs=:lh+fCNjSuviGdm8hgkn0ET T6QV06ZPG51FexropWlJ+c028WoBBytuvPvBH5St68cFr26PPbfZTmEDRqg1PNFxWURGwmjdy fx0tD035Y5ZTW3zKuNEFUwaECgh4UyiLI/L+tW1BtJ5WDPqnVOrmfvV/u6jhscTcdWChIOJHR 2DxHdjpvHSncc3yO3Q1Qu4xI51wUXsbJ3mF1zGHtPO3pZNixLdKjTf5JKHOpwWEAahkKi4+08 AM0N+Og1pi3s0MU5jdOcWDh4Jq7lR8qXDzIDGxUwu1AUyzU9p2sI28uvM9bp5p52hSILtZ+y3 sZog78YBFPcm732G55CCxqLMpdFFwg6BbeCvQ6ELxe6pp38r1Fx+QqVis9krgUIozNEVwnL+h jFwCuQH708Nmcj8paBCUfJQNEmtaNmQh6S/V0jAFoR56DmQqNV8K2buDRbZtIJODdgP9AiC9i NK1EFNPXrexAiiVNi+UIhqthKhPgW9TIADYLaH8wraQROnFDCeZBbDscfT1ZhNXk/OZ//YrbE zWENCLzAnJdq+ut0diswGsqHCNhSSgPFS7BtrX7edfsBZD4YylfIhU0kb4npKcf9CaT0NReQU idyDfcR8OKQmys9lpUUR+23fi8W8bu9kQ94PJaWIQuD5jteveBr4Uox/ZcKnvAHXzuTaOh5wx AtYVpkk2vVnOp0C72ydCfizTBcZn+KgaPTDxM4fW4e1uQF9zgBWAYm4cT9bkgcjuT0d/TdrCe thEuwvJWC6+tNMvT X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) This is a multi-part message in MIME format. --------------588C47EDB22CB718449476F4 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 30.11.2016 10:10, Matt Armstrong wrote: > Andreas Röhler writes: >> haskell-mode, at EOB: --- {- To explore this file: -} asdf = --- >> parse-partial-sexp thinks being inside a paren - see attachment. GNU >> Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11 > Hi Andreas, Emacs does not have a haskell-mode, so this bug is > difficult to reproduce. It may be more appropriate to report this to > the haskell-mode maintainers for triage. They can figure out if it is > a problem that should be fixed in haskell-mode itself, or a problem > with Emacs. Alternatively, can you provide a series of clear > instructions to reproduce the problem in a fresh Emacs started without > your customizations? For example, begin by running "emacs -Q" and go > from there. Your attached .png presents a buffer called > *parse-partial-sexp-output*, but it is not clear how this was > generated. Thanks Hi Matt, checked that with help of the haskell-mode folks already. https://github.com/haskell/haskell-mode/issues/1459 As it's nice at current pretest Emacs, concluded a bug in trunk. Here a shortened recipe. Put code below in a buffer: || |{- Just a comment: -}| M-x haskell-mode RET As after a comment, there should be no nesting. Than evaluate one of the forms below |(insert (format "%S" (syntax-ppss)))| |(insert (format "%S" (parse-partial-sexp (point-min) (point))))| Result both: (1 1 22 nil nil nil 0 nil nil (1) nil) GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15 --------------588C47EDB22CB718449476F4 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 8bit
On 30.11.2016 10:10, Matt Armstrong wrote:
Andreas Röhler <andreas.roehler@easy-emacs.de> writes:
haskell-mode, at EOB: --- {- To explore this file: -} asdf = --- parse-partial-sexp thinks being inside a paren - see attachment. GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11
Hi Andreas, Emacs does not have a haskell-mode, so this bug is difficult to reproduce. It may be more appropriate to report this to the haskell-mode maintainers for triage. They can figure out if it is a problem that should be fixed in haskell-mode itself, or a problem with Emacs. Alternatively, can you provide a series of clear instructions to reproduce the problem in a fresh Emacs started without your customizations? For example, begin by running "emacs -Q" and go from there. Your attached .png presents a buffer called *parse-partial-sexp-output*, but it is not clear how this was generated. Thanks
Hi Matt,

checked that with help of the haskell-mode folks already.
https://github.com/haskell/haskell-mode/issues/1459

As it's nice at current pretest Emacs, concluded a bug in trunk.
Here a shortened recipe. Put code below in a buffer:

{- Just a comment: -}

M-x haskell-mode RET

As after a comment, there should be no nesting.
Than evaluate one of the forms below

(insert (format "%S" (syntax-ppss)))
(insert (format "%S" (parse-partial-sexp (point-min) (point))))

Result both: (1 1 22 nil nil nil 0 nil nil (1) nil)

GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15
--------------588C47EDB22CB718449476F4-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Matt Armstrong Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 30 Nov 2016 23:03:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148054697013493 (code B ref 24870); Wed, 30 Nov 2016 23:03:01 +0000 Received: (at 24870) by debbugs.gnu.org; 30 Nov 2016 23:02:50 +0000 Received: from localhost ([127.0.0.1]:47851 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCDtp-0003VZ-TW for submit@debbugs.gnu.org; Wed, 30 Nov 2016 18:02:50 -0500 Received: from mail-pg0-f47.google.com ([74.125.83.47]:33663) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCDtn-0003VK-RR for 24870@debbugs.gnu.org; Wed, 30 Nov 2016 18:02:48 -0500 Received: by mail-pg0-f47.google.com with SMTP id 3so86977769pgd.0 for <24870@debbugs.gnu.org>; Wed, 30 Nov 2016 15:02:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:in-reply-to:references:date:message-id :mime-version:content-transfer-encoding; bh=mRT/zvJvp4//IXqeP+sqi/tThQ+nLCQ0zhrrVxIDBD0=; b=Qpklc1Hmd77cerj4QglY+2UygV+Plq3RvEfrcVV5HhHGa6FKHPl6W4w27a870uwmDj fUVK/ZsgKWaIu0/aUWj3ZT3GmE3tOWUHPb+kQVYpulpLY0voLmRVbpMTGeBv1k0PYKQI iteVQF2yx0FjXjfgxkoJ6oZ7ZSEbqElOk3zL7NmU615p/ZfKEHdeviWUpP3Yo2A0G+8a P4Z3oCcpuZH+3sUaCjFBjZQmPpaxg4X+YWHG8Qe8Owhz3FBb84CNJ1KSEfVCuIyCAQZL ZyKkTTfX3RphVarEVsBAtULVl3m8oizwD++OonlAQloOa3F5zvGyKmZb8F4OAmb2f2dw fw7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date :message-id:mime-version:content-transfer-encoding; bh=mRT/zvJvp4//IXqeP+sqi/tThQ+nLCQ0zhrrVxIDBD0=; b=A0D/Fh7Gv1GTnXxfvyRv/Vr5kkjrN1Eop04QYsUekUIIZiAjy8GEtK/7HnhDfTUg9y MZPqENV6/hd64VHTwiGn32TiO5gNw5ZN1XDQCq8XO/T5wOVPib353PU3hvdvauk8Wiqa xDJniya/15A/EmZi4GIoLloNyYZ4TQS3bv3gq67AkhWmaOR03HZwgxj8ATxPMq+3zxu0 mY+vEOVwa9rwXe/okZMTUNJ9Uw8YLmuRCgvZbZml4iiGncGPSUazcefh8dicE6IOSzpw BuN/kSZ2IcHo2iYmi9SJANjkJ4LtmAhZTdQsTyhxei4g33T0ai4XoSGL4AHwzsxkKNiS ayvQ== X-Gm-Message-State: AKaTC0317de7O/WC0bbACFKUMGOYLwiKCgY5J7mMBTQRzZAeoLIWCXZAeFvO+A1tXPRKoBjg X-Received: by 10.84.216.20 with SMTP id m20mr78087233pli.126.1480546961507; Wed, 30 Nov 2016 15:02:41 -0800 (PST) Received: from marmstrong-linux.kir.corp.google.com ([2620:0:1008:11:f0be:8897:bbf8:427d]) by smtp.gmail.com with ESMTPSA id i124sm87526223pgd.15.2016.11.30.15.02.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Nov 2016 15:02:40 -0800 (PST) From: Matt Armstrong In-Reply-To: References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> Date: Wed, 30 Nov 2016 15:02:39 -0800 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: -2.9 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.9 (--) Andreas R=C3=B6hler writes: > On 30.11.2016 10:10, Matt Armstrong wrote: >> Andreas R=C3=B6hler writes: >>> haskell-mode, at EOB: --- {- To explore this file: -} asdf =3D ---=20 >>> parse-partial-sexp thinks being inside a paren - see attachment. GNU=20 >>> Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11= =20 >> Hi Andreas, Emacs does not have a haskell-mode, so this bug is=20 >> difficult to reproduce. It may be more appropriate to report this to=20 >> the haskell-mode maintainers for triage. They can figure out if it is=20 >> a problem that should be fixed in haskell-mode itself, or a problem=20 >> with Emacs. Alternatively, can you provide a series of clear=20 >> instructions to reproduce the problem in a fresh Emacs started without=20 >> your customizations? For example, begin by running "emacs -Q" and go=20 >> from there. Your attached .png presents a buffer called=20 >> *parse-partial-sexp-output*, but it is not clear how this was=20 >> generated. Thanks > Hi Matt, > > checked that with help of the haskell-mode folks already. > https://github.com/haskell/haskell-mode/issues/1459 Thanks. For reference, this is what you have said on the github bug: Seems a bug of GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15 Does not exist at GNU Emacs 25.1.90.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-29 > As it's nice at current pretest Emacs, concluded a bug in trunk. > Here a shortened recipe. Put code below in a buffer: > || > |{- Just a comment: -}| > > M-x haskell-mode RET Note that haskell-mode is not part of Emacs. Ideally, your steps to reproduce that begin with running "emacs -Q". Emacs maintainers that might not also be Haskell hackers will appreciate it. :) Also, can you describe the visible symptom that caused you to begin looking at syntax-ppss and parse-partial-sexp? That description may help me or others spot similarities with other reported bugs. (I must say that I am not an Emacs expert, and I do not usually reply to Emacs bugs. I looked at a few bugs last night as a way to help maintainers triage the "easy" bugs. It does not look like this bug is easy!) From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Dec 2016 01:17:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Matt Armstrong Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.14805549885305 (code B ref 24870); Thu, 01 Dec 2016 01:17:01 +0000 Received: (at 24870) by debbugs.gnu.org; 1 Dec 2016 01:16:28 +0000 Received: from localhost ([127.0.0.1]:47920 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCFz9-0001N1-UJ for submit@debbugs.gnu.org; Wed, 30 Nov 2016 20:16:28 -0500 Received: from mail-io0-f176.google.com ([209.85.223.176]:35573) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCFz7-0001GT-TX for 24870@debbugs.gnu.org; Wed, 30 Nov 2016 20:16:26 -0500 Received: by mail-io0-f176.google.com with SMTP id a124so385855809ioe.2 for <24870@debbugs.gnu.org>; Wed, 30 Nov 2016 17:16:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version:content-transfer-encoding; bh=ikZDrzoca/+5U2P6d9Cp5LgLuFgAZGC1kMwktcreEaA=; b=fcjOo1W/iLTru7GML8dSjMvNn83kmUIjyE4yn3f2+kTcPnLEoCqxftr1Ee7KZs2oiF WNd9lmpZy2yR68v98lJTXnJ/UIxe4FZbKxFKCWpezRk7NVSDgRVKlFNYF0cDGggTW8qr As1ulc3DhCAYLYM0L4QDfsNiotozFt5XvVAtaz0AosAD+fRKnQJbJ26B7qLuM+4bfdAT mRaU+nNjbGXRD7HYnsKNvwAPgQTn57h2Si/+BBULb35h8cg9IC/gT4M5Qw/cp0ejKzi+ Iygauk5wD/hKCtUNJUYcMDixUKzNiH0zPI8M5p2w4qSe+5BKTBs4d8Aj4/zsr8VHWFgI scFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version :content-transfer-encoding; bh=ikZDrzoca/+5U2P6d9Cp5LgLuFgAZGC1kMwktcreEaA=; b=EGSVSnp62329jn6wRf6JFIdPrFczM4b5jUD2+HUgj1AlZoSQFUzKK63VRNQ/+XQrRP sw5TpI8VaMr7KYyavz56wpArS5RnI/8WcCb9WbmHPh6MHailrA9f/fuzZyIM3TNxWMIS 4paISVEulVGTqWyRRfjvMkdD+qqBEtyCUiQU5XrNScSmMCVNlvWiiNCUT3dS0caR/R1a qytdkHqn91IYVZqh9ZDveV/pfHmyD18UxhsCFDDWwh+dueCcueCRgxO7+L/kOkpeE7sL gkCxW+jwFqj5+YhyehEZhG2cNY8zv39VxSLrMR2YM6YpTrU7rA3gLyfs8hmpHh2gBrDV cC8Q== X-Gm-Message-State: AKaTC00XvNVWhJ2M0hqKF7bVdHqjgGfP/owYv2S/WS/Qf5wvzqvSC/REcsTqLK3U5ddmqw== X-Received: by 10.107.51.198 with SMTP id z189mr29766608ioz.6.1480554980282; Wed, 30 Nov 2016 17:16:20 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id u73sm3569345ita.22.2016.11.30.17.16.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 30 Nov 2016 17:16:19 -0800 (PST) From: npostavs@users.sourceforge.net References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> Date: Wed, 30 Nov 2016 20:17:17 -0500 In-Reply-To: (Matt Armstrong's message of "Wed, 30 Nov 2016 15:02:39 -0800") Message-ID: <87mvggh2hu.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) Matt Armstrong writes: > Andreas R=C3=B6hler writes: > >> On 30.11.2016 10:10, Matt Armstrong wrote: >>> Andreas R=C3=B6hler writes: >>>> haskell-mode, at EOB: --- {- To explore this file: -} asdf =3D ---=20 >>>> parse-partial-sexp thinks being inside a paren - see attachment. GNU=20 >>>> Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11= =20 >>> Hi Andreas, Emacs does not have a haskell-mode, so this bug is=20 >>> difficult to reproduce. It may be more appropriate to report this to=20 >>> the haskell-mode maintainers for triage. They can figure out if it is=20 >>> a problem that should be fixed in haskell-mode itself, or a problem=20 >>> with Emacs. Alternatively, can you provide a series of clear=20 >>> instructions to reproduce the problem in a fresh Emacs started without= =20 >>> your customizations? For example, begin by running "emacs -Q" and go=20 >>> from there. Your attached .png presents a buffer called=20 >>> *parse-partial-sexp-output*, but it is not clear how this was=20 >>> generated. Thanks >> Hi Matt, >> >> checked that with help of the haskell-mode folks already. >> https://github.com/haskell/haskell-mode/issues/1459 > > Thanks. For reference, this is what you have said on the github bug: > > Seems a bug of > GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15 > Does not exist at > GNU Emacs 25.1.90.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-29 > > >> As it's nice at current pretest Emacs, concluded a bug in trunk. >> Here a shortened recipe. Put code below in a buffer: >> || >> |{- Just a comment: -}| >> >> M-x haskell-mode RET > > Note that haskell-mode is not part of Emacs. Ideally, your steps to > reproduce that begin with running "emacs -Q". Emacs maintainers that > might not also be Haskell hackers will appreciate it. :) > > Also, can you describe the visible symptom that caused you to begin > looking at syntax-ppss and parse-partial-sexp? That description may > help me or others spot similarities with other reported bugs. > > (I must say that I am not an Emacs expert, and I do not usually reply to > Emacs bugs. I looked at a few bugs last night as a way to help > maintainers triage the "easy" bugs. It does not look like this bug is > easy!) This seems similar to #24767. From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Dec 2016 08:17:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: npostavs@users.sourceforge.net, Matt Armstrong Cc: 24870@debbugs.gnu.org Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148058017411064 (code B ref 24870); Thu, 01 Dec 2016 08:17:01 +0000 Received: (at 24870) by debbugs.gnu.org; 1 Dec 2016 08:16:14 +0000 Received: from localhost ([127.0.0.1]:48045 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCMXN-0002sO-Tp for submit@debbugs.gnu.org; Thu, 01 Dec 2016 03:16:14 -0500 Received: from mout.kundenserver.de ([217.72.192.73]:57961) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCMXL-0002s9-Gf for 24870@debbugs.gnu.org; Thu, 01 Dec 2016 03:16:12 -0500 Received: from [192.168.178.35] ([77.12.119.56]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.183]) with ESMTPSA (Nemesis) id 0M0KWj-1czMol203Z-00ubPh; Thu, 01 Dec 2016 09:15:50 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: Date: Thu, 1 Dec 2016 09:24:53 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: <87mvggh2hu.fsf@users.sourceforge.net> Content-Type: multipart/alternative; boundary="------------B3F57053EB1EC6DB7996E071" X-Provags-ID: V03:K0:oIKJlcvNRCxTdIurOu29beb0ptyjN3HGjr38ccx/ax+l+bVMRWI nSOmHrsZ8H2TNsa/ddHnnaiulKHlZvRxK0WQ8qs1G0lBmWQbyv0s7hgSwr5eRBdczZ0wrvs kQ2NdIuHkvj+TmHXrzbpnzQfAg+X4VtDkL7hRY94wY+w6hVx1l6JhnHDPSzVQTdr2vDs33X 5SR2Zg9ufyXL/3ogJB6XQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:+kYqBpzRNw0=:qO1oGQ/sjz1BCz3w2C1ZbR ZmJdJlTDZKbKcTX4tnG9i65O5NEHujq+6UMNPcB/z3QJZvFN+WmI7RR37wd1Y06kaj1H6Og/Z 7W1kRfFe43K/zwUSsiWodJiAKEBSge+0F8NVFcbswP5d6Wfg773cGOnTGIaC4kUnQ6jFupiHY q/SKWyw2rT5HavqvWsLO1FsZbRjMNzjsUPYFQmjueZ7sewstrwcL2Osx7mFU1K4q0bkVQKxG5 fVLPwlEYBwit+QHYmk1NXgfJpFif7CwYqoDUqpfULFlg8IZJeh0I0LMnoqrGIAM0xt3wx9BN8 CBzOdVPnupJg2ctjtUHpiyRWVsZ6oQB7HP/Om1KeHc6bbQpCF1+1QUhBRKO6NZDe1jKcoG6t+ /xnghOw7Q8Q1fOwaatvKI9cgTfOyPjsYZccATvyn3Vka60Fn9se/qV4jLry4lsyqKNiod8ktM +6zV0/20axLYqhc1WpL82pEsELDQdcrAsMBv+pv8MgEWxM/jiaO2ChNG9D9AjEIPERln+Qv8M /ksC5S9j67SfFWe3IA8C3qAg3nM36NRLBjE0/wnk2DjlEGZLMAErsEKMj5eBgtvMF1K/pa/qN p7GZBSJnru+UOQz6JhBD9eI3uZmsubaY/dpIMgbQBYAMCSpv9TsDB7yj50z9wlbtKGdo4Nu+o HeJCJRSCn9PEj5PYJvRQh+ZDzVyj4hJcqK9C8DOLxDA51OuOFS8vLrBDMyhHtDydRt4rIyKMH e+MvceTUSDTCzPvr X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.0 (/) This is a multi-part message in MIME format. --------------B3F57053EB1EC6DB7996E071 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 01.12.2016 02:17, npostavs@users.sourceforge.net wrote: > Matt Armstrong writes: > >> Andreas Röhler writes: >> >>> On 30.11.2016 10:10, Matt Armstrong wrote: >>>> Andreas Röhler writes: >>>>> haskell-mode, at EOB: --- {- To explore this file: -} asdf = --- >>>>> parse-partial-sexp thinks being inside a paren - see attachment. GNU >>>>> Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11 >>>> Hi Andreas, Emacs does not have a haskell-mode, so this bug is >>>> difficult to reproduce. It may be more appropriate to report this to >>>> the haskell-mode maintainers for triage. They can figure out if it is >>>> a problem that should be fixed in haskell-mode itself, or a problem >>>> with Emacs. Alternatively, can you provide a series of clear >>>> instructions to reproduce the problem in a fresh Emacs started without >>>> your customizations? For example, begin by running "emacs -Q" and go >>>> from there. Your attached .png presents a buffer called >>>> *parse-partial-sexp-output*, but it is not clear how this was >>>> generated. Thanks >>> Hi Matt, >>> >>> checked that with help of the haskell-mode folks already. >>> https://github.com/haskell/haskell-mode/issues/1459 >> Thanks. For reference, this is what you have said on the github bug: >> >> Seems a bug of >> GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15 >> Does not exist at >> GNU Emacs 25.1.90.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-29 >> >> >>> As it's nice at current pretest Emacs, concluded a bug in trunk. >>> Here a shortened recipe. Put code below in a buffer: >>> || >>> |{- Just a comment: -}| >>> >>> M-x haskell-mode RET >> Note that haskell-mode is not part of Emacs. Ideally, your steps to >> reproduce that begin with running "emacs -Q". Emacs maintainers that >> might not also be Haskell hackers will appreciate it. :) >> >> Also, can you describe the visible symptom that caused you to begin >> looking at syntax-ppss and parse-partial-sexp? That description may >> help me or others spot similarities with other reported bugs. >> >> (I must say that I am not an Emacs expert, and I do not usually reply to >> Emacs bugs. I looked at a few bugs last night as a way to help >> maintainers triage the "easy" bugs. It does not look like this bug is >> easy!) > This seems similar to #24767. There is said: > The string "(* hello *)" should be highlighted as a comment, and is > indeed correctly highlighted this way in Emacs-25 (and Emacs-24), but > not in "master". Here in "master" the syntax-highlighting is correct. So the cases might be related, but not the same. BTW here is the recipe with a new setup. {- asdfasd -} -- (parse-partial-sexp (point-min) (point)) -- ==> (1 1 nil nil t nil 0 nil 15 (1) nil) absolut n | n >= 0 = n | otherwise = -n --------------B3F57053EB1EC6DB7996E071 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 8bit



On 01.12.2016 02:17, npostavs@users.sourceforge.net wrote:
Matt Armstrong <marmstrong@google.com> writes:

Andreas Röhler <andreas.roehler@easy-emacs.de> writes:

On 30.11.2016 10:10, Matt Armstrong wrote:
Andreas Röhler <andreas.roehler@easy-emacs.de> writes:
haskell-mode, at EOB: --- {- To explore this file: -} asdf = --- 
parse-partial-sexp thinks being inside a paren - see attachment. GNU 
Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-10-11 
Hi Andreas, Emacs does not have a haskell-mode, so this bug is 
difficult to reproduce. It may be more appropriate to report this to 
the haskell-mode maintainers for triage. They can figure out if it is 
a problem that should be fixed in haskell-mode itself, or a problem 
with Emacs. Alternatively, can you provide a series of clear 
instructions to reproduce the problem in a fresh Emacs started without 
your customizations? For example, begin by running "emacs -Q" and go 
from there. Your attached .png presents a buffer called 
*parse-partial-sexp-output*, but it is not clear how this was 
generated. Thanks
Hi Matt,

checked that with help of the haskell-mode folks already.
https://github.com/haskell/haskell-mode/issues/1459
Thanks.  For reference, this is what you have said on the github bug:

Seems a bug of
GNU Emacs 26.0.50.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-15
Does not exist at
GNU Emacs 25.1.90.1 (i686-pc-linux-gnu, GTK+ Version 3.14.5) of 2016-11-29


As it's nice at current pretest Emacs, concluded a bug in trunk.
Here a shortened recipe. Put code below in a buffer:
||
|{- Just a comment: -}|

M-x haskell-mode RET
Note that haskell-mode is not part of Emacs.  Ideally, your steps to
reproduce that begin with running "emacs -Q".  Emacs maintainers that
might not also be Haskell hackers will appreciate it.  :)

Also, can you describe the visible symptom that caused you to begin
looking at syntax-ppss and parse-partial-sexp?  That description may
help me or others spot similarities with other reported bugs.

(I must say that I am not an Emacs expert, and I do not usually reply to
Emacs bugs.  I looked at a few bugs last night as a way to help
maintainers triage the "easy" bugs.  It does not look like this bug is
easy!)
This seems similar to #24767.

There is said:

> The string "(* hello *)" should be highlighted as a comment, and is
> indeed correctly highlighted this way in Emacs-25 (and Emacs-24), but
> not in "master".

Here in "master" the syntax-highlighting is correct. So the cases might be related, but not the same.

BTW here is the recipe with a new setup.

{- asdfasd -}
-- (parse-partial-sexp (point-min) (point))
-- ==> (1 1 nil nil t nil 0 nil 15 (1) nil)

absolut n | n >= 0 = n
          | otherwise = -n


--------------B3F57053EB1EC6DB7996E071-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Dec 2016 08:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Matt Armstrong Cc: 24870@debbugs.gnu.org Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148058068911797 (code B ref 24870); Thu, 01 Dec 2016 08:25:02 +0000 Received: (at 24870) by debbugs.gnu.org; 1 Dec 2016 08:24:49 +0000 Received: from localhost ([127.0.0.1]:48049 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCMfg-00034D-U5 for submit@debbugs.gnu.org; Thu, 01 Dec 2016 03:24:49 -0500 Received: from mout.kundenserver.de ([212.227.17.10]:64252) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCMfg-000340-0O for 24870@debbugs.gnu.org; Thu, 01 Dec 2016 03:24:48 -0500 Received: from [192.168.178.35] ([77.12.119.56]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.183]) with ESMTPSA (Nemesis) id 0MT6qE-1cJTP43Ckg-00SAaU; Thu, 01 Dec 2016 09:24:40 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: <6979d874-dc17-6b6f-3d8d-000832e6ba50@easy-emacs.de> Date: Thu, 1 Dec 2016 09:33:42 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.4.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:B7zs2Cz7cntw/25AyriWG3Vyu2lfJhNKbJE+FUXbNBUvgwkmBpL 9Z2VMfnz4xqqiMQBrGJqCOMh/cLiH6BTqY6LaQEdp3XoVbPPU6GqAQy88S7MjLAIYmajKxp p01aRN6Q7WUvAj6DVXJ5r5+MYPNmcQHhH8Vkmmd2kv8Vm+OUgC3m2jLcVSVRSmCt+51l2lG kikjawf8keOlQBIwGomZw== X-UI-Out-Filterresults: notjunk:1;V01:K0:qkx5Ov6KfPs=:KIp57zT42iMtSb3boNKsKB Wep/JoBd65CeiuVsPieYZVnodNyr8FhXYYXjG2qGYG6MUzzvB8SrQfiA6u6fxUfcElUVRfri4 c7JGnwLL/kz0R1iaZxdrKv/XKTtbbcw+M+TPuv0qTr3DEVgaxnAApRmmj8M68l27YIBsHVUH9 NuIru0aP2iZvZBWEOn5XvVVNpwNAXoXlBn9TRjU6cdECTPVKSEV3qSY8TcloZKsyx1b6BEeAP jEmYLv+h0pOu87KATIaQGDFyLHXTlRuKxj8mcIocrcrNnCUoBPddjKNPWTUzXLCW15IdFvATn gMe+PHaxafjPPyU05RVoqf2zrs/qxiiUe3MTFnt57v9weoAHH8RNPHFw882zawuW847KlDcY9 wo/Pquw8we6AXbRbrq7+xTnOTfaj0YU9dwztyItcpbvl7x8xSoT5PsK+qjnYDwf8aS/VTfmCS 8lZx+uc8lxI636TUGh/REx81UE20onW7mSSnq8Vu+RkmHUpMYcRH+rlKEMgWsiNln9yEK+PG8 Do1OIt5H1u52JWP8WmE9+OyC0h4C8sZTILGy9HJvAe7ggrasBH4mBdxTUhfxEGEfEb20RvYJh UmMkAfbYChlKYRMVwlh0ihO3IqIJbfxPNh7fcRt7HX+Do5E21m1hCDym145/vJjJN5iLHfIrE gC6nvutxV16R+mhDKTSrQOL/P3T5zwTEyVH5kXPFVFb/FGm/gR84AObvioDpUR/gg+QL0OReE NEMsZpq2yZNXMls9 X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) On 01.12.2016 00:02, Matt Armstrong wrote: > Also, can you describe the visible symptom that caused you to begin > looking at syntax-ppss and parse-partial-sexp? That description may > help me or others spot similarities with other reported bugs. > > (I must say that I am not an Emacs expert, and I do not usually reply to > Emacs bugs. I looked at a few bugs last night as a way to help > maintainers triage the "easy" bugs. It does not look like this bug is > easy!) It broke some code relying on results of parse-partial-sexp This , resp. syntax-ppss, is an internally widely used function. From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2016 03:00:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: moreinfo To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org, Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148168436230887 (code B ref 24870); Wed, 14 Dec 2016 03:00:02 +0000 Received: (at 24870) by debbugs.gnu.org; 14 Dec 2016 02:59:22 +0000 Received: from localhost ([127.0.0.1]:41243 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cGzms-000821-AP for submit@debbugs.gnu.org; Tue, 13 Dec 2016 21:59:22 -0500 Received: from mail-io0-f179.google.com ([209.85.223.179]:36129) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cGzmq-00081h-8F; Tue, 13 Dec 2016 21:59:20 -0500 Received: by mail-io0-f179.google.com with SMTP id 136so18362120iou.3; Tue, 13 Dec 2016 18:59:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=Dmm4ffRXUF0U0xMlRKGeHrRDSR557FETyGfr2ROhk4w=; b=WKKSD5dMFugrMS3FRMTFXGN4Z6WAbw/j+xxpHy0V8DOnqP/h0YYP/nzDwMD2DWIRVH ZsJO0njVcjgkN36WgnMano0h7n8WLyajvZdj4IDraqubWkhlVa1vBZpqQeqANGeQfeAH YIXSbjnTkLIBlzzHDZttSe83Ml3JVWhESzl6Ce8c1g+dg+dqL6F8JNAVAga8cOzQVjp0 L9bbmKedV6jv/TO1sCM2vGdBpe0/Tv+JzzMmR3wqsFHBX8eQDnVlv7Q/CWvHYZ3d1POZ lRz8hKrHoXHJs7t8WZsSHac/VIM45Ale4TW2hDkbOq3e5FpxwXmQBPUvlOZ0gkFAtbn0 iE4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=Dmm4ffRXUF0U0xMlRKGeHrRDSR557FETyGfr2ROhk4w=; b=fnf2uCQsgR9Su+gOtLm35+Bj3DAXlNOXTA/ixJ1Rv4/tsWtOSWvyzmMM9xmCgV//0y XFKRQN5cTmV+sgsqA7qh+0T+z4Dua2DRdQkw5KRkNP5Mu7x1/nEMOBc/1SpsfexYWwBm 9Yu5k81HnOV1uhCQAHWUcN9qYJK9iJRLOd50HeL65FLrrbgqCMXWImrHtf41IKEU9rFn BWnd7GsHSUVNCBB0WPeFglX+t+eE1easGKVEkTO7d7BJxAg2LyyXTE7oerACbMOgI/in kHtHM+t8WZ0ISoq4H3IJsp3IXHM7842zSU57gd5PC8Rc3FlbYBysCMiYITSH8LIn1W5d BF6g== X-Gm-Message-State: AKaTC00/kSsO+cOnn6CvZxBGx5hmPCpLkrIgpIGYUhzMGR5lSQdLBNjVkBQ1kM4ygSI6uw== X-Received: by 10.107.133.76 with SMTP id h73mr89283076iod.148.1481684354493; Tue, 13 Dec 2016 18:59:14 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 9sm8837146itv.0.2016.12.13.18.59.12 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 13 Dec 2016 18:59:13 -0800 (PST) From: npostavs@users.sourceforge.net References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> Date: Tue, 13 Dec 2016 22:00:16 -0500 In-Reply-To: ("Andreas \=\?utf-8\?Q\?R\=C3\=B6hler\=22's\?\= message of "Thu, 1 Dec 2016 09:24:53 +0100") Message-ID: <87h967cj0f.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) --=-=-= Content-Type: text/plain tags 24870 = confirmed merge 24870 25063 quit This is the same as your report in 25063, as you noted there, the comment starter is being counted as a list opener (although the comment closer is not being recognized as a list closer). Here's a recipe that doesn't require haskell-mode: --=-=-= Content-Type: text/plain Content-Disposition: inline; filename=bug-24870-comment-nesting-pps.el Content-Description: bug reproducer (defconst 24870-syntax-table (let ((table (make-syntax-table))) (modify-syntax-entry ?\{ "(}1nb" table) (modify-syntax-entry ?\} "){4nb" table) (modify-syntax-entry ?- ". 123" table) table)) (defun 24870-test () (interactive) (with-current-buffer (get-buffer-create "*24870 test*") (set-syntax-table 24870-syntax-table) (insert "{-C-}\nX") (message "pps nesting: %d" (nth 0 (parse-partial-sexp (point-min) (point-max)))) (display-buffer (current-buffer)))) --=-=-= Content-Type: text/plain I have tracked the issue down to scan_sexps_forward in syntax.c --=-=-=-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2016 04:04:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org, Alan Mackenzie , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148168823111553 (code B ref 24870); Wed, 14 Dec 2016 04:04:01 +0000 Received: (at 24870) by debbugs.gnu.org; 14 Dec 2016 04:03:51 +0000 Received: from localhost ([127.0.0.1]:41292 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH0nH-00030H-6y for submit@debbugs.gnu.org; Tue, 13 Dec 2016 23:03:51 -0500 Received: from mail-io0-f181.google.com ([209.85.223.181]:35918) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH0nF-000305-EN for 24870@debbugs.gnu.org; Tue, 13 Dec 2016 23:03:49 -0500 Received: by mail-io0-f181.google.com with SMTP id 136so20246787iou.3 for <24870@debbugs.gnu.org>; Tue, 13 Dec 2016 20:03:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=I0a8evumFCjNqV9kCjvR7snUwF7FDlLT5auOKzSxQdM=; b=Odo9LjlY2Fz7ByQMHq9WqLfNtrICGEO0Oaj+2MvmA72ZKD+sjVj6W3C2e/nHLTV9Id T5IIELA4TzynQEsc46b7cHgrfuKw57rPYu19XoeRhezPjaXkNPVL2sN9BJV+unojjiWV /1f/18ZYMhiFoe0TruYiG+MhXG6J+cWfrP9+NS6vMsWdDnxD+abd4tILZr8PVVjw1oFR 3Pqx18xiDntLhvX43M4BTDYMwQqNcphQ21yqZzCPY9ZFgAU5wyGnqWXmjtvSrthfgpX5 Hgoo/eA7klepemFM5NITHC5pbrbUdmP0eSvaFbs9/a264zQISPeqca+xEZJsFwsaphvh t0qA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=I0a8evumFCjNqV9kCjvR7snUwF7FDlLT5auOKzSxQdM=; b=AC5G1m8GKGZXlJjNXYNDGpuDWh/97mJL5C+PJAcpf+0+WdNvKq2T1XdOrH2pDRxN/a PeaPTF1mimZVDmn1CJ+NFU6qoZcJZ6+RsnJ/W305rZlnHt0+NvgJ1XcV5RaD7EsDugrZ YnVq5+wmC6BqG6A46XXXUJu4BX0qJ7lGKI+0DBBUqqj+N1PvHrHHRmciGrESrq/bFacn N26w2MMx91ZtebfqDACeC76jkbM6eQ11xH0qmUivGtGSDfyN8MS12ZK0NhclD+1aKVu3 k3BC2RNAqb8nYiCc0flPqZvCxcZTNWenh88a92FfEswxsPGAjrS5DquX/dFyo2iVBCJu JNhA== X-Gm-Message-State: AKaTC0098X2hJW1SMGwWpTJ5pIGhVHe08aJw2CuOxhh5qnl1Zpb7IFTYhSahj3O+MPk3cA== X-Received: by 10.36.224.200 with SMTP id c191mr5590649ith.118.1481688223882; Tue, 13 Dec 2016 20:03:43 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id q82sm1971806itd.10.2016.12.13.20.03.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 13 Dec 2016 20:03:43 -0800 (PST) From: npostavs@users.sourceforge.net References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> Date: Tue, 13 Dec 2016 23:04:45 -0500 In-Reply-To: <87h967cj0f.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Tue, 13 Dec 2016 22:00:16 -0500") Message-ID: <87eg1bcg0y.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) --=-=-= Content-Type: text/plain npostavs@users.sourceforge.net writes: > > > I have tracked the issue down to scan_sexps_forward in syntax.c Applying this change which reverts part of [1] seems to fix the issue: --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=bug-24870-quick-fix.diff Content-Description: diff that seems to fix this bug --- i/src/syntax.c +++ w/src/syntax.c @@ -3192,7 +3192,11 @@ scan_sexps_forward (struct lisp_parse_state *state, while (from < end) { - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) + INC_FROM; + code = prev_from_syntax & 0xff; + + if (from < end + && SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) && (c1 = FETCH_CHAR (from_byte), syntax = SYNTAX_WITH_FLAGS (c1), SYNTAX_FLAGS_COMSTART_SECOND (syntax))) @@ -3213,8 +3217,6 @@ scan_sexps_forward (struct lisp_parse_state *state, } else { - INC_FROM; - code = prev_from_syntax & 0xff; if (code == Scomment_fence) { /* Record the comment style we have entered so that only --=-=-= Content-Type: text/plain Alan, can you explain what the idea behind that change was? I think it might correspond to this part of the commit message: Reformulate code at the top of the main loop correctly to recognize comment openers when starting in the middle of one. [1]: 9dcf5998935c Sun Mar 20 13:19:48 2016 +0000 "Amend parse-partial-sexp correctly to handle two character comment delimiters" --=-=-=-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2016 06:37:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Alan Mackenzie , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148169740726768 (code B ref 24870); Wed, 14 Dec 2016 06:37:02 +0000 Received: (at 24870) by debbugs.gnu.org; 14 Dec 2016 06:36:47 +0000 Received: from localhost ([127.0.0.1]:41348 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH3BH-0006xf-4z for submit@debbugs.gnu.org; Wed, 14 Dec 2016 01:36:47 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:57951) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cH3BF-0006xU-IA for 24870@debbugs.gnu.org; Wed, 14 Dec 2016 01:36:46 -0500 Received: from [192.168.178.35] ([77.3.28.25]) by mrelayeu.kundenserver.de (mreue001 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MGJlf-1cNMh60WFL-00F9tr; Wed, 14 Dec 2016 07:36:23 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: <0633d0d0-9521-7288-af5b-e039e89bdd23@easy-emacs.de> Date: Wed, 14 Dec 2016 07:45:45 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.5.1 MIME-Version: 1.0 In-Reply-To: <87eg1bcg0y.fsf@users.sourceforge.net> Content-Type: multipart/alternative; boundary="------------6DE364D3C2DE4D117BCC76A2" X-Provags-ID: V03:K0:VY+/3Mc9VLAs2/k5bRbnAX7wGXjOuqNMBZX+HRUz37lDaN38hwG zF6bZl/0vVJmk5u63U7gcbu5wtJvpplLY1wZTp9qwfuTJX2E8Qm7opclsApksbXJ2gJ8isr isko4a0/p/pDrwGoRyWq/o/3cUK95Vmh7FMB6/O8dyKQTCOCVJBUfmkpRNIbb40boOv33VX 5x1at328mrmeb2ZyILtVA== X-UI-Out-Filterresults: notjunk:1;V01:K0:IGN9mLYIN2k=:OSgaXar0hyZuIJhEOV6Gto SF9hjZYyntYbTuMPwlPBufDcYXL6V67KkaIqZbHpmeeYYwW9ys5hdE5FKWM1HL5kCLT9fbvVR pA22GU64w8s1rdBg4OxBAe4MqWcuiiK2xTeGEy1kd4ztKX7nzDmoLfR8zpESUFkEOBz8zeSZs XwzpW77o3s5f/2svXiujB0bUB7kLM37wbUC4eqffa7PTJCSl/4rAakSooX/wJj5nq0grrYo3l NwubS7FtwzCJ6EpB0BiT8MK6s/1U/D8D7rZ5SPSk1iztL47i88JWVFyOSr9leI8zo4Kg7OIav KflcWk0KAf5WDc3k1kFAkWAKOO5aE8DoHNMTixhuYXcxf+mfm4wASjdu2hIndE3GUDc+G/9hb Drp1tnvZh8kMBDwsgC+4R1cZt0tdydX141ENbCzAGDujfO59VftLr25831Shy2aeyOFwnbzaB 4RN+Q3oVc3S2qCNRuSgmGZOjevcBUcEE+WcHf9JbvyW1tnqXYtBXQdhAV7sM7vr9nBEsHaDli obTFegEKCCocojxX75LGd2OnhwVLgeGLB0FCvaUWFz+rK0kfFIc0wiewAZrYnGJdzdQNhBL4n AJNkhl0u3QQZbuQxsFko95AtIIjVrej8onoLL1rcby9Droa4RUTgSqyRfpmRAtgejFAm8ZTBb j8yZ32Q34Q116Hl5Miiw/iFgXd+Ok6q0yncYRWDaQOlMTHk/0+ZpqjtXuz70FZZ7TF6eBRMwt omNw+f/6izfwtsBf X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) This is a multi-part message in MIME format. --------------6DE364D3C2DE4D117BCC76A2 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit On 14.12.2016 05:04, npostavs@users.sourceforge.net wrote: > npostavs@users.sourceforge.net writes: >> >> I have tracked the issue down to scan_sexps_forward in syntax.c > Applying this change which reverts part of [1] seems to fix the issue: > > > > Alan, can you explain what the idea behind that change was? > > I think it might correspond to this part of the commit message: > > Reformulate code at the top of the main loop correctly to > recognize comment openers when starting in the middle of one. > > [1]: 9dcf5998935c Sun Mar 20 13:19:48 2016 +0000 > "Amend parse-partial-sexp correctly to handle two character comment delimiters" Thanks a lot! BTW that message puzzles me too, AFAIK comments in C,C++ can't be nested. --------------6DE364D3C2DE4D117BCC76A2 Content-Type: text/html; charset=windows-1252 Content-Transfer-Encoding: 7bit



On 14.12.2016 05:04, npostavs@users.sourceforge.net wrote:
npostavs@users.sourceforge.net writes:

I have tracked the issue down to scan_sexps_forward in syntax.c
Applying this change which reverts part of [1] seems to fix the issue:



Alan, can you explain what the idea behind that change was?

I think it might correspond to this part of the commit message:

    Reformulate code at the top of the main loop correctly to
    recognize comment openers when starting in the middle of one.

[1]: 9dcf5998935c Sun Mar 20 13:19:48 2016 +0000
"Amend parse-partial-sexp correctly to handle two character comment delimiters"

Thanks a lot! BTW that message puzzles me too, AFAIK comments in C,C++ can't be nested.
--------------6DE364D3C2DE4D117BCC76A2-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2016 19:57:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148174540732753 (code B ref 24870); Wed, 14 Dec 2016 19:57:02 +0000 Received: (at 24870) by debbugs.gnu.org; 14 Dec 2016 19:56:47 +0000 Received: from localhost ([127.0.0.1]:42136 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHFfT-0008WD-6m for submit@debbugs.gnu.org; Wed, 14 Dec 2016 14:56:47 -0500 Received: from ocolin.muc.de ([193.149.48.4]:44684 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cHFfR-0008W4-2O for 24870@debbugs.gnu.org; Wed, 14 Dec 2016 14:56:45 -0500 Received: (qmail 53541 invoked by uid 3782); 14 Dec 2016 19:56:43 -0000 Received: from acm.muc.de (p548C778A.dip0.t-ipconnect.de [84.140.119.138]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 14 Dec 2016 20:56:42 +0100 Received: (qmail 3995 invoked by uid 1000); 14 Dec 2016 19:56:23 -0000 Date: Wed, 14 Dec 2016 19:56:23 +0000 Message-ID: <20161214195623.GA3881@acm.fritz.box> References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87eg1bcg0y.fsf@users.sourceforge.net> User-Agent: Mutt/1.5.24 (2015-08-30) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.1 (---) Hello, Noam. On Tue, Dec 13, 2016 at 11:04:45PM -0500, npostavs@users.sourceforge.net wrote: > npostavs@users.sourceforge.net writes: > > I have tracked the issue down to scan_sexps_forward in syntax.c > Applying this change which reverts part of [1] seems to fix the issue: > --- i/src/syntax.c > +++ w/src/syntax.c > @@ -3192,7 +3192,11 @@ scan_sexps_forward (struct lisp_parse_state *state, > while (from < end) > { > - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) > + INC_FROM; > + code = prev_from_syntax & 0xff; > + > + if (from < end > + && SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) > && (c1 = FETCH_CHAR (from_byte), > syntax = SYNTAX_WITH_FLAGS (c1), > SYNTAX_FLAGS_COMSTART_SECOND (syntax))) > @@ -3213,8 +3217,6 @@ scan_sexps_forward (struct lisp_parse_state *state, > } > else > { > - INC_FROM; > - code = prev_from_syntax & 0xff; > if (code == Scomment_fence) > { > /* Record the comment style we have entered so that only > Alan, can you explain what the idea behind that change was? We're talking about 9dcf5998935c8aaa846d7585b81f0dcfe1935b3d from Sun Mar 20 13:19:48 2016 +0000, still? The idea is that in a (parse-partial-sexp from to), the end position might be in the middle of a two character comment marker, such as "/*". Before this change, it was impossible successfully to use the result of that operation as the old state for continuing parse-partial-sexp from that position, since it did not contain enough info to see it was in a comment after passing the "*" The change 9dcf599 added an extra element onto the parse state which was non-nil when we end up after a "/", etc. > I think it might correspond to this part of the commit message: > Reformulate code at the top of the main loop correctly to > recognize comment openers when starting in the middle of one. > [1]: 9dcf5998935c Sun Mar 20 13:19:48 2016 +0000 > "Amend parse-partial-sexp correctly to handle two character comment delimiters" With the above in mind, I think we should both check your proposed patch to make sure it doesn't break the working of 9dcf599. Thanks for Cc'ing me in on this. -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2016 21:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148175273711245 (code B ref 24870); Wed, 14 Dec 2016 21:59:02 +0000 Received: (at 24870) by debbugs.gnu.org; 14 Dec 2016 21:58:57 +0000 Received: from localhost ([127.0.0.1]:42149 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHHZh-0002vJ-JB for submit@debbugs.gnu.org; Wed, 14 Dec 2016 16:58:57 -0500 Received: from ocolin.muc.de ([193.149.48.4]:49720 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cHHZf-0002vA-Q7 for 24870@debbugs.gnu.org; Wed, 14 Dec 2016 16:58:56 -0500 Received: (qmail 79997 invoked by uid 3782); 14 Dec 2016 21:58:54 -0000 Received: from acm.muc.de (p548C778A.dip0.t-ipconnect.de [84.140.119.138]) by colin.muc.de (tmda-ofmipd) with ESMTP; Wed, 14 Dec 2016 22:58:53 +0100 Received: (qmail 19286 invoked by uid 1000); 14 Dec 2016 21:58:34 -0000 Date: Wed, 14 Dec 2016 21:58:34 +0000 Message-ID: <20161214215834.GB3881@acm.fritz.box> References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87eg1bcg0y.fsf@users.sourceforge.net> User-Agent: Mutt/1.5.24 (2015-08-30) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.1 (---) Hello again, Noam. On Tue, Dec 13, 2016 at 11:04:45PM -0500, npostavs@users.sourceforge.net wrote: > npostavs@users.sourceforge.net writes: > > I have tracked the issue down to scan_sexps_forward in syntax.c > Applying this change which reverts part of [1] seems to fix the issue: > --- i/src/syntax.c > +++ w/src/syntax.c > @@ -3192,7 +3192,11 @@ scan_sexps_forward (struct lisp_parse_state *state, > while (from < end) > { > - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) > + INC_FROM; > + code = prev_from_syntax & 0xff; > + > + if (from < end > + && SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) > && (c1 = FETCH_CHAR (from_byte), > syntax = SYNTAX_WITH_FLAGS (c1), > SYNTAX_FLAGS_COMSTART_SECOND (syntax))) > @@ -3213,8 +3217,6 @@ scan_sexps_forward (struct lisp_parse_state *state, > } > else > { > - INC_FROM; > - code = prev_from_syntax & 0xff; > if (code == Scomment_fence) > { > /* Record the comment style we have entered so that only Alas, that patch won't do. The very first thing that must be done in the loop is to check for a two-character comment delimiter, of which the first character might have been recorded in OLDSTATE element 9 rather than having been scanned by scan_sexps_forward on the previous loop iteration. My analysis of what's happening in the bug recipe you posted one or two posts previously, here in scan_sexps_forward is as follows. (In that recipe, "{-C-}\nX" was parse-partial-sexp'd over, and the syntax table had been set to recognise "{-" and "-}" as matching comment delimiters.) (i) On the first iteration of the main loop, the "{" is read. It is recognised as an opening paren, and causes the "current paren depth" to be incremented. (ii) On the second iteration of the loop, the "-" is read. The function now recognises the two-character comment opener, and proceeds to read the innards of the comment together with its closing delimiter (the "-}"). (iii) On the third and fourth iterations, the function reads "\n" and "X". It then terminates, having reached point-max. (iv) The paren depth counter remains at 1. What is new here is characters with paren syntax also being components of 2-char comment delimiters. I recently fixed a similar problem when characters with word syntax were also flagged as 2-char comment delimiter parts. I think a similar patch at case label Sopen: (Line ~3322), which would peek ahead at the next character to check for "{-" before recognising the "{" as an open paren would be the best fix. Do you want to make this fix, or should I do it? If you want to do it, I'm willing (indeed, eager) to review it for you. [ .... ] -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 08:09:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie , npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.14817893405048 (code B ref 24870); Thu, 15 Dec 2016 08:09:02 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 08:09:00 +0000 Received: from localhost ([127.0.0.1]:42374 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHR64-0001JL-IE for submit@debbugs.gnu.org; Thu, 15 Dec 2016 03:09:00 -0500 Received: from mout.kundenserver.de ([212.227.17.13]:55811) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHR62-0001J6-SK for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 03:08:59 -0500 Received: from [192.168.178.35] ([77.12.54.84]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.183]) with ESMTPSA (Nemesis) id 0LfikE-1cwrSm2Sgk-00pKiN; Thu, 15 Dec 2016 09:08:38 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214195623.GA3881@acm.fritz.box> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: Date: Thu, 15 Dec 2016 09:18:01 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.5.1 MIME-Version: 1.0 In-Reply-To: <20161214195623.GA3881@acm.fritz.box> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:K9QSK8nbXShzFuXudviJiopgxY84eV2eRGu52z4UpsDjKzRMLEc 8EEyJbh9lP/yeu1f/+xxrMWI6r8EwfsD0tQ1ZnWKDQVYZqKUXWAPIF/vjKtIWua5hElpUw/ rIK2Hys0jpyVayl714Xz1IY8yusxgcSmrl+HnQBzmM+hRAi5K6xax7ZCYv7dzqQKJ/z82a8 dqfPZPbVB9psCDN+6OYaQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:/YBaD7GH78k=:a0vgFzqu5Q8GDW7QgFO5xj MnjMOtvmQN3CdNr+ZFfrAVb+/WGupz8VnxOOxllreaoyVzP8jWjfMk1uagNJL6DM7wU8C9oAc H1Ir+eo7wUxFrz61j2zQQfx6TuKPTumGi+RwV1uqrKkZJiWBRSYvVleK59WcieAI31lleP5Mh W5a7vej4ji6TErIL0JasijxWY0XAuZakaamIiDs0+YMJuXYct52y7VkJ64U8fmoni7SZ+lOcv kexuo8+fTcUGSYBMeikE/lHqNXZPgPGT+IEnDM5D07Qk09gKQvk6FT5FybmfyHJX6GOhwOU9n A8hzu3oTSXGffRcRHPdM8+x6pBtv6ZcsCAZTvVYJ/lIvfudTAC4BKNMCy3Hzwxbu3qn0dTY+5 tgX7vJN8tHaH2zA5+hrwe9VwJeGy2bblvAmj881MNs5J1le8e28UfkDs8D0PGtVt+a9sziPzj 4Md+uys6PCmSzU0lSkEIvUrjZwm+B2U1gg0iSuc0nkcE3+dc8HJZx1JGdtEjA3qjw+z8e++rH 5rw0/Y2ucRGWGe2Aci60opoybOzK6j6MF8h9Mw1Mi9xhSKcVKUlzHCuQAX0mbRlTBKY7Bm7qP O+OS4wapGJY3C8jczXfLCeyv8GdQUTWmD6SHfL2x1+e6LVFPtNrGvcZigHMCl5iW6mXxxCcWv 8mJdGuKhQh0Ie/BvxlAPO5xWtSIGlTM5Pq86ABIp6KrswBKB627oe2MPv064Mnb+CmuylkUBc dSAZ6fwaOiGTmdkQ X-Spam-Score: -0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) On 14.12.2016 20:56, Alan Mackenzie wrote: > > We're talking about 9dcf5998935c8aaa846d7585b81f0dcfe1935b3d from Sun > Mar 20 13:19:48 2016 +0000, still? > > The idea is that in a (parse-partial-sexp from to), the end position > might be in the middle of a two character comment marker, such as "/*". > Before this change, it was impossible successfully to use the result of > that operation as the old state for continuing parse-partial-sexp from > that position, since it did not contain enough info to see it was in a > comment after passing the "*" > > The change 9dcf599 added an extra element onto the parse state which was > non-nil when we end up after a "/", etc. > > Hi Alan, sounds like a classical mistake for me. You commented lately on the effect of narrowing and how simply to respect its results. Nothing further to say here. OTOH: do you have a use-case, a bug, which propelled the amendment? Thanks, Andreas From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 16:03:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org, acm@muc.de, marmstrong@google.com, npostavs@users.sourceforge.net Reply-To: Eli Zaretskii Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148181776225204 (code B ref 24870); Thu, 15 Dec 2016 16:03:02 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 16:02:42 +0000 Received: from localhost ([127.0.0.1]:43061 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHYUU-0006YR-6M for submit@debbugs.gnu.org; Thu, 15 Dec 2016 11:02:42 -0500 Received: from eggs.gnu.org ([208.118.235.92]:33706) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHYUS-0006YF-El for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 11:02:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cHYUM-0006lt-Fk for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 11:02:35 -0500 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-2.3 required=5.0 tests=BAYES_50,RP_MATCHES_RCVD autolearn=disabled version=3.3.2 Received: from fencepost.gnu.org ([2001:4830:134:3::e]:53280) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cHYUD-0006fu-Q4; Thu, 15 Dec 2016 11:02:25 -0500 Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:1520 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1cHYUC-0000mp-4H; Thu, 15 Dec 2016 11:02:25 -0500 Date: Thu, 15 Dec 2016 18:01:40 +0200 Message-Id: <83d1gt9o63.fsf@gnu.org> From: Eli Zaretskii In-reply-to: (message from Andreas =?UTF-8?Q?R=C3=B6hler?= on Thu, 15 Dec 2016 09:18:01 +0100) References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214195623.GA3881@acm.fritz.box> MIME-version: 1.0 Content-type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 8bit X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2001:4830:134:3::e X-Spam-Score: -8.1 (--------) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -8.1 (--------) > From: Andreas Röhler > Date: Thu, 15 Dec 2016 09:18:01 +0100 > Cc: 24870@debbugs.gnu.org, Matt Armstrong > > Hi Alan, > > sounds like a classical mistake for me. Most people here don't make "classical mistakes", so it's best to assume none of them do, and never say such things aloud. Just a $0.02-worth advice. From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Noam Postavsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 16:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148181962728212 (code B ref 24870); Thu, 15 Dec 2016 16:34:02 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 16:33:47 +0000 Received: from localhost ([127.0.0.1]:43106 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHYyZ-0007Ky-32 for submit@debbugs.gnu.org; Thu, 15 Dec 2016 11:33:47 -0500 Received: from mail-oi0-f65.google.com ([209.85.218.65]:33405) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHYyU-0007Kh-O6 for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 11:33:44 -0500 Received: by mail-oi0-f65.google.com with SMTP id f201so6764578oib.0 for <24870@debbugs.gnu.org>; Thu, 15 Dec 2016 08:33:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=3rxVF/dKh6Og3z+j+3Q1WnV54CtJ9XLAKmk5/i3IFlc=; b=XoWZb6nJe0taFbSzl3fTUCcY6flPY/2B+wo+7c7Qdf8xl+T7ppmQBS5hThR7DHM4wL 1c+mI4sK02JFX/BpUHz6B8echDT5KLQgV4Hyoa+/S4T0EVoe6QT1TuHUVR7pdaLbUaBW U6t+rjtebtJfgJbJ/oLCTiSjkNxirDc7+CGDgGTroK2jCnOO9kFToLBGyD2hmklPT5qO brZSKElY4vkJFWqGBRqLRVy+LP3iOmCUbKSwgmgrv/d39oY0U8MSwsD+3RckT2bnKSyQ CPBDHhubjJcFYuMaXUyuq0Z95sJKWLwmNAyjnk0RC5nRHkSXdFiR7AhWqgYt+ysSzdt5 h9Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:sender:in-reply-to:references:from :date:message-id:subject:to:cc; bh=3rxVF/dKh6Og3z+j+3Q1WnV54CtJ9XLAKmk5/i3IFlc=; b=rBe397x7vfoUbDJuivzQ/DywQQaSvOYy3quPnPRaoPKVuAOIfetKCb77k1YmiXcSa5 h45k6I7o/LKNPYfFEt1534/xJpBOyvpQxeQUVrVQTMSL9A71w+fiAiq77bvv/fsuuat4 94qgUIjC1dYfAxHBC42F8Iu3akx39LCgcvNjc8LfyouifjzqWpPDlhZhNvm0bGblnMyp HBAmIv36gIhrSjm1D1ICDycFWEAZ/+Q4smNKYkUX9cE79V4GF+exx5x8SM407OtKxVJ0 cN7B/9pkQegdiCta15PcpXV0V+C4i61EfBa+BEGAXwVjIMxNurAlO98fVOYmfnU7us2/ t3YQ== X-Gm-Message-State: AKaTC01cdLrYMn09HeO/fZ9eBsW3TZfulkKb2L8ILTEl3ua4ZcAPUJVLi5zqXBb8LRYuyTsI7hXyEA9B2eFNZg== X-Received: by 10.157.53.50 with SMTP id o47mr1676387otc.19.1481819617095; Thu, 15 Dec 2016 08:33:37 -0800 (PST) MIME-Version: 1.0 Received: by 10.157.6.234 with HTTP; Thu, 15 Dec 2016 08:33:36 -0800 (PST) In-Reply-To: <20161214215834.GB3881@acm.fritz.box> References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> From: Noam Postavsky Date: Thu, 15 Dec 2016 11:33:36 -0500 X-Google-Sender-Auth: 3OXBLvef7jfIJKtyo0w_C4XLSA8 Message-ID: Content-Type: text/plain; charset=UTF-8 X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) On Wed, Dec 14, 2016 at 4:58 PM, Alan Mackenzie wrote: > > Alas, that patch won't do. I thought that might be the case. > > What is new here is characters with paren syntax also being components of > 2-char comment delimiters. I recently fixed a similar problem when > characters with word syntax were also flagged as 2-char comment delimiter > parts. I think a similar patch at case label Sopen: (Line ~3322), which > would peek ahead at the next character to check for "{-" before > recognising the "{" as an open paren would be the best fix. I don't think special casing Sopen makes sense, shouldn't the check apply to all syntax classes? (the special case for word syntax does make sense, because it has its own inner loop already) > > Do you want to make this fix, or should I do it? If you want to do it, > I'm willing (indeed, eager) to review it for you. I'll have a patch ready in a day or two. From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 16:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Noam Postavsky Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148182032330774 (code B ref 24870); Thu, 15 Dec 2016 16:46:02 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 16:45:23 +0000 Received: from localhost ([127.0.0.1]:43141 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHZ9m-000809-Pj for submit@debbugs.gnu.org; Thu, 15 Dec 2016 11:45:23 -0500 Received: from ocolin.muc.de ([193.149.48.4]:62788 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cHZ9l-0007xE-9l for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 11:45:21 -0500 Received: (qmail 59615 invoked by uid 3782); 15 Dec 2016 16:45:20 -0000 Received: from acm.muc.de (p548C78B0.dip0.t-ipconnect.de [84.140.120.176]) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 15 Dec 2016 17:45:19 +0100 Received: (qmail 3068 invoked by uid 1000); 15 Dec 2016 16:44:58 -0000 Date: Thu, 15 Dec 2016 16:44:58 +0000 Message-ID: <20161215164458.GA2437@acm.fritz.box> References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.1 (---) Hello, Noam. On Thu, Dec 15, 2016 at 11:33:36AM -0500, Noam Postavsky wrote: > On Wed, Dec 14, 2016 at 4:58 PM, Alan Mackenzie wrote: > > Alas, that patch won't do. > I thought that might be the case. > > What is new here is characters with paren syntax also being components of > > 2-char comment delimiters. I recently fixed a similar problem when > > characters with word syntax were also flagged as 2-char comment delimiter > > parts. I think a similar patch at case label Sopen: (Line ~3322), which > > would peek ahead at the next character to check for "{-" before > > recognising the "{" as an open paren would be the best fix. > I don't think special casing Sopen makes sense, shouldn't the check > apply to all syntax classes? Maybe. I'm too tired to work this out at the moment (it was the office Glühwein day). > (the special case for word syntax does make sense, because it has its > own inner loop already) As does comment syntax, of course. > > Do you want to make this fix, or should I do it? If you want to do it, > > I'm willing (indeed, eager) to review it for you. > I'll have a patch ready in a day or two. Excellent! Or even in three or four days. Take your time, do it well (at least, better than I managed last time round) and enjoy doing it. -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 16:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Andreas =?UTF-8?Q?R=C3=B6hler?= Cc: 24870@debbugs.gnu.org, Matt Armstrong , npostavs@users.sourceforge.net Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.14818206354127 (code B ref 24870); Thu, 15 Dec 2016 16:51:02 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 16:50:35 +0000 Received: from localhost ([127.0.0.1]:43149 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHZEp-00014V-0D for submit@debbugs.gnu.org; Thu, 15 Dec 2016 11:50:35 -0500 Received: from ocolin.muc.de ([193.149.48.4]:62566 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cHZEn-00014N-D7 for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 11:50:34 -0500 Received: (qmail 60676 invoked by uid 3782); 15 Dec 2016 16:50:32 -0000 Received: from acm.muc.de (p548C78B0.dip0.t-ipconnect.de [84.140.120.176]) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 15 Dec 2016 17:50:31 +0100 Received: (qmail 3107 invoked by uid 1000); 15 Dec 2016 16:50:11 -0000 Date: Thu, 15 Dec 2016 16:50:11 +0000 Message-ID: <20161215165011.GB2437@acm.fritz.box> References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214195623.GA3881@acm.fritz.box> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.1 (---) Hello, Andreas. On Thu, Dec 15, 2016 at 09:18:01AM +0100, Andreas Röhler wrote: > On 14.12.2016 20:56, Alan Mackenzie wrote: > > We're talking about 9dcf5998935c8aaa846d7585b81f0dcfe1935b3d from Sun > > Mar 20 13:19:48 2016 +0000, still? > > The idea is that in a (parse-partial-sexp from to), the end position > > might be in the middle of a two character comment marker, such as "/*". > > Before this change, it was impossible successfully to use the result of > > that operation as the old state for continuing parse-partial-sexp from > > that position, since it did not contain enough info to see it was in a > > comment after passing the "*" > > The change 9dcf599 added an extra element onto the parse state which was > > non-nil when we end up after a "/", etc. > Hi Alan, > sounds like a classical mistake for me. Quite possibly. > You commented lately on the effect of narrowing and how simply to > respect its results. Nothing further to say here. I don't see what your meaning is here, but never mind. > OTOH: do you have a use-case, a bug, which propelled the amendment? Yes. It was quite a few years ago, but a bug in CC Mode was caused by parse-partial-sexp terminating at a critical place, and the next invocation of parse-partial-sexp thus going wrong. I programmed round it awkwardly at the time. Also syntax-ppss would be falling into the trap quite a lot, I think. I don't think it checked specially for the critical case. Now it doesn't have to bother - at least, it won't as soon as Noam has corrected the current bug. ;-) > Thanks, > Andreas -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Andreas =?UTF-8?Q?R=C3=B6hler?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 15 Dec 2016 17:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Matt Armstrong , npostavs@users.sourceforge.net Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.14818242399734 (code B ref 24870); Thu, 15 Dec 2016 17:51:01 +0000 Received: (at 24870) by debbugs.gnu.org; 15 Dec 2016 17:50:39 +0000 Received: from localhost ([127.0.0.1]:43200 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHaAx-0002Ww-BW for submit@debbugs.gnu.org; Thu, 15 Dec 2016 12:50:39 -0500 Received: from mout.kundenserver.de ([212.227.126.135]:52651) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cHaAv-0002Wi-I3 for 24870@debbugs.gnu.org; Thu, 15 Dec 2016 12:50:38 -0500 Received: from [192.168.178.35] ([77.12.54.84]) by mrelayeu.kundenserver.de (mreue004 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MdZRA-1bynlE1JwC-00PNU3; Thu, 15 Dec 2016 18:50:16 +0100 References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214195623.GA3881@acm.fritz.box> <20161215165011.GB2437@acm.fritz.box> From: Andreas =?UTF-8?Q?R=C3=B6hler?= Message-ID: Date: Thu, 15 Dec 2016 18:59:39 +0100 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Icedove/45.5.1 MIME-Version: 1.0 In-Reply-To: <20161215165011.GB2437@acm.fritz.box> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:+9k7AQeICqTutXmd3aqBdeeU7JQ3ITJA3zeysD3IAjucTib/q7y zYu3VYa4g0IN33lx1EfXRdNBso7Ig4LZstikiPYL5NNV4BvoQVPwI2QVJwk6a7rwKLeAjKh +VJaUdCmn0nTAhkRwdCW+y3KyvGL0pFT//L2TB41vRGLG2OvHkDuXp1K6PTZFu0mB9EjqJw d6URpro6ZyI6//b6De8bA== X-UI-Out-Filterresults: notjunk:1;V01:K0:+/EA2ZfsHUU=:a2pJgZPZkW1jJCmbAal3AA Ffsvfm5vRXe7XL1QFGWnhbKG56YwwWHxjKdg1dol+MSQeUti1gyMy/5x1yVbQDVtqilx7Vj1T 8Uq/hxNj8o+JOWlsABHWL7BfkRQnht9ZCbYWCkL1D5mfqM89np4lQHSDH/dPPXBF0rIV9nEa/ wCx9ngr0w4pYpyAya3hMjDOrAWCCKhVs68VcMgcf9TGpBSzk5sHAxgUjvjQ3YZwK44pjq9P1Z ZyE287SfrBUYt98oZtp6qwkRylQTOAr0aLnX+evtf5MMzgjVFL81ZZOBN88mQeh/agy2DQgEZ V10+Y7zZ1KKABgAvN3bhXWybFRwbZtf5jzZ1a3l2lm64cYrv6vivP6uAh2XZo+dPCO72FYgrD BSIycxMzTNZQ7e/XX8QkBWY55FFFW8aRFyRKvF4a/BuvKX0qJOaOZYGmu5Wx/u6I1cPlte6iE MxbfwN43NHy9wLQUo/QLi5OoVXJ2rPgcefF2KdokJi5YLETcZZpo82lVL6dK2R/PaFiNBHhff TTQmp4m9O1OmvoYn1VzOjzNHyievokBHjFukF9nTG8eeKmPT8T7VZgSY6GJQ6ZKE7F46a0/AR 5ElzEKvFVMx/Y36iX+LcKdqdepwvN5380o0OZ4JeuwoiEk2eYhdSoS1BHSbj/Ltom9a5Fa/W7 E+PwsdCG/+BL0enOIfxkFc/JgzWJZ7BFDBbkBia2lXyeqEBveFcuFcsPLeL6QoFlT+EqXScqA ovvzuqsVqUxcGt5R X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) On 15.12.2016 17:50, Alan Mackenzie wrote: > You commented lately on the effect of narrowing and how simply to >> respect its results. Nothing further to say here. > I don't see what your meaning is here, but never mind. Referred to your post at emacs-devel 11.12.2016 11:17: At the moment, narrowing is a strong, direct, simple facility - it does what it says it does and no more. From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 18 Dec 2016 05:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148203949722327 (code B ref 24870); Sun, 18 Dec 2016 05:39:02 +0000 Received: (at 24870) by debbugs.gnu.org; 18 Dec 2016 05:38:17 +0000 Received: from localhost ([127.0.0.1]:45367 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cIUAq-0005o2-NN for submit@debbugs.gnu.org; Sun, 18 Dec 2016 00:38:17 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:35393) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cIUAp-0005np-4U for 24870@debbugs.gnu.org; Sun, 18 Dec 2016 00:38:15 -0500 Received: by mail-io0-f195.google.com with SMTP id f73so16007377ioe.2 for <24870@debbugs.gnu.org>; Sat, 17 Dec 2016 21:38:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=URMLQdGztOSvm8AqJ++V03UPQLDTgfLmIaJ8ngPX5zo=; b=hvrXviYaSSFZqGU7rPpY329QIFkhmqF91236FlgupFge2Q9YAs554oU3i0v2guZGcw qUZR5Wrl9JPZdGJr9okCNVmcsTgQCz2ma17Es07ZyjA/EMSn/tVm1PSmVLjkLo+NUST9 /2x/jIhzMd9b6BJ8KEhQuDPmnrBDoCaOd0OLdjHjxWY3D6otX7DnrbJmBs4m52/7Ys61 HVhJRsSYtZkpZGvamSqSxUP4eTYh5vw6ve/Pbj2Zchs7tAYZR/gD7Vb2ygPsdj/hdTzy HcUg/6xZfJnbRdEioCtzs3NkqMW2/+T9rZswizZaLMc070SOGnj4scBIzqfGuz4ibfTe o7Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=URMLQdGztOSvm8AqJ++V03UPQLDTgfLmIaJ8ngPX5zo=; b=nqH/8+teMTaArilweimFBYkysTbdW7NiQfIHPstbBH3C88Ldu6FX7HjSEV6nhYzzOj HtPbFsjzibhrefoafxXsQa/v7x2ueH7/HkXxtY91o1R64Ge4aLOMa08h87/uiYH1HLhz ZEjeTJjkLoHCykN0rt9y4b/C60olp833JujNykOTxmpIEvspKZWw0yid5lRQSNxMiGV4 887Fz3o8Q9nqByDtuMfPV+X4bSfj/RaJombEp4lN0PJzRRsCpbPfBqZlGw1PSFEJLYN7 8l/37YDzovcnmM7WOtlzeAWhJJG816RyzRl9ZlFxJCAsWSCzEVg9a7n31BwPe0JyChlH XWfg== X-Gm-Message-State: AIkVDXLqDQt3Hiu4uQgHxjwzw0ehescYDKKOzIL4v54ymOvy31VB7Nx2QYBUObFhGXueAA== X-Received: by 10.107.134.83 with SMTP id i80mr11607390iod.151.1482039488818; Sat, 17 Dec 2016 21:38:08 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 9sm5589253itv.0.2016.12.17.21.38.07 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 17 Dec 2016 21:38:07 -0800 (PST) From: npostavs@users.sourceforge.net References: <7cb86247-1e30-f029-0b9b-c53cc096ec4b@easy-emacs.de> <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> Date: Sun, 18 Dec 2016 00:39:11 -0500 In-Reply-To: <20161215164458.GA2437@acm.fritz.box> (Alan Mackenzie's message of "Thu, 15 Dec 2016 16:44:58 +0000") Message-ID: <8737hldce8.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Alan Mackenzie writes: > Hello, Noam. > > On Thu, Dec 15, 2016 at 11:33:36AM -0500, Noam Postavsky wrote: >> On Wed, Dec 14, 2016 at 4:58 PM, Alan Mackenzie wrote: > >> > What is new here is characters with paren syntax also being components= of >> > 2-char comment delimiters. I recently fixed a similar problem when >> > characters with word syntax were also flagged as 2-char comment delimi= ter >> > parts. I think a similar patch at case label Sopen: (Line ~3322), whi= ch >> > would peek ahead at the next character to check for "{-" before >> > recognising the "{" as an open paren would be the best fix. > >> I don't think special casing Sopen makes sense, shouldn't the check >> apply to all syntax classes? > > Maybe. I'm too tired to work this out at the moment (it was the office > Gl=C3=BChwein day). > >> (the special case for word syntax does make sense, because it has its >> own inner loop already) > > As does comment syntax, of course. > >> > Do you want to make this fix, or should I do it? If you want to do it, >> > I'm willing (indeed, eager) to review it for you. > >> I'll have a patch ready in a day or two. > > Excellent! Or even in three or four days. Take your time, do it well > (at least, better than I managed last time round) and enjoy doing it. Okay, here it is. I think I've made this function a bit less twisty, and hopefully haven't broken anything new (make check is still passing). --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=v1-0001-Fix-comment-detection-on-open-parens.patch Content-Description: patch >From e3bc1d563a251ede1cb7649b97523161eb352694 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sun, 18 Dec 2016 00:00:30 -0500 Subject: [PATCH v1] Fix comment detection on open parens Characters having both open paren syntax and comment start syntax were being detected as open parens even when they should have been part a comment starter (Bug#24870). * src/syntax.c (check_comment_start): New function, extracted from `scan_sexps_forward'. (scan_sexps_forward): Add check for a 2-char comment starter before the loop. Inside the loop, do that check after incrementing the 'from' character index. Move the single char comment syntax cases into the switch isntead of special casing them before. * test/src/syntax-tests.el (parse-partial-sexp-paren-comments): (parse-partial-sexp-continue-over-comment-marker): New tests. --- src/syntax.c | 114 ++++++++++++++++++++++++----------------------- test/src/syntax-tests.el | 83 ++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+), 55 deletions(-) create mode 100644 test/src/syntax-tests.el diff --git a/src/syntax.c b/src/syntax.c index 338dd85..df28c91 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -3094,6 +3094,33 @@ DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars, return Qnil; } + +static bool +check_comment_start (struct lisp_parse_state *state, + int prev_from_syntax, + ptrdiff_t prev_from, + ptrdiff_t from_byte) +{ + int c1, syntax; + if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) + && (c1 = FETCH_CHAR_AS_MULTIBYTE (from_byte), + syntax = SYNTAX_WITH_FLAGS (c1), + SYNTAX_FLAGS_COMSTART_SECOND (syntax))) + { + /* Record the comment style we have entered so that only + the comment-end sequence of the same style actually + terminates the comment section. */ + state->comstyle + = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); + bool comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) + | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); + state->incomment = comnested ? 1 : -1; + state->comstr_start = prev_from; + return true; + } + return false; +} + /* Parse forward from FROM / FROM_BYTE to END, assuming that FROM has state STATE, and return a description of the state of the parse at END. @@ -3109,8 +3136,6 @@ scan_sexps_forward (struct lisp_parse_state *state, int commentstop) { enum syntaxcode code; - int c1; - bool comnested; struct level { ptrdiff_t last, prev; }; struct level levelstart[100]; struct level *curlevel = levelstart; @@ -3124,7 +3149,6 @@ scan_sexps_forward (struct lisp_parse_state *state, ptrdiff_t prev_from; /* Keep one character before FROM. */ ptrdiff_t prev_from_byte; int prev_from_syntax, prev_prev_from_syntax; - int syntax; bool boundary_stop = commentstop == -1; bool nofence; bool found; @@ -3189,53 +3213,31 @@ scan_sexps_forward (struct lisp_parse_state *state, } else if (start_quoted) goto startquoted; + else if ((from < end) + && (check_comment_start (state, prev_from_syntax, + prev_from, from_byte))) + { + INC_FROM; + prev_from_syntax = Smax; /* the syntax has already been "used up". */ + goto atcomment; + } while (from < end) { - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) - && (c1 = FETCH_CHAR (from_byte), - syntax = SYNTAX_WITH_FLAGS (c1), - SYNTAX_FLAGS_COMSTART_SECOND (syntax))) - { - /* Record the comment style we have entered so that only - the comment-end sequence of the same style actually - terminates the comment section. */ - state->comstyle - = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); - comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) - | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); - state->incomment = comnested ? 1 : -1; - state->comstr_start = prev_from; - INC_FROM; - prev_from_syntax = Smax; /* the syntax has already been - "used up". */ - code = Scomment; - } - else + INC_FROM; + + if ((from < end) + && (check_comment_start (state, prev_from_syntax, + prev_from, from_byte))) { INC_FROM; - code = prev_from_syntax & 0xff; - if (code == Scomment_fence) - { - /* Record the comment style we have entered so that only - the comment-end sequence of the same style actually - terminates the comment section. */ - state->comstyle = ST_COMMENT_STYLE; - state->incomment = -1; - state->comstr_start = prev_from; - code = Scomment; - } - else if (code == Scomment) - { - state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0); - state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ? - 1 : -1); - state->comstr_start = prev_from; - } + prev_from_syntax = Smax; /* the syntax has already been "used up". */ + goto atcomment; } if (SYNTAX_FLAGS_PREFIX (prev_from_syntax)) continue; + code = prev_from_syntax & 0xff; switch (code) { case Sescape: @@ -3254,24 +3256,15 @@ scan_sexps_forward (struct lisp_parse_state *state, symstarted: while (from < end) { - int symchar = FETCH_CHAR_AS_MULTIBYTE (from_byte); - - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) - && (syntax = SYNTAX_WITH_FLAGS (symchar), - SYNTAX_FLAGS_COMSTART_SECOND (syntax))) + if (check_comment_start (state, prev_from_syntax, + prev_from, from_byte)) { - state->comstyle - = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); - comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) - | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); - state->incomment = comnested ? 1 : -1; - state->comstr_start = prev_from; INC_FROM; - prev_from_syntax = Smax; - code = Scomment; + prev_from_syntax = Smax; /* the syntax has already been "used up". */ goto atcomment; } + int symchar = FETCH_CHAR_AS_MULTIBYTE (from_byte); switch (SYNTAX (symchar)) { case Scharquote: @@ -3292,8 +3285,19 @@ scan_sexps_forward (struct lisp_parse_state *state, curlevel->prev = curlevel->last; break; - case Scomment_fence: /* Can't happen because it's handled above. */ + case Scomment_fence: + /* Record the comment style we have entered so that only + the comment-end sequence of the same style actually + terminates the comment section. */ + state->comstyle = ST_COMMENT_STYLE; + state->incomment = -1; + state->comstr_start = prev_from; + goto atcomment; case Scomment: + state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0); + state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ? + 1 : -1); + state->comstr_start = prev_from; atcomment: if (commentstop || boundary_stop) goto done; startincomment: diff --git a/test/src/syntax-tests.el b/test/src/syntax-tests.el new file mode 100644 index 0000000..eac88e8 --- /dev/null +++ b/test/src/syntax-tests.el @@ -0,0 +1,83 @@ +;;; syntax-tests.el --- tests for syntax.c functions -*- lexical-binding: t -*- + +;; Copyright (C) 2016 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: + +(require 'ert) + +(ert-deftest parse-partial-sexp-continue-over-comment-marker () + "Continue a parse that stopped in the middle of a comment marker." + (with-temp-buffer + (let ((table (make-syntax-table))) + (modify-syntax-entry ?/ ". 124") + (modify-syntax-entry ?* ". 23b") + (set-syntax-table table)) + (insert "/*C*/\nX") + (goto-char (point-min)) + (let* ((pointC (progn (search-forward "C") (1- (point)))) + (preC (1- pointC)) + (pointX (progn (search-forward "X") (1- (point)))) + (aftC (+ 2 pointC)) + (ppsC (parse-partial-sexp (point-min) pointC)) + (pps-preC (parse-partial-sexp (point-min) preC)) + (pps-aftC (parse-partial-sexp (point-min) aftC)) + (ppsX (parse-partial-sexp (point-min) pointX))) + ;; C should be inside comment. + (should (= (nth 0 ppsC) 0)) + (should (eq (nth 4 ppsC) t)) + (should (= (nth 8 ppsC) (- pointC 2))) + ;; X should not be in comment or list. + (should (= (nth 0 ppsX) 0)) + (should-not (nth 4 ppsX)) + ;; Try using OLDSTATE. + (should (equal (parse-partial-sexp preC pointC nil nil pps-preC) + ppsC)) + (should (equal (parse-partial-sexp pointC aftC nil nil ppsC) + pps-aftC)) + (should (equal (parse-partial-sexp preC aftC nil nil pps-preC) + pps-aftC))))) + +(ert-deftest parse-partial-sexp-paren-comments () + "Test syntax parsing with paren comment markers. +Specifically, where the first character of the comment marker is +also has open paren syntax (see Bug#24870)." + (with-temp-buffer + (let ((table (make-syntax-table))) + (modify-syntax-entry ?\{ "(}1nb" table) + (modify-syntax-entry ?\} "){4nb" table) + (modify-syntax-entry ?- ". 123" table) + (set-syntax-table table)) + (insert "{-C-}\nX") + (goto-char (point-min)) + (let* ((pointC (progn (search-forward "C") (1- (point)))) + (pointX (progn (search-forward "X") (1- (point)))) + (ppsC (parse-partial-sexp (point-min) pointC)) + (ppsX (parse-partial-sexp (point-min) pointX))) + ;; C should be inside nestable comment, not list. + (should (= (nth 0 ppsC) 0)) + (should (= (nth 4 ppsC) 1)) + (should (= (nth 8 ppsC) (- pointC 2))) + ;; X should not be in comment or list. + (should (= (nth 0 ppsX) 0)) + (should-not (nth 4 ppsX)) + ;; Try using OLDSTATE. + (should (equal (parse-partial-sexp pointC pointX nil nil ppsC) + ppsX))))) + +;;; syntax-tests.el ends here -- 2.9.3 --=-=-=-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 29 Dec 2016 11:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148301009219890 (code B ref 24870); Thu, 29 Dec 2016 11:15:02 +0000 Received: (at 24870) by debbugs.gnu.org; 29 Dec 2016 11:14:52 +0000 Received: from localhost ([127.0.0.1]:58588 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMYfc-0005Ak-Fx for submit@debbugs.gnu.org; Thu, 29 Dec 2016 06:14:52 -0500 Received: from ocolin.muc.de ([193.149.48.4]:14204 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cMYfb-0005Ab-1b for 24870@debbugs.gnu.org; Thu, 29 Dec 2016 06:14:51 -0500 Received: (qmail 16858 invoked by uid 3782); 29 Dec 2016 11:14:48 -0000 Received: from acm.muc.de (p548C6C46.dip0.t-ipconnect.de [84.140.108.70]) by colin.muc.de (tmda-ofmipd) with ESMTP; Thu, 29 Dec 2016 12:14:48 +0100 Received: (qmail 14157 invoked by uid 1000); 29 Dec 2016 11:14:28 -0000 Date: Thu, 29 Dec 2016 11:14:28 +0000 Message-ID: <20161229111428.GA12532@acm.fritz.box> References: <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> <8737hldce8.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8737hldce8.fsf@users.sourceforge.net> User-Agent: Mutt/1.5.24 (2015-08-30) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.1 (---) Hello, Noam. Sorry this has taken me more time than I anticipated; it's a busy time of the year. :-( On Sun, Dec 18, 2016 at 12:39:11AM -0500, npostavs@users.sourceforge.net wrote: > Alan Mackenzie writes: > > Hello, Noam. > > On Thu, Dec 15, 2016 at 11:33:36AM -0500, Noam Postavsky wrote: [ .... ] > >> > Do you want to make this fix, or should I do it? If you want to > >> > do it, I'm willing (indeed, eager) to review it for you. > >> I'll have a patch ready in a day or two. [ .... ] > Okay, here it is. I think I've made this function a bit less twisty, > and hopefully haven't broken anything new (make check is still passing). syntax.c looks good. It looks very good. I've just got one trivial comment: (i) The new function `check_comment_start' doesn't have a comment saying what its return value means. Possibly you could instead rename it so that the name implies what it returns. Maybe something like `in_double_comment_opener'. I'll admit I haven't actually tried out the code, mainly because you've written a test file. One comment about the test file: (ii) In `parse-partial-sexp-continue-over-comment-marker', variable aftC is the position in the middle of the comment closer "*/". I don't think you are testing in any way that element 10 (nil, or the syntax of the position just before the end point when that position might be the first character of a two-character construct, i.e. an escape or first char of a double-char comment delimiter) is correct. This element 10 was newly introduced this year. Would you please consider adding such a test to this new test file. Thanks! Otherwise, excellent! -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 30 Dec 2016 01:55:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148306286319626 (code B ref 24870); Fri, 30 Dec 2016 01:55:02 +0000 Received: (at 24870) by debbugs.gnu.org; 30 Dec 2016 01:54:23 +0000 Received: from localhost ([127.0.0.1]:59479 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMmOj-00056T-1P for submit@debbugs.gnu.org; Thu, 29 Dec 2016 20:54:22 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:33490) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cMmOg-00056C-0v for 24870@debbugs.gnu.org; Thu, 29 Dec 2016 20:54:19 -0500 Received: by mail-io0-f194.google.com with SMTP id j76so22801919ioe.0 for <24870@debbugs.gnu.org>; Thu, 29 Dec 2016 17:54:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:in-reply-to:references:user-agent:date :message-id:mime-version; bh=t9G2nUfHjXFE7MgHTu4+0L1dNH+z2/Vv1qAszOfHGdQ=; b=jUbZBXDMy+PN4+BkjIHOZSUlz51Brz+wX41kmMK9WBrqdIdYkXzmE1VZWb6hwCGMr5 A5U2e78ck/02Wic2ec07emrDPSm351L5i0xkyxh06Z6ddh771KNvYNIfLKwu873mKfrw ihTA90nZxuc8EcFtxBIaTWEqCWCg+nzAClqvaOx49ZesB8excY5lmHucu2vJcIRb8rb3 +dHUgrXptpphcYlGfd+ACWhleq81qnPLmetr4X4LZKGCbwYq6b0DIGWekg+GOHOnWZ4A pcWfdsVXqakVbWLMpoZCkaDsFyRobgvz9WvYyONZytC0yO78DvCKSeOve3JbRQi/vqiB cvFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:in-reply-to:references :user-agent:date:message-id:mime-version; bh=t9G2nUfHjXFE7MgHTu4+0L1dNH+z2/Vv1qAszOfHGdQ=; b=EkC4tLfMMj5M47K36ZEQ5kx58Qm7InR01E69fhBqkDen7QzGqtpkCbfOn85pzkT4Ll AwjnplLcayUqC78hWSjrlaxENS3WckKs4UJNbzOHn2DDgpUTnZyLMBfFdiuCNYFecdd/ rDVWQ8CP3VVi9ODnYB5alVMHbSLHIrw2pVeEJ/RPxFwGDrWeSdd8VcsS8wUJiyIP/jPr A01WC8SUx2wMtR2aPCu7Y3ap+JrMoIiFsIExzZ0Lku6cB0+pgh9ddPaGQ9+yY9vAZmpH lopLgJCC0WatbkG1EuYPFWpyXmLwA14Jd7vpjdS7J2IH47X6ixtN26/yy6TNIP6wok2V bsfQ== X-Gm-Message-State: AIkVDXKYP+2tprRKcOaYDEvyyNA8jwoprmyADNVKGuGw3scQiNiObK1m98cZBtIjcFiIkw== X-Received: by 10.107.62.69 with SMTP id l66mr40244011ioa.213.1483062852071; Thu, 29 Dec 2016 17:54:12 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 9sm27043606itv.0.2016.12.29.17.54.10 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 29 Dec 2016 17:54:11 -0800 (PST) From: npostavs@users.sourceforge.net In-Reply-To: <20161229111428.GA12532@acm.fritz.box> (Alan Mackenzie's message of "Thu, 29 Dec 2016 11:14:28 +0000") References: <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> <8737hldce8.fsf@users.sourceforge.net> <20161229111428.GA12532@acm.fritz.box> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) Date: Thu, 29 Dec 2016 20:55:09 -0500 Message-ID: <87eg0q89ky.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Spam-Score: -0.6 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.6 (/) --=-=-= Content-Type: text/plain Alan Mackenzie writes: > > (i) The new function `check_comment_start' doesn't have a comment saying > what its return value means. Possibly you could instead rename it so > that the name implies what it returns. Maybe something like > `in_double_comment_opener'. Good point, I've updated the patch. > > I'll admit I haven't actually tried out the code, mainly because you've > written a test file. Oh dear, maybe I should have withheld the test file ;) > > (ii) In `parse-partial-sexp-continue-over-comment-marker', variable aftC > is the position in the middle of the comment closer "*/". I don't think > you are testing in any way that element 10 (nil, or the syntax of the > position just before the end point when that position might be the first > character of a two-character construct, i.e. an escape or first char of a > double-char comment delimiter) is correct. My idea was that its effect would be tested by using pps-preC as OLDSTATE, which avoids having to encode the specifics in the test. I added another clause which uses pps-aftC to cover parsing from the middle of a comment closer as well as opener. --=-=-= Content-Type: text/plain Content-Disposition: attachment; filename=v2-0001-Fix-comment-detection-on-open-parens.patch Content-Description: patch v2 >From 50773c5194591526797eddf70a3cce5f4ccf6f25 Mon Sep 17 00:00:00 2001 From: Noam Postavsky Date: Sun, 18 Dec 2016 00:00:30 -0500 Subject: [PATCH v2] Fix comment detection on open parens Characters having both open paren syntax and comment start syntax were being detected as open parens even when they should have been part a comment starter (Bug#24870). * src/syntax.c (in_2char_comment_start): New function, extracted from `scan_sexps_forward'. (scan_sexps_forward): Add check for a 2-char comment starter before the loop. Inside the loop, do that check after incrementing the 'from' character index. Move the single char comment syntax cases into the switch instead of special casing them before. * test/src/syntax-tests.el (parse-partial-sexp-paren-comments): (parse-partial-sexp-continue-over-comment-marker): New tests. --- src/syntax.c | 117 +++++++++++++++++++++++++---------------------- test/src/syntax-tests.el | 85 ++++++++++++++++++++++++++++++++++ 2 files changed, 147 insertions(+), 55 deletions(-) create mode 100644 test/src/syntax-tests.el diff --git a/src/syntax.c b/src/syntax.c index 7c15e77..d291890 100644 --- a/src/syntax.c +++ b/src/syntax.c @@ -3092,6 +3092,36 @@ DEFUN ("backward-prefix-chars", Fbackward_prefix_chars, Sbackward_prefix_chars, return Qnil; } + +/* If the character at FROM_BYTE is the second part of a 2-character + comment opener based on PREV_FROM_SYNTAX, update STATE and return + true. */ +static bool +in_2char_comment_start (struct lisp_parse_state *state, + int prev_from_syntax, + ptrdiff_t prev_from, + ptrdiff_t from_byte) +{ + int c1, syntax; + if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) + && (c1 = FETCH_CHAR_AS_MULTIBYTE (from_byte), + syntax = SYNTAX_WITH_FLAGS (c1), + SYNTAX_FLAGS_COMSTART_SECOND (syntax))) + { + /* Record the comment style we have entered so that only + the comment-end sequence of the same style actually + terminates the comment section. */ + state->comstyle + = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); + bool comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) + | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); + state->incomment = comnested ? 1 : -1; + state->comstr_start = prev_from; + return true; + } + return false; +} + /* Parse forward from FROM / FROM_BYTE to END, assuming that FROM has state STATE, and return a description of the state of the parse at END. @@ -3107,8 +3137,6 @@ scan_sexps_forward (struct lisp_parse_state *state, int commentstop) { enum syntaxcode code; - int c1; - bool comnested; struct level { ptrdiff_t last, prev; }; struct level levelstart[100]; struct level *curlevel = levelstart; @@ -3122,7 +3150,6 @@ scan_sexps_forward (struct lisp_parse_state *state, ptrdiff_t prev_from; /* Keep one character before FROM. */ ptrdiff_t prev_from_byte; int prev_from_syntax, prev_prev_from_syntax; - int syntax; bool boundary_stop = commentstop == -1; bool nofence; bool found; @@ -3187,53 +3214,31 @@ scan_sexps_forward (struct lisp_parse_state *state, } else if (start_quoted) goto startquoted; + else if ((from < end) + && (in_2char_comment_start (state, prev_from_syntax, + prev_from, from_byte))) + { + INC_FROM; + prev_from_syntax = Smax; /* the syntax has already been "used up". */ + goto atcomment; + } while (from < end) { - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) - && (c1 = FETCH_CHAR (from_byte), - syntax = SYNTAX_WITH_FLAGS (c1), - SYNTAX_FLAGS_COMSTART_SECOND (syntax))) - { - /* Record the comment style we have entered so that only - the comment-end sequence of the same style actually - terminates the comment section. */ - state->comstyle - = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); - comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) - | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); - state->incomment = comnested ? 1 : -1; - state->comstr_start = prev_from; - INC_FROM; - prev_from_syntax = Smax; /* the syntax has already been - "used up". */ - code = Scomment; - } - else + INC_FROM; + + if ((from < end) + && (in_2char_comment_start (state, prev_from_syntax, + prev_from, from_byte))) { INC_FROM; - code = prev_from_syntax & 0xff; - if (code == Scomment_fence) - { - /* Record the comment style we have entered so that only - the comment-end sequence of the same style actually - terminates the comment section. */ - state->comstyle = ST_COMMENT_STYLE; - state->incomment = -1; - state->comstr_start = prev_from; - code = Scomment; - } - else if (code == Scomment) - { - state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0); - state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ? - 1 : -1); - state->comstr_start = prev_from; - } + prev_from_syntax = Smax; /* the syntax has already been "used up". */ + goto atcomment; } if (SYNTAX_FLAGS_PREFIX (prev_from_syntax)) continue; + code = prev_from_syntax & 0xff; switch (code) { case Sescape: @@ -3252,24 +3257,15 @@ scan_sexps_forward (struct lisp_parse_state *state, symstarted: while (from < end) { - int symchar = FETCH_CHAR_AS_MULTIBYTE (from_byte); - - if (SYNTAX_FLAGS_COMSTART_FIRST (prev_from_syntax) - && (syntax = SYNTAX_WITH_FLAGS (symchar), - SYNTAX_FLAGS_COMSTART_SECOND (syntax))) + if (in_2char_comment_start (state, prev_from_syntax, + prev_from, from_byte)) { - state->comstyle - = SYNTAX_FLAGS_COMMENT_STYLE (syntax, prev_from_syntax); - comnested = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) - | SYNTAX_FLAGS_COMMENT_NESTED (syntax)); - state->incomment = comnested ? 1 : -1; - state->comstr_start = prev_from; INC_FROM; - prev_from_syntax = Smax; - code = Scomment; + prev_from_syntax = Smax; /* the syntax has already been "used up". */ goto atcomment; } + int symchar = FETCH_CHAR_AS_MULTIBYTE (from_byte); switch (SYNTAX (symchar)) { case Scharquote: @@ -3290,8 +3286,19 @@ scan_sexps_forward (struct lisp_parse_state *state, curlevel->prev = curlevel->last; break; - case Scomment_fence: /* Can't happen because it's handled above. */ + case Scomment_fence: + /* Record the comment style we have entered so that only + the comment-end sequence of the same style actually + terminates the comment section. */ + state->comstyle = ST_COMMENT_STYLE; + state->incomment = -1; + state->comstr_start = prev_from; + goto atcomment; case Scomment: + state->comstyle = SYNTAX_FLAGS_COMMENT_STYLE (prev_from_syntax, 0); + state->incomment = (SYNTAX_FLAGS_COMMENT_NESTED (prev_from_syntax) ? + 1 : -1); + state->comstr_start = prev_from; atcomment: if (commentstop || boundary_stop) goto done; startincomment: diff --git a/test/src/syntax-tests.el b/test/src/syntax-tests.el new file mode 100644 index 0000000..776ce5b --- /dev/null +++ b/test/src/syntax-tests.el @@ -0,0 +1,85 @@ +;;; syntax-tests.el --- tests for syntax.c functions -*- lexical-binding: t -*- + +;; Copyright (C) 2016 Free Software Foundation, Inc. + +;; This file is part of GNU Emacs. + +;; GNU Emacs is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; GNU Emacs is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs. If not, see . + +;;; Code: + +(require 'ert) + +(ert-deftest parse-partial-sexp-continue-over-comment-marker () + "Continue a parse that stopped in the middle of a comment marker." + (with-temp-buffer + (let ((table (make-syntax-table))) + (modify-syntax-entry ?/ ". 124") + (modify-syntax-entry ?* ". 23b") + (set-syntax-table table)) + (insert "/*C*/\nX") + (goto-char (point-min)) + (let* ((pointC (progn (search-forward "C") (1- (point)))) + (preC (1- pointC)) + (pointX (progn (search-forward "X") (1- (point)))) + (aftC (+ 2 pointC)) + (ppsC (parse-partial-sexp (point-min) pointC)) + (pps-preC (parse-partial-sexp (point-min) preC)) + (pps-aftC (parse-partial-sexp (point-min) aftC)) + (ppsX (parse-partial-sexp (point-min) pointX))) + ;; C should be inside comment. + (should (= (nth 0 ppsC) 0)) + (should (eq (nth 4 ppsC) t)) + (should (= (nth 8 ppsC) (- pointC 2))) + ;; X should not be in comment or list. + (should (= (nth 0 ppsX) 0)) + (should-not (nth 4 ppsX)) + ;; Try using OLDSTATE. + (should (equal (parse-partial-sexp preC pointC nil nil pps-preC) + ppsC)) + (should (equal (parse-partial-sexp pointC aftC nil nil ppsC) + pps-aftC)) + (should (equal (parse-partial-sexp preC aftC nil nil pps-preC) + pps-aftC)) + (should (equal (parse-partial-sexp aftC pointX nil nil pps-aftC) + ppsX))))) + +(ert-deftest parse-partial-sexp-paren-comments () + "Test syntax parsing with paren comment markers. +Specifically, where the first character of the comment marker is +also has open paren syntax (see Bug#24870)." + (with-temp-buffer + (let ((table (make-syntax-table))) + (modify-syntax-entry ?\{ "(}1nb" table) + (modify-syntax-entry ?\} "){4nb" table) + (modify-syntax-entry ?- ". 123" table) + (set-syntax-table table)) + (insert "{-C-}\nX") + (goto-char (point-min)) + (let* ((pointC (progn (search-forward "C") (1- (point)))) + (pointX (progn (search-forward "X") (1- (point)))) + (ppsC (parse-partial-sexp (point-min) pointC)) + (ppsX (parse-partial-sexp (point-min) pointX))) + ;; C should be inside nestable comment, not list. + (should (= (nth 0 ppsC) 0)) + (should (= (nth 4 ppsC) 1)) + (should (= (nth 8 ppsC) (- pointC 2))) + ;; X should not be in comment or list. + (should (= (nth 0 ppsX) 0)) + (should-not (nth 4 ppsX)) + ;; Try using OLDSTATE. + (should (equal (parse-partial-sexp pointC pointX nil nil ppsC) + ppsX))))) + +;;; syntax-tests.el ends here -- 2.9.3 --=-=-=-- From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Jan 2017 02:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148427321418354 (code B ref 24870); Fri, 13 Jan 2017 02:07:01 +0000 Received: (at 24870) by debbugs.gnu.org; 13 Jan 2017 02:06:54 +0000 Received: from localhost ([127.0.0.1]:51945 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cRrGY-0004ly-6e for submit@debbugs.gnu.org; Thu, 12 Jan 2017 21:06:54 -0500 Received: from mail-io0-f195.google.com ([209.85.223.195]:33276) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cRrGU-0004lh-Sq for 24870@debbugs.gnu.org; Thu, 12 Jan 2017 21:06:52 -0500 Received: by mail-io0-f195.google.com with SMTP id 101so4292409iom.0 for <24870@debbugs.gnu.org>; Thu, 12 Jan 2017 18:06:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=U9CCLm1QH5sYYaw2vYa2ckcPw2gCbwo0WTdtAxdMSpE=; b=VEzfEtMXsCxjnNgZ32/+pyIyxFFlFL1tGOrX3KzI7F0DMjKD6k8fLT6Vy6yz2he/uA IjIS+FfKHnIrccnKKHjzzsrBFeY8JZLru226SHgnZPSXKoENZYSWtaBZTOJjCXKx1Wxg S1wB3v+XlHlY7UNbetsSjBEuFoJkUxbBPBpalGco4CIjMoKLptzIf9BCjR/pa4RUg6BP 6alp3Nxr0k/dN1s3hq0dUQWLZ4D7C0l01hDc4b6Es4B0tr82fTiBXmQ7WzX5TTq+9OPz GLcEMd4H6SqG8DnFzY7uen87SY4O6kE8ZEdntQ74LF6YP79vpP5dMqButR84ixzva/eq PuOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=U9CCLm1QH5sYYaw2vYa2ckcPw2gCbwo0WTdtAxdMSpE=; b=qEKITWBsO4h93Ln8qaKAFPnlaRLbCtKrw+6UeKsmRQpJGO7ueLknPsq+o4FF494+XZ xT67gzkPpO/iXdVrmH1Ucm4IGqOCH/PGrOn4VkrKCo/AsGae/FuHjZsq89hFuQ75jwCx z3N25sOIL28kCOAXexdA2QLmwzyqJK3BnQNUOdqfsZPo+2y8ql5SXU+eEzkolj/Z1ra8 Gbo0sZ5VjeKcgyo4MSs48kH3Iw8l+RtxdllVL9DLGvCWnChE1AJcR0KV0m2uJCRUIwtP /EM8LuTyQzRn69F4rPmKc4ntuTCz89sb3Jh1vg7MGyqevUgUYUX59oCLk53ykjehBYAm BPEA== X-Gm-Message-State: AIkVDXKRk8t++hD+GVtzq+G/5oRs/mhAW1AJs2WaRIHhLj2eRzydIANLEkTi0ZesLYyi8g== X-Received: by 10.107.166.18 with SMTP id p18mr8270560ioe.15.1484273205178; Thu, 12 Jan 2017 18:06:45 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 197sm141306ita.14.2017.01.12.18.06.43 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 12 Jan 2017 18:06:44 -0800 (PST) From: npostavs@users.sourceforge.net References: <87mvggh2hu.fsf@users.sourceforge.net> <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> <8737hldce8.fsf@users.sourceforge.net> <20161229111428.GA12532@acm.fritz.box> <87eg0q89ky.fsf@users.sourceforge.net> Date: Thu, 12 Jan 2017 21:07:49 -0500 In-Reply-To: <87eg0q89ky.fsf@users.sourceforge.net> (npostavs@users.sourceforge.net's message of "Thu, 29 Dec 2016 20:55:09 -0500") Message-ID: <87mvevzp8q.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.6 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.6 (/) npostavs@users.sourceforge.net writes: > Alan Mackenzie writes: >> >> (ii) In `parse-partial-sexp-continue-over-comment-marker', variable aftC >> is the position in the middle of the comment closer "*/". I don't think >> you are testing in any way that element 10 (nil, or the syntax of the >> position just before the end point when that position might be the first >> character of a two-character construct, i.e. an escape or first char of a >> double-char comment delimiter) is correct. > > My idea was that its effect would be tested by using pps-preC as > OLDSTATE, which avoids having to encode the specifics in the test. I > added another clause which uses pps-aftC to cover parsing from the > middle of a comment closer as well as opener. Ping? Agree/Disagree? From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 23 Jan 2017 20:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: npostavs@users.sourceforge.net Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.148520237330269 (code B ref 24870); Mon, 23 Jan 2017 20:13:01 +0000 Received: (at 24870) by debbugs.gnu.org; 23 Jan 2017 20:12:53 +0000 Received: from localhost ([127.0.0.1]:39434 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cVkyy-0007s9-LI for submit@debbugs.gnu.org; Mon, 23 Jan 2017 15:12:52 -0500 Received: from ocolin.muc.de ([193.149.48.4]:42375 helo=mail.muc.de) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1cVkyw-0007rz-JG for 24870@debbugs.gnu.org; Mon, 23 Jan 2017 15:12:51 -0500 Received: (qmail 15936 invoked by uid 3782); 23 Jan 2017 20:12:48 -0000 Received: from acm.muc.de (p548C72B0.dip0.t-ipconnect.de [84.140.114.176]) by colin.muc.de (tmda-ofmipd) with ESMTP; Mon, 23 Jan 2017 21:12:47 +0100 Received: (qmail 4866 invoked by uid 1000); 23 Jan 2017 20:12:32 -0000 Date: Mon, 23 Jan 2017 20:12:32 +0000 Message-ID: <20170123201232.GB4397@acm> References: <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> <8737hldce8.fsf@users.sourceforge.net> <20161229111428.GA12532@acm.fritz.box> <87eg0q89ky.fsf@users.sourceforge.net> <87mvevzp8q.fsf@users.sourceforge.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <87mvevzp8q.fsf@users.sourceforge.net> User-Agent: Mutt/1.7.2 (2016-11-26) X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: -3.2 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.2 (---) Hello, Noam. Sorry this is very late, but better that than not at all. On Thu, Jan 12, 2017 at 21:07:49 -0500, npostavs@users.sourceforge.net wrote: > npostavs@users.sourceforge.net writes: > > Alan Mackenzie writes: > >> (ii) In `parse-partial-sexp-continue-over-comment-marker', variable aftC > >> is the position in the middle of the comment closer "*/". I don't think > >> you are testing in any way that element 10 (nil, or the syntax of the > >> position just before the end point when that position might be the first > >> character of a two-character construct, i.e. an escape or first char of a > >> double-char comment delimiter) is correct. > > My idea was that its effect would be tested by using pps-preC as > > OLDSTATE, which avoids having to encode the specifics in the test. I > > added another clause which uses pps-aftC to cover parsing from the > > middle of a comment closer as well as opener. > Ping? Agree/Disagree? I've just had another fairly intensive look at the patches, and I agree. I think it's time to commit these. What do you say? -- Alan Mackenzie (Nuremberg, Germany). From unknown Sun Aug 10 16:44:42 2025 X-Loop: help-debbugs@gnu.org Subject: bug#24870: 26.0.50; parse-partial-sexp ignores comment-end Resent-From: npostavs@users.sourceforge.net Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 Jan 2017 00:30:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24870 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: confirmed To: Alan Mackenzie Cc: 24870@debbugs.gnu.org, Andreas =?UTF-8?Q?R=C3=B6hler?= , Matt Armstrong Received: via spool by 24870-submit@debbugs.gnu.org id=B24870.14852177651470 (code B ref 24870); Tue, 24 Jan 2017 00:30:02 +0000 Received: (at 24870) by debbugs.gnu.org; 24 Jan 2017 00:29:25 +0000 Received: from localhost ([127.0.0.1]:39541 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cVozE-0000Nd-Sg for submit@debbugs.gnu.org; Mon, 23 Jan 2017 19:29:25 -0500 Received: from mail-it0-f67.google.com ([209.85.214.67]:34766) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cVozD-0000NH-9X; Mon, 23 Jan 2017 19:29:24 -0500 Received: by mail-it0-f67.google.com with SMTP id o185so12174176itb.1; Mon, 23 Jan 2017 16:29:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:references:date:in-reply-to:message-id :user-agent:mime-version; bh=iz6VYnqMuCf7hZ2bQxumuESYzZW/L5/wWjeT/Yb3WVw=; b=SLIeKDFs1wYhStAIQgqBxoqv2zD4nspiPo8ag8rTV/RBDYTXm5WjYJuIyao3rDkynY 1cJwSHbbaID80deLO23pc1EEgG5lPHMgrEuv88MVMtVbohYt6pp2Hk9l3hVnHIWap1hg aAngWSCg7S7gr98bXefztXECXWUqSgXga5MCI37OcNyghEtXf6Ye1Blhj6HdFixIkGpP h2UtfNnOQoh+KIETF6n+rooJm9MIHPycygW7Dsnb8okouQJh9+oLhI6djZXnAjTyMrhr DR/Upz63/Lyy+NFBne/ALL1mQ4hdKRVpT6PAZD4m9ZID7czgjJIeXYqa2uJW3+ZuKycM lzog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:references:date :in-reply-to:message-id:user-agent:mime-version; bh=iz6VYnqMuCf7hZ2bQxumuESYzZW/L5/wWjeT/Yb3WVw=; b=icoIppBIjm5Agu3ONowWYLj1HmRDsERFWT8gWwf/wuJRoXXwZfjOevcpVyMyYcz8h6 Kg7kVqE06E40J2IVOg+735iDBauMRSLgQJGTdF3xeTXT1oMFvPQ7/TWlCg5RemNeF6HP NtSGkRprTa6VHZ3fOOuDWQ7M/8dQS7rWWs/otTrmKzZPwgtfGFLuZ2pZ892i01l3+0cc k8Zi5i6Hxc1wLMSStXKLOcPcjHjmppc1ayW0bEFD1FVY4y4viR/idZx+tBj7Lmjk2VHT fpyrgDLx/hJIzMiH0E12oZ8JAuMQpB8L0oX9/UPuV0P6t12PEm4yZ0gHhIxxFIzCqPR1 Z6jQ== X-Gm-Message-State: AIkVDXIYMu1bPlqe5KcGevG1Dr5KoLOpoG9EUREd4k8Vpsd6aCp235mVNBuzwT3cW0BD1g== X-Received: by 10.36.77.10 with SMTP id l10mr16810759itb.59.1485217757562; Mon, 23 Jan 2017 16:29:17 -0800 (PST) Received: from zony ([45.2.7.65]) by smtp.googlemail.com with ESMTPSA id 197sm7365631ita.14.2017.01.23.16.29.15 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 23 Jan 2017 16:29:16 -0800 (PST) From: npostavs@users.sourceforge.net References: <87h967cj0f.fsf@users.sourceforge.net> <87eg1bcg0y.fsf@users.sourceforge.net> <20161214215834.GB3881@acm.fritz.box> <20161215164458.GA2437@acm.fritz.box> <8737hldce8.fsf@users.sourceforge.net> <20161229111428.GA12532@acm.fritz.box> <87eg0q89ky.fsf@users.sourceforge.net> <87mvevzp8q.fsf@users.sourceforge.net> <20170123201232.GB4397@acm> Date: Mon, 23 Jan 2017 19:30:23 -0500 In-Reply-To: <20170123201232.GB4397@acm> (Alan Mackenzie's message of "Mon, 23 Jan 2017 20:12:32 +0000") Message-ID: <87a8ahuwo0.fsf@users.sourceforge.net> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: 0.5 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.5 (/) tags 24870 fixed close 24870 quit Alan Mackenzie writes: > > On Thu, Jan 12, 2017 at 21:07:49 -0500, npostavs@users.sourceforge.net wrote: >> npostavs@users.sourceforge.net writes: > >> > Alan Mackenzie writes: > >> >> (ii) In `parse-partial-sexp-continue-over-comment-marker', variable aftC >> >> is the position in the middle of the comment closer "*/". I don't think >> >> you are testing in any way that element 10 (nil, or the syntax of the >> >> position just before the end point when that position might be the first >> >> character of a two-character construct, i.e. an escape or first char of a >> >> double-char comment delimiter) is correct. > >> > My idea was that its effect would be tested by using pps-preC as >> > OLDSTATE, which avoids having to encode the specifics in the test. I >> > added another clause which uses pps-aftC to cover parsing from the >> > middle of a comment closer as well as opener. > > > I've just had another fairly intensive look at the patches, and I > agree. Thanks for the review. > > I think it's time to commit these. What do you say? Yep, pushed to master [1: 201dfe3]. 1: 2017-01-23 19:28:30 -0500 201dfe311868932d10da146808fcdd681948ba53 Fix comment detection on open parens