-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathjs-util.el
74 lines (63 loc) · 2.58 KB
/
js-util.el
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
;;; js-util.el -- utilities shared by various js packages
;; Author: Steve Yegge ([email protected])
;; Version: 2008.10.30
;; Keywords: javascript languages
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2 of
;; the License, or (at your option) any later version.
;; This program is distributed in the hope that it will be
;; useful, but WITHOUT ANY WARRANTY; without even the implied
;; warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
;; PURPOSE. See the GNU General Public License for more details.
;; You should have received a copy of the GNU General Public
;; License along with this program; if not, write to the Free
;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
;; MA 02111-1307 USA
;;; Code:
(defmacro ++ (place &optional x)
"Increment PLACE by X (1 by default).
PLACE may be a symbol, or any generalized variable allowed by `setf'.
The return value is the original value of PLACE."
(if (symbolp place)
(list 'prog1 place
(list 'setq place (if x
(list '+ place x)
(list '1+ place))))
(list 'prog1 place
(list 'callf '+ place (or x 1)))))
(defmacro -- (place &optional x)
"Decrement PLACE by X (1 by default).
PLACE may be a symbol, or any generalized variable allowed by `setf'.
The return value is the original value of PLACE."
(if (symbolp place)
(list 'prog1 place
(list 'setq place (if x
(list '- place x)
(list '1- place))))
(list 'prog1 place
(list 'callf '- place (or x 1)))))
(defsubst xor (arg1 arg2)
"Compute the logical-XOR of ARG1 and ARG2.
Both arguments must evaluate to t or nil."
(not (eq arg1 arg2)))
(defun js-format (format-string &rest args)
"Like `format', but prints short versions of JavaScript Objects.
The default printing for defstruct trees is inescapably verbose."
(apply 'format format-string (mapcar 'js-printobj args)))
(defun js-hex-digit-to-int (c acc)
"If C is a hex digit, return accumulator * 16 plus C.
Otherwise return -1. C is a character, not a string."
(let ((value
(cond
((and (>= c ?0) (<= c ?9))
(- c ?0))
((and (>= c ?A) (<= c ?F))
(- c (- ?A 10)))
((and (>= c ?a) (<= c ?f))
(- c (- ?a 10)))
(t -1))))
(if (minusp value)
value
(logior value (lsh acc 4)))))
(provide 'js-util)