emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] 25/46: Ignore integer overflow


From: Dmitry Gutov
Subject: [elpa] 25/46: Ignore integer overflow
Date: Sat, 15 Nov 2014 20:58:05 +0000

dgutov pushed a commit to branch master
in repository elpa.

commit 817ea31e9b2db28d60b6f7c85ef62c4e8db4a880
Author: Dmitry Gutov <address@hidden>
Date:   Mon Aug 4 05:25:51 2014 +0400

    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 94c1e9d..e939258 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 21d14a1..2e492a2 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;")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]