From 817ea31e9b2db28d60b6f7c85ef62c4e8db4a880 Mon Sep 17 00:00:00 2001 From: Dmitry Gutov Date: Mon, 4 Aug 2014 05:25:51 +0400 Subject: [PATCH] Ignore integer overflow Fixes #154 --- js2-mode.el | 15 ++++++++------- tests/parser.el | 2 ++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/js2-mode.el b/js2-mode.el index 94c1e9dbc..e93925820 100644 --- a/js2-mode.el +++ b/js2-mode.el @@ -5442,7 +5442,7 @@ During operation, creates an instance of `js2-token' struct, sets its relevant fields and puts it into `js2-ti-tokens'." (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 tt + quote-char val look-for-slash continue tt (token (js2-new-token 0))) (setq tt @@ -5598,9 +5598,7 @@ its relevant fields and puts it into `js2-ti-tokens'." (setq c (js2-get-char))) (when (eq base 'maybe-8) (setq base 8)))) - (setq is-integer t) (when (and (eq base 10) (memq c '(?. ?e ?E))) - (setq is-integer nil) (when (eq c ?.) (loop do (js2-add-to-string c) @@ -5621,10 +5619,7 @@ its relevant fields and puts it into `js2-ti-tokens'." (js2-unget-char) (let ((str (js2-set-string-from-buffer token))) (setf (js2-token-number token) - (if (and (eq base 10) (not is-integer)) - (string-to-number str) - ;; TODO: Maybe port ScriptRuntime.stringToNumber. - (string-to-number str base)))) + (js2-string-to-number str base))) (throw 'return js2-NUMBER)) ;; is it a string? (when (memq c '(?\" ?\')) @@ -5896,6 +5891,12 @@ its relevant fields and puts it into `js2-ti-tokens'." (setf (js2-token-type token) tt) token)) +(defsubst js2-string-to-number (str base) + ;; TODO: Maybe port ScriptRuntime.stringToNumber. + (condition-case nil + (string-to-number str base) + (overflow-error -1))) + (defun js2-read-regexp (start-tt) "Called by parser when it gets / or /= in literal context." (let (c err diff --git a/tests/parser.el b/tests/parser.el index 21d14a185..2e492a2fe 100644 --- a/tests/parser.el +++ b/tests/parser.el @@ -281,6 +281,8 @@ the test." (js2-deftest-parse decimal-starting-with-zero "081;" :reference "81;") +(js2-deftest-parse huge-hex "0x0123456789abcdefABCDEF;" :reference "-1;") + (js2-deftest-parse octal-without-o "071;" :reference "57;") (js2-deftest-parse hex-number-okay "0x123;" :reference "291;") -- 2.39.2