From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Stefan Monnier Newsgroups: gmane.emacs.bugs Subject: bug#15294: 24.3.50; js2-mode parser is several times slower in lexical-binding mode Date: Thu, 12 Sep 2013 23:40:45 -0400 Message-ID: References: <871u51ll93.fsf@yandex.ru> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain X-Trace: ger.gmane.org 1379043681 7496 80.91.229.3 (13 Sep 2013 03:41:21 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 13 Sep 2013 03:41:21 +0000 (UTC) Cc: 15294@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Sep 13 05:41:23 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VKKFz-0001hV-Tm for geb-bug-gnu-emacs@m.gmane.org; Fri, 13 Sep 2013 05:41:20 +0200 Original-Received: from localhost ([::1]:44618 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VKKFz-0003z6-Di for geb-bug-gnu-emacs@m.gmane.org; Thu, 12 Sep 2013 23:41:19 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:54193) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VKKFp-0003yN-RS for bug-gnu-emacs@gnu.org; Thu, 12 Sep 2013 23:41:17 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VKKFi-0000xc-Hu for bug-gnu-emacs@gnu.org; Thu, 12 Sep 2013 23:41:09 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:52052) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VKKFi-0000xX-Ex for bug-gnu-emacs@gnu.org; Thu, 12 Sep 2013 23:41:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VKKFi-0006FW-7M for bug-gnu-emacs@gnu.org; Thu, 12 Sep 2013 23:41:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 13 Sep 2013 03:41:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15294 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15294-submit@debbugs.gnu.org id=B15294.137904365424008 (code B ref 15294); Fri, 13 Sep 2013 03:41:02 +0000 Original-Received: (at 15294) by debbugs.gnu.org; 13 Sep 2013 03:40:54 +0000 Original-Received: from localhost ([127.0.0.1]:60345 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VKKFZ-0006FA-K3 for submit@debbugs.gnu.org; Thu, 12 Sep 2013 23:40:53 -0400 Original-Received: from ironport2-out.teksavvy.com ([206.248.154.182]:38898) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VKKFX-0006Ev-Ey for 15294@debbugs.gnu.org; Thu, 12 Sep 2013 23:40:51 -0400 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av8EABK/CFG4rxBo/2dsb2JhbABEuzWDWRdzgh4BAQQBViMFCwsOJhIUGA0kiB4GwS2RCgOkeoFegxM X-IPAS-Result: Av8EABK/CFG4rxBo/2dsb2JhbABEuzWDWRdzgh4BAQQBViMFCwsOJhIUGA0kiB4GwS2RCgOkeoFegxM X-IronPort-AV: E=Sophos;i="4.84,565,1355115600"; d="scan'208";a="27588612" Original-Received: from 184-175-16-104.dsl.teksavvy.com (HELO pastel.home) ([184.175.16.104]) by ironport2-out.teksavvy.com with ESMTP/TLS/ADH-AES256-SHA; 12 Sep 2013 23:37:14 -0400 Original-Received: by pastel.home (Postfix, from userid 20848) id 67F6E62E78; Thu, 12 Sep 2013 23:40:45 -0400 (EDT) In-Reply-To: (Stefan Monnier's message of "Mon, 09 Sep 2013 22:04:38 -0400") User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:78311 Archived-At: > In the compiled case, loading js2-mode-lexical.elc and then redefining > `js2-get-token' to the value it has in js2-mode-dynamic.elc brings me > back the same speed as with js2-mode-dynamic.elc. > IOW the slowdown is in js2-get-token. It seems the slowdown is indeed linked to the way `catch' is handled (indeed, this non-idiomatic ELisp code ends up byte-compiled in a really poor way). The trivial patch below brings the time down from 5s to 2.6s (as compared to 2.1s for the dynamic-binding version). Stefan diff --git a/packages/js2-mode/js2-mode.el b/packages/js2-mode/js2-mode.el index 3568f18..1d76469 100644 --- a/packages/js2-mode/js2-mode.el +++ b/packages/js2-mode/js2-mode.el @@ -5310,10 +5311,10 @@ corresponding number. Otherwise return -1." (defun js2-get-token () "Return next JavaScript token, an int such as js2-RETURN." - (let (c c1 identifier-start is-unicode-escape-start - contains-escape escape-val str result base - is-integer quote-char val look-for-slash continue) - (catch 'return + (catch 'return + (let (c c1 identifier-start is-unicode-escape-start + contains-escape escape-val str result base + is-integer quote-char val look-for-slash continue) (while t ;; Eat whitespace, possibly sensitive to newlines. (setq continue t)