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
(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)
(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 '(?\" ?\'))
(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
(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;")