[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master ac205a4 16/33: Octal syntax is an error in strict mode
From: |
Dmitry Gutov |
Subject: |
[elpa] master ac205a4 16/33: Octal syntax is an error in strict mode |
Date: |
Sun, 12 Jul 2015 22:35:40 +0000 |
branch: master
commit ac205a435c93be083d43c6b823309b8ec2742eae
Author: Jackson Ray Hamilton <address@hidden>
Commit: Jackson Ray Hamilton <address@hidden>
Octal syntax is an error in strict mode
---
js2-mode.el | 23 +++++++++++++++++------
tests/parser.el | 4 ++++
2 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/js2-mode.el b/js2-mode.el
index d47fc80..fcb1dcc 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -736,6 +736,7 @@ List of chars built up while scanning various tokens.")
(end -1)
(string "")
number
+ number-base
regexp-flags
comment-type
follows-eol-p)
@@ -1789,6 +1790,9 @@ the correct number of ARGS must be provided."
(js2-msg "msg.destruct.assign.no.init"
"Missing = in destructuring declaration")
+(js2-msg "msg.no.octal.strict"
+ "Octal numbers prohibited in strict mode.")
+
(js2-msg "msg.dup.param.strict"
"Parameter '%s' already declared in this function.")
@@ -3768,10 +3772,13 @@ Returns 0 if NODE is nil or its identifier field is
nil."
(js2-current-token-beg)))
(value
(js2-current-token-string))
(num-value
(js2-token-number
-
(js2-current-token))))))
+
(js2-current-token)))
+ (num-base
(js2-token-number-base
+
(js2-current-token))))))
"AST node for a number literal."
value ; the original string, e.g. "6.02e23"
- num-value) ; the parsed number value
+ num-value ; the parsed number value
+ num-base) ; the number's base
(put 'cl-struct-js2-number-node 'js2-visitor 'js2-visit-none)
(put 'cl-struct-js2-number-node 'js2-printer 'js2-print-number-node)
@@ -6115,8 +6122,8 @@ its relevant fields and puts it into `js2-ti-tokens'."
while (js2-digit-p c))))
(js2-unget-char)
(let ((str (js2-set-string-from-buffer token)))
- (setf (js2-token-number token)
- (js2-string-to-number str base)))
+ (setf (js2-token-number token) (js2-string-to-number str base)
+ (js2-token-number-base token) base))
(throw 'return js2-NUMBER))
;; is it a string?
(when (or (memq c '(?\" ?\'))
@@ -10286,7 +10293,7 @@ For instance, @[expr], @*::[expr], or ns::[expr]."
"Parse a literal (leaf) expression of some sort.
Includes complex literals such as functions, object-literals,
array-literals, array comprehensions and regular expressions."
- (let (tt)
+ (let (tt node)
(setq tt (js2-current-token-type))
(cond
((= tt js2-CLASS)
@@ -10307,7 +10314,11 @@ array-literals, array comprehensions and regular
expressions."
((= tt js2-NAME)
(js2-parse-name tt))
((= tt js2-NUMBER)
- (make-js2-number-node))
+ (setq node (make-js2-number-node))
+ (when (and js2-in-use-strict-directive
+ (= (js2-number-node-num-base node) 8))
+ (js2-report-error "msg.no.octal.literal"))
+ node)
((or (= tt js2-STRING) (= tt js2-NO_SUBS_TEMPLATE))
(make-js2-string-node :type tt))
((= tt js2-TEMPLATE_HEAD)
diff --git a/tests/parser.el b/tests/parser.el
index 04a19c3..0e92037 100644
--- a/tests/parser.el
+++ b/tests/parser.el
@@ -287,6 +287,10 @@ the test."
"'use strict';\nwith ({}) {}"
:syntax-error "with" :errors-count 1)
+(js2-deftest-parse function-strict-octal
+ "'use strict';\nvar number = 0644;"
+ :syntax-error "0644" :errors-count 1)
+
;;; Spread operator
(js2-deftest-parse spread-in-array-literal
- [elpa] master 7c423dd 10/33: Define const variables in the current block., (continued)
- [elpa] master 7c423dd 10/33: Define const variables in the current block., Dmitry Gutov, 2015/07/12
- [elpa] master d39764f 02/33: Merge pull request #231 from shicks/computed, Dmitry Gutov, 2015/07/12
- [elpa] master 88d7565 11/33: Respect strict mode., Dmitry Gutov, 2015/07/12
- [elpa] master a5b586f 13/33: Test const scoping., Dmitry Gutov, 2015/07/12
- [elpa] master 254c78c 07/33: Highlight unused and/or uninitialized variables, Dmitry Gutov, 2015/07/12
- [elpa] master 1277c7d 12/33: Track script and function strict mode., Dmitry Gutov, 2015/07/12
- [elpa] master 498bcca 21/33: Fix refactoring regression., Dmitry Gutov, 2015/07/12
- [elpa] master 663efb1 24/33: Remove strict mode slots on nodes., Dmitry Gutov, 2015/07/12
- [elpa] master 6255edb 18/33: Cleanup, Dmitry Gutov, 2015/07/12
- [elpa] master ad4c5cc 20/33: Report the correct octal number error, Dmitry Gutov, 2015/07/12
- [elpa] master ac205a4 16/33: Octal syntax is an error in strict mode,
Dmitry Gutov <=
- [elpa] master 7850d12 25/33: Cleanup, Dmitry Gutov, 2015/07/12
- [elpa] master e6cb7bf 15/33: with statements are syntax errors in strict mode, Dmitry Gutov, 2015/07/12
- [elpa] master 46e1492 23/33: Reparse strict functions., Dmitry Gutov, 2015/07/12
- [elpa] master 1391f2e 22/33: setq inline, Dmitry Gutov, 2015/07/12
- [elpa] master f1edac7 19/33: Don't treat a block-scoped const as redeclaration, Dmitry Gutov, 2015/07/12
- [elpa] master c588e31 17/33: Duplicate object keys are an error in strict mode, Dmitry Gutov, 2015/07/12
- [elpa] master 2469440 26/33: Fix bug where properties where checked for strict mode compliance, Dmitry Gutov, 2015/07/12
- [elpa] master 12e5a21 28/33: Remove js2-current-indent, Dmitry Gutov, 2015/07/12
- [elpa] master 5b25da2 30/33: Add NEWS entry and bump version, Dmitry Gutov, 2015/07/12
- [elpa] master e0ecf99 14/33: Check identifiers in strict mode., Dmitry Gutov, 2015/07/12