[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 29f74b1 040/110: Allow 0o octals in strict mode
From: |
Dmitry Gutov |
Subject: |
[elpa] master 29f74b1 040/110: Allow 0o octals in strict mode |
Date: |
Thu, 23 Jun 2016 01:12:55 +0000 (UTC) |
branch: master
commit 29f74b19e1c44ff498cc975466569b782a106e89
Author: Carl Lei <address@hidden>
Commit: Carl Lei <address@hidden>
Allow 0o octals in strict mode
0o octals are allowed in ES6 strict mode, while octals like 0123 are
called LegacyOctalIntegerLiteral and remain disallowed.
---
js2-mode.el | 20 ++++++++++++++------
tests/parser.el | 3 +++
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/js2-mode.el b/js2-mode.el
index 3566071..43c47cc 100644
--- a/js2-mode.el
+++ b/js2-mode.el
@@ -675,6 +675,7 @@ List of chars built up while scanning various tokens.")
(string "")
number
number-base
+ number-legacy-octal-p
regexp-flags
comment-type
follows-eol-p)
@@ -3701,11 +3702,14 @@ Returns 0 if NODE is nil or its identifier field is
nil."
(num-value
(js2-token-number
(js2-current-token)))
(num-base
(js2-token-number-base
-
(js2-current-token))))))
+
(js2-current-token)))
+ (legacy-octal-p
(js2-token-number-legacy-octal-p
+
(js2-current-token))))))
"AST node for a number literal."
value ; the original string, e.g. "6.02e23"
num-value ; the parsed number value
- num-base) ; the number's base
+ num-base ; the number's base
+ legacy-octal-p) ; whether the number is a legacy octal (0123 instead of
0o123)
(put 'cl-struct-js2-number-node 'js2-visitor 'js2-visit-none)
(put 'cl-struct-js2-number-node 'js2-printer 'js2-print-number-node)
@@ -5879,7 +5883,7 @@ its relevant fields and puts it into `js2-ti-tokens'."
(let (identifier-start
is-unicode-escape-start c
contains-escape escape-val str result base
- look-for-slash continue tt
+ look-for-slash continue tt legacy-octal
(token (js2-new-token 0)))
(setq
tt
@@ -6001,6 +6005,7 @@ its relevant fields and puts it into `js2-ti-tokens'."
((and (or (eq c ?o) (eq c ?O))
(>= js2-language-version 200))
(setq base 8)
+ (setq legacy-octal nil)
(setq c (js2-get-char)))
((js2-digit-p c)
(setq base 'maybe-8))
@@ -6038,7 +6043,8 @@ its relevant fields and puts it into `js2-ti-tokens'."
(js2-add-to-string c)
(setq c (js2-get-char)))
(when (eq base 'maybe-8)
- (setq base 8))))
+ (setq base 8
+ legacy-octal t))))
(when (and (eq base 10) (memq c '(?. ?e ?E)))
(when (eq c ?.)
(cl-loop do
@@ -6060,7 +6066,8 @@ 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) (js2-string-to-number str base)
- (js2-token-number-base token) base))
+ (js2-token-number-base token) base
+ (js2-token-number-legacy-octal-p token) (and (= base 8)
legacy-octal)))
(throw 'return js2-NUMBER))
;; is it a string?
(when (or (memq c '(?\" ?\'))
@@ -10249,7 +10256,8 @@ array-literals, array comprehensions and regular
expressions."
((= tt js2-NUMBER)
(setq node (make-js2-number-node))
(when (and js2-in-use-strict-directive
- (= (js2-number-node-num-base node) 8))
+ (= (js2-number-node-num-base node) 8)
+ (js2-number-node-legacy-octal-p node))
(js2-report-error "msg.no.octal.strict"))
node)
((or (= tt js2-STRING) (= tt js2-NO_SUBS_TEMPLATE))
diff --git a/tests/parser.el b/tests/parser.el
index 136b97c..9f8ab81 100644
--- a/tests/parser.el
+++ b/tests/parser.el
@@ -320,6 +320,9 @@ the test."
"'use strict';\nvar number = 0644;"
:syntax-error "0644" :errors-count 1)
+(js2-deftest-parse function-strict-octal-allow-0o
+ "'use strict';\n0o644;" :reference "'use strict';\n420;")
+
(js2-deftest-parse function-strict-duplicate-keys
"'use strict';\nvar object = {a: 1, a: 2, 'a': 3, ['a']: 4, 1: 5, '1': 6, [1
+ 1]: 7};"
:syntax-error "a" :errors-count 4) ; "a" has 3 dupes, "1" has 1 dupe.
- [elpa] master b1234ca 013/110: Don't misindent generator methods, (continued)
- [elpa] master b1234ca 013/110: Don't misindent generator methods, Dmitry Gutov, 2016/06/22
- [elpa] master d82a58d 019/110: Refactor: rename getter-setter-node to method-node, Dmitry Gutov, 2016/06/22
- [elpa] master 263852b 026/110: Add melpa badges, Dmitry Gutov, 2016/06/22
- [elpa] master 98433fb 036/110: `js2-print-json-path' added, Dmitry Gutov, 2016/06/22
- [elpa] master f9d28d3 052/110: Adjust js2-print-export-node, Dmitry Gutov, 2016/06/22
- [elpa] master d307285 039/110: Move method type handling to property METHOD_TYPE, Dmitry Gutov, 2016/06/22
- [elpa] master f652d17 044/110: Add setImmediate and clearImmediate to js2-node-externs, Dmitry Gutov, 2016/06/22
- [elpa] master e0972fb 048/110: s/will/would, Dmitry Gutov, 2016/06/22
- [elpa] master d201a30 027/110: Merge pull request #281 from robbyoconnor/patch-1, Dmitry Gutov, 2016/06/22
- [elpa] master 667d320 034/110: Merge pull request #282 from jacksonrayhamilton/js2-jsx-mode, Dmitry Gutov, 2016/06/22
- [elpa] master 29f74b1 040/110: Allow 0o octals in strict mode,
Dmitry Gutov <=
- [elpa] master 2a22635 035/110: Support .jsx file extension too in the example, Dmitry Gutov, 2016/06/22
- [elpa] master 4955584 037/110: Merge pull request #278 from redguardtoo/master, Dmitry Gutov, 2016/06/22
- [elpa] master 7c12f2c 031/110: Copy JSX indentation logic to js2-old-indent.el, Dmitry Gutov, 2016/06/22
- [elpa] master d0e4323 046/110: Add NEWS entry for async/await, Dmitry Gutov, 2016/06/22
- [elpa] master 0b1704b 041/110: Merge pull request #284 from XeCycle/0o-octals, Dmitry Gutov, 2016/06/22
- [elpa] master 7abe15e 043/110: Merge pull request #285 from dgreensp/fix-param-destruct, Dmitry Gutov, 2016/06/22
- [elpa] master 38aa66b 054/110: Do not print trailing semicolon for export function and class, Dmitry Gutov, 2016/06/22
- [elpa] master 4cd81c7 050/110: Exported decls print a little funny; update tests, Dmitry Gutov, 2016/06/22
- [elpa] master 00a455f 009/110: Merge pull request #266 from jacksonrayhamilton/no-getter-setter-duplicate, Dmitry Gutov, 2016/06/22
- [elpa] master 4894200 056/110: Merge pull request #290 from XeCycle/export-async-fn, Dmitry Gutov, 2016/06/22