annotate lisp/progmodes/js.el @ 112420:f7f90410cc52

* lisp/progmodes/js.el (js--regexp-literal): Count backslashes.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 21 Jan 2011 15:48:20 -0500
parents 376148b31b5e
children 9f7614f1a892
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1 ;;; js.el --- Major mode for editing JavaScript
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 109258
diff changeset
3 ;; Copyright (C) 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
4
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5 ;; Author: Karl Landstrom <karl.landstrom@brgeight.se>
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Daniel Colascione <dan.colascione@gmail.com>
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Maintainer: Daniel Colascione <dan.colascione@gmail.com>
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8 ;; Version: 9
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9 ;; Date: 2009-07-25
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10 ;; Keywords: languages, oop, javascript
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; This file is part of GNU Emacs.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; GNU Emacs is free software: you can redistribute it and/or modify
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15 ;; it under the terms of the GNU General Public License as published by
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; the Free Software Foundation, either version 3 of the License, or
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; (at your option) any later version.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; GNU Emacs is distributed in the hope that it will be useful,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; GNU General Public License for more details.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;; You should have received a copy of the GNU General Public License
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27 ;;; Commentary
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29 ;; This is based on Karl Landstrom's barebones javascript-mode. This
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 ;; is much more robust and works with cc-mode's comment filling
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;; (mostly).
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 ;; The main features of this JavaScript mode are syntactic
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 ;; highlighting (enabled with `font-lock-mode' or
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35 ;; `global-font-lock-mode'), automatic indentation and filling of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 ;; comments, C preprocessor fontification, and MozRepl integration.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 ;; General Remarks:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 ;; XXX: This mode assumes that block comments are not nested inside block
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 ;; XXX: comments
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 ;; Exported names start with "js-"; private names start with
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 ;; "js--".
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 ;;; Code:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 (eval-and-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 (require 'cc-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 (require 'font-lock)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 (require 'newcomment)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 (require 'imenu)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 (require 'etags)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 (require 'thingatpt)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55 (require 'easymenu)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 (require 'moz nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 (require 'json nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 (eval-when-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 (require 'cl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 (require 'comint)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
62 (require 'ido))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 (defvar inferior-moz-buffer)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 (defvar moz-repl-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 (defvar ido-cur-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 (declare-function ido-mode "ido")
104391
0642b524d60c (inferior-moz-process): Fix declaration.
Glenn Morris <rgm@gnu.org>
parents: 104276
diff changeset
68 (declare-function inferior-moz-process "ext:mozrepl" ())
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 ;;; Constants
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 (defconst js--name-start-re "[a-zA-Z_$]"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
73 "Regexp matching the start of a JavaScript identifier, without grouping.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 (defconst js--stmt-delim-chars "^;{}?:")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 (defconst js--name-re (concat js--name-start-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 "\\(?:\\s_\\|\\sw\\)*")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
79 "Regexp matching a JavaScript identifier, without grouping.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 (defconst js--objfield-re (concat js--name-re ":")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
82 "Regexp matching the start of a JavaScript object field.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 (defconst js--dotted-name-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 (concat js--name-re "\\(?:\\." js--name-re "\\)*")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
86 "Regexp matching a dot-separated sequence of JavaScript names.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 (defconst js--cpp-name-re js--name-re
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
89 "Regexp matching a C preprocessor name.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 (defconst js--opt-cpp-start "^\\s-*#\\s-*\\([[:alnum:]]+\\)"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
92 "Regexp matching the prefix of a cpp directive.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
93 This includes the directive name, or nil in languages without
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
94 preprocessor support. The first submatch surrounds the directive
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
95 name.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 (defconst js--plain-method-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 (concat "^\\s-*?\\(" js--dotted-name-re "\\)\\.prototype"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 "\\.\\(" js--name-re "\\)\\s-*?=\\s-*?\\(function\\)\\_>")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
100 "Regexp matching an explicit JavaScript prototype \"method\" declaration.
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
101 Group 1 is a (possibly-dotted) class name, group 2 is a method name,
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
102 and group 3 is the 'function' keyword.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104 (defconst js--plain-class-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 (concat "^\\s-*\\(" js--dotted-name-re "\\)\\.prototype"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 "\\s-*=\\s-*{")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
107 "Regexp matching a JavaScript explicit prototype \"class\" declaration.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
108 An example of this is \"Class.prototype = { method1: ...}\".")
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
109
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
110 ;; var NewClass = BaseClass.extend(
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 (defconst js--mp-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (concat "^\\s-*var\\s-+"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 "\\(" js--name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 "\\s-*=\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 "\\(" js--dotted-name-re
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
116 "\\)\\.extend\\(?:Final\\)?\\s-*(\\s-*{?\\s-*$"))
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
117
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
118 ;; var NewClass = Class.create()
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 (defconst js--prototype-obsolete-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 (concat "^\\s-*\\(?:var\\s-+\\)?"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 "\\(" js--dotted-name-re "\\)"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
122 "\\s-*=\\s-*Class\\.create()"))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 (defconst js--prototype-objextend-class-decl-re-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 (concat "^\\s-*Object\\.extend\\s-*("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 "\\s-*,\\s-*{"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 (defconst js--prototype-objextend-class-decl-re-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 (concat "^\\s-*\\(?:var\\s-+\\)?"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 "\\s-*=\\s-*Object\\.extend\\s-*\("))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
134 ;; var NewClass = Class.create({
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (defconst js--prototype-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 (concat "^\\s-*\\(?:var\\s-+\\)?"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 "\\(" js--name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 "\\s-*=\\s-*Class\\.create\\s-*(\\s-*"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
139 "\\(?:\\(" js--dotted-name-re "\\)\\s-*,\\s-*\\)?{?"))
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
140
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
141 ;; Parent class name(s) (yes, multiple inheritance in JavaScript) are
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142 ;; matched with dedicated font-lock matchers
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (defconst js--dojo-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 (concat "^\\s-*dojo\\.declare\\s-*(\"\\(" js--dotted-name-re "\\)"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 (defconst js--extjs-class-decl-re-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 (concat "^\\s-*Ext\\.extend\\s-*("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 "\\s-*\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 "\\s-*,\\s-*\\(" js--dotted-name-re "\\)")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
150 "Regexp matching an ExtJS class declaration (style 1).")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 (defconst js--extjs-class-decl-re-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 (concat "^\\s-*\\(?:var\\s-+\\)?"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154 "\\(" js--name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 "\\s-*=\\s-*Ext\\.extend\\s-*(\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 "\\(" js--dotted-name-re "\\)")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
157 "Regexp matching an ExtJS class declaration (style 2).")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 (defconst js--mochikit-class-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (concat "^\\s-*MochiKit\\.Base\\.update\\s-*(\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 "\\(" js--dotted-name-re "\\)")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
162 "Regexp matching a MochiKit class declaration.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 (defconst js--dummy-class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 '(:name "[Automatically Generated Class]"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 (defconst js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 `((:name "Plain"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 :class-decl ,js--plain-class-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 :prototype t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 :framework javascript)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 (:name "MochiKit"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 :class-decl ,js--mochikit-class-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 :prototype t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 :framework mochikit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (:name "Prototype (Obsolete)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 :class-decl ,js--prototype-obsolete-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 :framework prototype)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 (:name "Prototype (Modern)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 :class-decl ,js--prototype-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 :framework prototype)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 (:name "Prototype (Object.extend)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 :class-decl ,js--prototype-objextend-class-decl-re-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 :prototype t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 :framework prototype)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 (:name "Prototype (Object.extend) 2"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 :class-decl ,js--prototype-objextend-class-decl-re-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 :prototype t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 :framework prototype)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 (:name "Dojo"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 :class-decl ,js--dojo-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 :framework dojo)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (:name "ExtJS (style 1)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 :class-decl ,js--extjs-class-decl-re-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 :prototype t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 :framework extjs)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (:name "ExtJS (style 2)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 :class-decl ,js--extjs-class-decl-re-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 :framework extjs)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (:name "Merrill Press"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 :class-decl ,js--mp-class-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 :contexts (toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 :framework merrillpress))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
223 "List of JavaScript class definition styles.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 A class definition style is a plist with the following keys:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 :name is a human-readable name of the class type
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229 :class-decl is a regular expression giving the start of the
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
230 class. Its first group must match the name of its class. If there
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
231 is a parent class, the second group should match, and it should be
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
232 the name of the class.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 If :prototype is present and non-nil, the parser will merge
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 declarations for this constructs with others at the same lexical
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
236 level that have the same name. Otherwise, multiple definitions
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
237 will create multiple top-level entries. Don't use :prototype
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 unnecessarily: it has an associated cost in performance.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 If :strip-prototype is present and non-nil, then if the class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 name as matched contains
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 (defconst js--available-frameworks
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 (loop with available-frameworks
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 for style in js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 for framework = (plist-get style :framework)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 unless (memq framework available-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 collect framework into available-frameworks
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 finally return available-frameworks)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
251 "List of available JavaScript frameworks symbols.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 (defconst js--function-heading-1-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 "^\\s-*function\\s-+\\(" js--name-re "\\)")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
256 "Regexp matching the start of a JavaScript function header.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
257 Match group 1 is the name of the function.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 (defconst js--function-heading-2-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 "^\\s-*\\(" js--name-re "\\)\\s-*:\\s-*function\\_>")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
262 "Regexp matching the start of a function entry in an associative array.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
263 Match group 1 is the name of the function.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 (defconst js--function-heading-3-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 "^\\s-*\\(?:var\\s-+\\)?\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 "\\s-*=\\s-*function\\_>")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
269 "Regexp matching a line in the JavaScript form \"var MUMBLE = function\".
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
270 Match group 1 is MUMBLE.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 (defconst js--macro-decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273 (concat "^\\s-*#\\s-*define\\s-+\\(" js--cpp-name-re "\\)\\s-*(")
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
274 "Regexp matching a CPP macro definition, up to the opening parenthesis.
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
275 Match group 1 is the name of the macro.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 (defun js--regexp-opt-symbol (list)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
278 "Like `regexp-opt', but surround the result with `\\\\_<' and `\\\\_>'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 (concat "\\_<" (regexp-opt list t) "\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 (defconst js--keyword-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 (js--regexp-opt-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 '("abstract" "break" "case" "catch" "class" "const"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 "continue" "debugger" "default" "delete" "do" "else"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285 "enum" "export" "extends" "final" "finally" "for"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 "function" "goto" "if" "implements" "import" "in"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 "instanceof" "interface" "native" "new" "package"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 "private" "protected" "public" "return" "static"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 "super" "switch" "synchronized" "throw"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 "throws" "transient" "try" "typeof" "var" "void" "let"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 "yield" "volatile" "while" "with"))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
292 "Regexp matching any JavaScript keyword.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 (defconst js--basic-type-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (js--regexp-opt-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 '("boolean" "byte" "char" "double" "float" "int" "long"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 "short" "void"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 "Regular expression matching any predefined type in JavaScript.")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 (defconst js--constant-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 (js--regexp-opt-symbol '("false" "null" "undefined"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 "Infinity" "NaN"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 "true" "arguments" "this"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 "Regular expression matching any future reserved words in JavaScript.")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 (defconst js--font-lock-keywords-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 (list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 "\\_<import\\_>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 (list js--function-heading-1-re 1 font-lock-function-name-face)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 (list js--function-heading-2-re 1 font-lock-function-name-face))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
312 "Level one font lock keywords for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 (defconst js--font-lock-keywords-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 (append js--font-lock-keywords-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 (list (list js--keyword-re 1 font-lock-keyword-face)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 (list "\\_<for\\_>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 "\\s-+\\(each\\)\\_>" nil nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 (list 1 'font-lock-keyword-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 (cons js--basic-type-re font-lock-type-face)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 (cons js--constant-re font-lock-constant-face)))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
322 "Level two font lock keywords for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 ;; js--pitem is the basic building block of the lexical
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 ;; database. When one refers to a real part of the buffer, the region
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 ;; of text to which it refers is split into a conceptual header and
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 ;; body. Consider the (very short) block described by a hypothetical
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 ;; js--pitem:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 ;; function foo(a,b,c) { return 42; }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 ;; ^ ^ ^
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 ;; | | |
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 ;; +- h-begin +- h-end +- b-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 ;; (Remember that these are buffer positions, and therefore point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336 ;; between characters, not at them. An arrow drawn to a character
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
337 ;; indicates the corresponding position is between that character and
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
338 ;; the one immediately preceding it.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
339 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
340 ;; The header is the region of text [h-begin, h-end], and is
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
341 ;; the text needed to unambiguously recognize the start of the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 ;; construct. If the entire header is not present, the construct is
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 ;; not recognized at all. No other pitems may be nested inside the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 ;; header.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 ;; The body is the region [h-end, b-end]. It may contain nested
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 ;; js--pitem instances. The body of a pitem may be empty: in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 ;; that case, b-end is equal to header-end.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 ;; The three points obey the following relationship:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 ;; h-begin < h-end <= b-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 ;; We put a text property in the buffer on the character *before*
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 ;; h-end, and if we see it, on the character *before* b-end.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 ;; The text property for h-end, js--pstate, is actually a list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 ;; of all js--pitem instances open after the marked character.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 ;; The text property for b-end, js--pend, is simply the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 ;; js--pitem that ends after the marked character. (Because
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 ;; pitems always end when the paren-depth drops below a critical
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 ;; value, and because we can only drop one level per character, only
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 ;; one pitem may end at a given character.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 ;; In the structure below, we only store h-begin and (sometimes)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 ;; b-end. We can trivially and quickly find h-end by going to h-begin
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 ;; and searching for an js--pstate text property. Since no other
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 ;; js--pitem instances can be nested inside the header of a
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 ;; pitem, the location after the character with this text property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 ;; must be h-end.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 ;; js--pitem instances are never modified (with the exception
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 ;; of the b-end field). Instead, modified copies are added at subseqnce parse points.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 ;; (The exception for b-end and its caveats is described below.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 (defstruct (js--pitem (:type list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 ;; IMPORTANT: Do not alter the position of fields within the list.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 ;; Various bits of code depend on their positions, particularly
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 ;; anything that manipulates the list of children.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 ;; List of children inside this pitem's body
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 (children nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 ;; When we reach this paren depth after h-end, the pitem ends
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 (paren-depth nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 ;; Symbol or class-style plist if this is a class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 (type nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 ;; See above
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 (h-begin nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 ;; List of strings giving the parts of the name of this pitem (e.g.,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 ;; '("MyClass" "myMethod"), or t if this pitem is anonymous
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (name nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 ;; THIS FIELD IS MUTATED, and its value is shared by all copies of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 ;; this pitem: when we copy-and-modify pitem instances, we share
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 ;; their tail structures, so all the copies actually have the same
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 ;; terminating cons cell. We modify that shared cons cell directly.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 ;; The field value is either a number (buffer location) or nil if
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 ;; unknown.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 ;; If the field's value is greater than `js--cache-end', the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 ;; value is stale and must be treated as if it were nil. Conversely,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 ;; if this field is nil, it is guaranteed that this pitem is open up
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 ;; to at least `js--cache-end'. (This property is handy when
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 ;; computing whether we're inside a given pitem.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 (b-end nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
415 ;; The pitem we start parsing with.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 (defconst js--initial-pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 :paren-depth most-negative-fixnum
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
419 :type 'toplevel))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 ;;; User Customization
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 (defgroup js nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
424 "Customization variables for JavaScript mode."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 :tag "JavaScript"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426 :group 'languages)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428 (defcustom js-indent-level 4
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
429 "Number of spaces for each indentation step in `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 :type 'integer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433 (defcustom js-expr-indent-offset 0
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
434 "Number of additional spaces used for indentation of continued expressions.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
435 The value must be no less than minus `js-indent-level'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 :type 'integer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
438
107692
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
439 (defcustom js-auto-indent-flag t
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
440 "Whether to automatically indent when typing punctuation characters.
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
441 If non-nil, the characters {}();,: also indent the current line
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
442 in Javascript mode."
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
443 :type 'boolean
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
444 :group 'js)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
445
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
446 (defcustom js-flat-functions nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
447 "Treat nested functions as top-level functions in `js-mode'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
448 This applies to function movement, marking, and so on."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 :type 'boolean
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
451
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
452 (defcustom js-comment-lineup-func #'c-lineup-C-comments
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
453 "Lineup function for `cc-mode-style', for C comments in `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
454 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 (defcustom js-enabled-frameworks js--available-frameworks
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
458 "Frameworks recognized by `js-mode'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
459 To improve performance, you may turn off some frameworks you
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
460 seldom use, either globally or on a per-buffer basis."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 :type (cons 'set (mapcar (lambda (x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462 (list 'const x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 js--available-frameworks))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 (defcustom js-js-switch-tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 (and (memq system-type '(darwin)) t)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
468 "Whether `js-mode' should display tabs while selecting them.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
469 This is useful only if the windowing system has a good mechanism
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
470 for preventing Firefox from stealing the keyboard focus."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471 :type 'boolean
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474 (defcustom js-js-tmpdir
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 "~/.emacs.d/js/js"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
476 "Temporary directory used by `js-mode' to communicate with Mozilla.
109258
1df511d197fe Minor js.el fix.
Glenn Morris <rgm@gnu.org>
parents: 108363
diff changeset
477 This directory must be readable and writable by both Mozilla and Emacs."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
478 :type 'directory
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481 (defcustom js-js-timeout 5
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
482 "Reply timeout for executing commands in Mozilla via `js-mode'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
483 The value is given in seconds. Increase this value if you are
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
484 getting timeout messages."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 :type 'integer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
488 ;;; KeyMap
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 (defvar js-mode-map
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 (let ((keymap (make-sparse-keymap)))
107692
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
492 (mapc (lambda (key)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
493 (define-key keymap key #'js-insert-and-indent))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
494 '("{" "}" "(" ")" ":" ";" ","))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 (define-key keymap [(control ?c) (meta ?:)] #'js-eval)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496 (define-key keymap [(control ?c) (control ?j)] #'js-set-js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
497 (define-key keymap [(control meta ?x)] #'js-eval-defun)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
498 (define-key keymap [(meta ?.)] #'js-find-symbol)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
499 (easy-menu-define nil keymap "Javascript Menu"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
500 '("Javascript"
109258
1df511d197fe Minor js.el fix.
Glenn Morris <rgm@gnu.org>
parents: 108363
diff changeset
501 ["Select New Mozilla Context..." js-set-js-context
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502 (fboundp #'inferior-moz-process)]
109258
1df511d197fe Minor js.el fix.
Glenn Morris <rgm@gnu.org>
parents: 108363
diff changeset
503 ["Evaluate Expression in Mozilla Context..." js-eval
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504 (fboundp #'inferior-moz-process)]
109258
1df511d197fe Minor js.el fix.
Glenn Morris <rgm@gnu.org>
parents: 108363
diff changeset
505 ["Send Current Function to Mozilla..." js-eval-defun
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
506 (fboundp #'inferior-moz-process)]))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 keymap)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
508 "Keymap for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509
107692
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
510 (defun js-insert-and-indent (key)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
511 "Run the command bound to KEY, and indent if necessary.
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
512 Indentation does not take place if point is in a string or
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
513 comment."
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
514 (interactive (list (this-command-keys)))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
515 (call-interactively (lookup-key (current-global-map) key))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
516 (let ((syntax (save-restriction (widen) (syntax-ppss))))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
517 (when (or (and (not (nth 8 syntax))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
518 js-auto-indent-flag)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
519 (and (nth 4 syntax)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
520 (eq (current-column)
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
521 (1+ (current-indentation)))))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
522 (indent-according-to-mode))))
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
523
831fbe6bd8c0 Revert 2009-08-15 change, restoring electric punctuation (Bug#5586)
Chong Yidong <cyd@stupidchicken.com>
parents: 106815
diff changeset
524
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 ;;; Syntax table and parsing
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
526
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
527 (defvar js-mode-syntax-table
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
528 (let ((table (make-syntax-table)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529 (c-populate-syntax-table table)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
530 (modify-syntax-entry ?$ "_" table)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
531 table)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
532 "Syntax table for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
533
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 (defvar js--quick-match-re nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
535 "Autogenerated regexp used by `js-mode' to match buffer constructs.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
536
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
537 (defvar js--quick-match-re-func nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
538 "Autogenerated regexp used by `js-mode' to match constructs and functions.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
539
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
540 (make-variable-buffer-local 'js--quick-match-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
541 (make-variable-buffer-local 'js--quick-match-re-func)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
542
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
543 (defvar js--cache-end 1
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
544 "Last valid buffer position for the `js-mode' function cache.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
545 (make-variable-buffer-local 'js--cache-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
546
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
547 (defvar js--last-parse-pos nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
548 "Latest parse position reached by `js--ensure-cache'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
549 (make-variable-buffer-local 'js--last-parse-pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
550
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
551 (defvar js--state-at-last-parse-pos nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
552 "Parse state at `js--last-parse-pos'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
553 (make-variable-buffer-local 'js--state-at-last-parse-pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
554
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
555 (defun js--flatten-list (list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
556 (loop for item in list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
557 nconc (cond ((consp item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
558 (js--flatten-list item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
559 (item (list item)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
560
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
561 (defun js--maybe-join (prefix separator suffix &rest list)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
562 "Helper function for `js--update-quick-match-re'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
563 If LIST contains any element that is not nil, return its non-nil
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
564 elements, separated by SEPARATOR, prefixed by PREFIX, and ended
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
565 with SUFFIX as with `concat'. Otherwise, if LIST is empty, return
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
566 nil. If any element in LIST is itself a list, flatten that
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
567 element."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
568 (setq list (js--flatten-list list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
569 (when list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
570 (concat prefix (mapconcat #'identity list separator) suffix)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
571
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
572 (defun js--update-quick-match-re ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
573 "Internal function used by `js-mode' for caching buffer constructs.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
574 This updates `js--quick-match-re', based on the current set of
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
575 enabled frameworks."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
576 (setq js--quick-match-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
577 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
578 "^[ \t]*\\(?:" "\\|" "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
579
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
580 ;; #define mumble
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
581 "#define[ \t]+[a-zA-Z_]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
582
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
583 (when (memq 'extjs js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
584 "Ext\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
585
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
586 (when (memq 'prototype js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
587 "Object\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
588
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
589 ;; var mumble = THING (
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
590 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
591 "\\(?:var[ \t]+\\)?[a-zA-Z_$0-9.]+[ \t]*=[ \t]*\\(?:"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
592 "\\|"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
593 "\\)[ \t]*\("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
594
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
595 (when (memq 'prototype js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
596 "Class\\.create")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
597
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
598 (when (memq 'extjs js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
599 "Ext\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
600
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
601 (when (memq 'merrillpress js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
602 "[a-zA-Z_$0-9]+\\.extend\\(?:Final\\)?"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
603
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
604 (when (memq 'dojo js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
605 "dojo\\.declare[ \t]*\(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
606
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
607 (when (memq 'mochikit js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
608 "MochiKit\\.Base\\.update[ \t]*\(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
609
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
610 ;; mumble.prototypeTHING
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
611 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
612 "[a-zA-Z_$0-9.]+\\.prototype\\(?:" "\\|" "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
613
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
614 (when (memq 'javascript js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
615 '( ;; foo.prototype.bar = function(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
616 "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*\("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
617
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
618 ;; mumble.prototype = {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
619 "[ \t]*=[ \t]*{")))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
620
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
621 (setq js--quick-match-re-func
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
622 (concat "function\\|" js--quick-match-re)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
623
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
624 (defun js--forward-text-property (propname)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
625 "Move over the next value of PROPNAME in the buffer.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
626 If found, return that value and leave point after the character
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
627 having that value; otherwise, return nil and leave point at EOB."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
628 (let ((next-value (get-text-property (point) propname)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
629 (if next-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
630 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
631
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
632 (goto-char (next-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
633 (point) propname nil (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
634 (unless (eobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
635 (setq next-value (get-text-property (point) propname))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
636 (forward-char)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
637
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
638 next-value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
639
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
640 (defun js--backward-text-property (propname)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
641 "Move over the previous value of PROPNAME in the buffer.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
642 If found, return that value and leave point just before the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
643 character that has that value, otherwise return nil and leave
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
644 point at BOB."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
645 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
646 (let ((prev-value (get-text-property (1- (point)) propname)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
647 (if prev-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
648 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
649
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
650 (goto-char (previous-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
651 (point) propname nil (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
652
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
653 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
654 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
655 (setq prev-value (get-text-property (point) propname))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
656
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
657 prev-value)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
658
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
659 (defsubst js--forward-pstate ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
660 (js--forward-text-property 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
661
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
662 (defsubst js--backward-pstate ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
663 (js--backward-text-property 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
664
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
665 (defun js--pitem-goto-h-end (pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
666 (goto-char (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
667 (js--forward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
668
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
669 (defun js--re-search-forward-inner (regexp &optional bound count)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
670 "Helper function for `js--re-search-forward'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
671 (let ((parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
672 str-terminator
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
673 (orig-macro-end (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
674 (when (js--beginning-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
675 (c-end-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
676 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
677 (while (> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
678 (re-search-forward regexp bound)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
679 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
680 (cond ((setq str-terminator (nth 3 parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
681 (when (eq str-terminator t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
682 (setq str-terminator ?/))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
683 (re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
684 (concat "\\([^\\]\\|^\\)" (string str-terminator))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
685 (save-excursion (end-of-line) (point)) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
686 ((nth 7 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
687 (forward-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
688 ((or (nth 4 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
689 (and (eq (char-before) ?\/) (eq (char-after) ?\*)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
690 (re-search-forward "\\*/"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
691 ((and (not (and orig-macro-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
692 (<= (point) orig-macro-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
693 (js--beginning-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
694 (c-end-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
695 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
696 (setq count (1- count))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
697 (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
698
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
699
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
700 (defun js--re-search-forward (regexp &optional bound noerror count)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
701 "Search forward, ignoring strings, cpp macros, and comments.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
702 This function invokes `re-search-forward', but treats the buffer
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
703 as if strings, cpp macros, and comments have been removed.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
704
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
705 If invoked while inside a macro, it treats the contents of the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
706 macro as normal text."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
707 (let ((saved-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
708 (search-expr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
709 (cond ((null count)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
710 '(js--re-search-forward-inner regexp bound 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
711 ((< count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
712 '(js--re-search-backward-inner regexp bound (- count)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
713 ((> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
714 '(js--re-search-forward-inner regexp bound count)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
715 (condition-case err
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
716 (eval search-expr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
717 (search-failed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
718 (goto-char saved-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
719 (unless noerror
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
720 (error (error-message-string err)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
721
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
722
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
723 (defun js--re-search-backward-inner (regexp &optional bound count)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
724 "Auxiliary function for `js--re-search-backward'."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
725 (let ((parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
726 str-terminator
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
727 (orig-macro-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
728 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
729 (and (js--beginning-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
730 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
731 (while (> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
732 (re-search-backward regexp bound)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
733 (when (and (> (point) (point-min))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
734 (save-excursion (backward-char) (looking-at "/[/*]")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
735 (forward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
736 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
737 (cond ((setq str-terminator (nth 3 parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
738 (when (eq str-terminator t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
739 (setq str-terminator ?/))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
740 (re-search-backward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
741 (concat "\\([^\\]\\|^\\)" (string str-terminator))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
742 (save-excursion (beginning-of-line) (point)) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
743 ((nth 7 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
744 (goto-char (nth 8 parse)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
745 ((or (nth 4 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
746 (and (eq (char-before) ?/) (eq (char-after) ?*)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
747 (re-search-backward "/\\*"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
748 ((and (not (and orig-macro-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
749 (>= (point) orig-macro-start)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
750 (js--beginning-of-macro)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
751 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
752 (setq count (1- count))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
753 (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
754
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
755
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
756 (defun js--re-search-backward (regexp &optional bound noerror count)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
757 "Search backward, ignoring strings, preprocessor macros, and comments.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
758
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
759 This function invokes `re-search-backward' but treats the buffer
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
760 as if strings, preprocessor macros, and comments have been
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
761 removed.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
762
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
763 If invoked while inside a macro, treat the macro as normal text."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
764 (let ((saved-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
765 (search-expr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
766 (cond ((null count)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
767 '(js--re-search-backward-inner regexp bound 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
768 ((< count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
769 '(js--re-search-forward-inner regexp bound (- count)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
770 ((> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
771 '(js--re-search-backward-inner regexp bound count)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
772 (condition-case err
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
773 (eval search-expr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
774 (search-failed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
775 (goto-char saved-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
776 (unless noerror
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
777 (error (error-message-string err)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
778
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
779 (defun js--forward-expression ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
780 "Move forward over a whole JavaScript expression.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
781 This function doesn't move over expressions continued across
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
782 lines."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
783 (loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
784 ;; non-continued case; simplistic, but good enough?
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
785 do (loop until (or (eolp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
786 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
787 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
788 (memq (char-after) '(?\, ?\; ?\] ?\) ?\}))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
789 do (forward-sexp))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
790
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
791 while (and (eq (char-after) ?\n)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
792 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
793 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
794 (js--continued-expression-p)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
795
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
796 (defun js--forward-function-decl ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
797 "Move forward over a JavaScript function declaration.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
798 This puts point at the 'function' keyword.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
799
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
800 If this is a syntactically-correct non-expression function,
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
801 return the name of the function, or t if the name could not be
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
802 determined. Otherwise, return nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
803 (assert (looking-at "\\_<function\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
804 (let ((name t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
805 (forward-word)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
806 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
807 (when (looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
808 (setq name (match-string-no-properties 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
809 (goto-char (match-end 0)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
810 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
811 (and (eq (char-after) ?\( )
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
812 (ignore-errors (forward-list) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
813 (progn (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
814 (and (eq (char-after) ?{)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
815 name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
816
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
817 (defun js--function-prologue-beginning (&optional pos)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
818 "Return the start of the JavaScript function prologue containing POS.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
819 A function prologue is everything from start of the definition up
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
820 to and including the opening brace. POS defaults to point.
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
821 If POS is not in a function prologue, return nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
822 (let (prologue-begin)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
823 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
824 (if pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
825 (goto-char pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
826 (setq pos (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
827
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
828 (when (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
829 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
830 (or (looking-at js--function-heading-2-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
831 (looking-at js--function-heading-3-re)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
832
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
833 (setq prologue-begin (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
834 (when (<= prologue-begin pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
835 (goto-char (match-end 0))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
836
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
837 (skip-syntax-backward "w_")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
838 (and (or (looking-at "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
839 (js--re-search-backward "\\_<function\\_>" nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
840
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
841 (save-match-data (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
842 (js--forward-function-decl))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
843
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
844 (<= pos (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
845 (or prologue-begin (match-beginning 0))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
846
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
847 (defun js--beginning-of-defun-raw ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
848 "Helper function for `js-beginning-of-defun'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
849 Go to previous defun-beginning and return the parse state for it,
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
850 or nil if we went all the way back to bob and don't find
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
851 anything."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
852 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
853 (let (pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
854 (while (and (setq pstate (js--backward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
855 (not (eq 'function (js--pitem-type (car pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
856 (and (not (bobp)) pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
857
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
858 (defun js--pstate-is-toplevel-defun (pstate)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
859 "Helper function for `js--beginning-of-defun-nested'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
860 If PSTATE represents a non-empty top-level defun, return the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
861 top-most pitem. Otherwise, return nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
862 (loop for pitem in pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
863 with func-depth = 0
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
864 with func-pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
865 if (eq 'function (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
866 do (incf func-depth)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
867 and do (setq func-pitem pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
868 finally return (if (eq func-depth 1) func-pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
869
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
870 (defun js--beginning-of-defun-nested ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
871 "Helper function for `js--beginning-of-defun'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
872 Return the pitem of the function we went to the beginning of."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
873 (or
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
874 ;; Look for the smallest function that encloses point...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
875 (loop for pitem in (js--parse-state-at-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
876 if (and (eq 'function (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
877 (js--inside-pitem-p pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
878 do (goto-char (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
879 and return pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
880
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
881 ;; ...and if that isn't found, look for the previous top-level
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
882 ;; defun
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
883 (loop for pstate = (js--backward-pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
884 while pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
885 if (js--pstate-is-toplevel-defun pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
886 do (goto-char (js--pitem-h-begin it))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
887 and return it)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
888
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
889 (defun js--beginning-of-defun-flat ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
890 "Helper function for `js-beginning-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
891 (let ((pstate (js--beginning-of-defun-raw)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
892 (when pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
893 (goto-char (js--pitem-h-begin (car pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
894
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
895 (defun js-beginning-of-defun (&optional arg)
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
896 "Value of `beginning-of-defun-function' for `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
897 (setq arg (or arg 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
898 (while (and (not (eobp)) (< arg 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
899 (incf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
900 (when (and (not js-flat-functions)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
901 (or (eq (js-syntactic-context) 'function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
902 (js--function-prologue-beginning)))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
903 (js-end-of-defun))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
904
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
905 (if (js--re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
906 "\\_<function\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
907 (goto-char (js--function-prologue-beginning))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
908 (goto-char (point-max))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
909
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
910 (while (> arg 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
911 (decf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
912 ;; If we're just past the end of a function, the user probably wants
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
913 ;; to go to the beginning of *that* function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
914 (when (eq (char-before) ?})
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
915 (backward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
916
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
917 (let ((prologue-begin (js--function-prologue-beginning)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
918 (cond ((and prologue-begin (< prologue-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
919 (goto-char prologue-begin))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
920
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
921 (js-flat-functions
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
922 (js--beginning-of-defun-flat))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
923 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
924 (js--beginning-of-defun-nested))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
925
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
926 (defun js--flush-caches (&optional beg ignored)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
927 "Flush the `js-mode' syntax cache after position BEG.
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
928 BEG defaults to `point-min', meaning to flush the entire cache."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
929 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
930 (setq beg (or beg (save-restriction (widen) (point-min))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
931 (setq js--cache-end (min js--cache-end beg)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
932
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
933 (defmacro js--debug (&rest arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
934 ;; `(message ,@arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
935 )
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
936
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
937 (defun js--ensure-cache--pop-if-ended (open-items paren-depth)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
938 (let ((top-item (car open-items)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
939 (when (<= paren-depth (js--pitem-paren-depth top-item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
940 (assert (not (get-text-property (1- (point)) 'js-pend)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
941 (put-text-property (1- (point)) (point) 'js--pend top-item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
942 (setf (js--pitem-b-end top-item) (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
943 (setq open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
944 ;; open-items must contain at least two items for this to
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
945 ;; work, but because we push a dummy item to start with,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
946 ;; that assumption holds.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
947 (cons (js--pitem-add-child (second open-items) top-item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
948 (cddr open-items)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
949 open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
950
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
951 (defmacro js--ensure-cache--update-parse ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
952 "Helper function for `js--ensure-cache'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
953 Update parsing information up to point, referring to parse,
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
954 prev-parse-point, goal-point, and open-items bound lexically in
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
955 the body of `js--ensure-cache'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
956 `(progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
957 (setq goal-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
958 (goto-char prev-parse-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
959 (while (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
960 (setq open-items (js--ensure-cache--pop-if-ended
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
961 open-items (car parse)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
962 ;; Make sure parse-partial-sexp doesn't stop because we *entered*
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
963 ;; the given depth -- i.e., make sure we're deeper than the target
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
964 ;; depth.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
965 (assert (> (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
966 (js--pitem-paren-depth (car open-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
967 (setq parse (parse-partial-sexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
968 prev-parse-point goal-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
969 (js--pitem-paren-depth (car open-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
970 nil parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
971
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
972 ;; (let ((overlay (make-overlay prev-parse-point (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
973 ;; (overlay-put overlay 'face '(:background "red"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
974 ;; (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
975 ;; (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
976 ;; (js--debug "parsed: %S" parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
977 ;; (sit-for 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
978 ;; (delete-overlay overlay)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
979
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
980 (setq prev-parse-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
981 (< (point) goal-point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
982
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
983 (setq open-items (js--ensure-cache--pop-if-ended
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
984 open-items (car parse)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
985
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
986 (defun js--show-cache-at-point ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
987 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
988 (require 'pp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
989 (let ((prop (get-text-property (point) 'js--pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
990 (with-output-to-temp-buffer "*Help*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
991 (pp prop))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
992
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
993 (defun js--split-name (string)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
994 "Split a JavaScript name into its dot-separated parts.
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
995 This also removes any prototype parts from the split name
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
996 \(unless the name is just \"prototype\" to start with)."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
997 (let ((name (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
998 (split-string string "\\." t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
999 (unless (and (= (length name) 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1000 (equal (car name) "prototype"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1001
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1002 (setq name (remove "prototype" name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1003
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1004 (defvar js--guess-function-name-start nil)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1005
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1006 (defun js--guess-function-name (position)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1007 "Guess the name of the JavaScript function at POSITION.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1008 POSITION should be just after the end of the word \"function\".
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1009 Return the name of the function, or nil if the name could not be
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1010 guessed.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1011
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1012 This function clobbers match data. If we find the preamble
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1013 begins earlier than expected while guessing the function name,
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1014 set `js--guess-function-name-start' to that position; otherwise,
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1015 set that variable to nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1016 (setq js--guess-function-name-start nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1017 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1018 (goto-char position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1019 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1020 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1021 ((looking-at js--function-heading-3-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1022 (and (eq (match-end 0) position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1023 (setq js--guess-function-name-start (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1024 (match-string-no-properties 1)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1025
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1026 ((looking-at js--function-heading-2-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1027 (and (eq (match-end 0) position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1028 (setq js--guess-function-name-start (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1029 (match-string-no-properties 1))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1030
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1031 (defun js--clear-stale-cache ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1032 ;; Clear any endings that occur after point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1033 (let (end-prop)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1034 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1035 (while (setq end-prop (js--forward-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1036 'js--pend))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1037 (setf (js--pitem-b-end end-prop) nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1038
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1039 ;; Remove any cache properties after this point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1040 (remove-text-properties (point) (point-max)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1041 '(js--pstate t js--pend t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1042
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1043 (defun js--ensure-cache (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1044 "Ensures brace cache is valid up to the character before LIMIT.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1045 LIMIT defaults to point."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1046 (setq limit (or limit (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1047 (when (< js--cache-end limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1048
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1049 (c-save-buffer-state
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1050 (open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1051 orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1052 orig-match-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1053 orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1054 parse
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1055 prev-parse-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1056 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1057 case-fold-search
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1058 filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1059 new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1060 goal-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1061 end-prop)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1062
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1063 ;; Figure out which class styles we need to look for
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1064 (setq filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1065 (loop for style in js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1066 if (memq (plist-get style :framework)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1067 js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1068 collect style))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1069
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1070 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1071 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1072 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1073
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1074 ;; Find last known good position
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1075 (goto-char js--cache-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1076 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1077 (setq open-items (get-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1078 (1- (point)) 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1079
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1080 (unless open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1081 (goto-char (previous-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1082 (point) 'js--pstate nil (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1083
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1084 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1085 (setq open-items (get-text-property (1- (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1086 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1087 (assert open-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1088
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1089 (unless open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1090 ;; Make a placeholder for the top-level definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1091 (setq open-items (list js--initial-pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1092
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1093 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1094 (setq prev-parse-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1095
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1096 (js--clear-stale-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1097
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1098 (narrow-to-region (point-min) limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1099
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1100 (loop while (re-search-forward js--quick-match-re-func nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1101 for orig-match-start = (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1102 for orig-match-end = (match-end 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1103 do (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1104 for orig-depth = (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1105
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1106 ;; Each of these conditions should return non-nil if
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1107 ;; we should add a new item and leave point at the end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1108 ;; of the new item's header (h-end in the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1109 ;; js--pitem diagram). This point is the one
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1110 ;; after the last character we need to unambiguously
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1111 ;; detect this construct. If one of these evaluates to
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1112 ;; nil, the location of the point is ignored.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1113 if (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1114 ;; In comment or string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1115 ((nth 8 parse) nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1116
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1117 ;; Regular function declaration
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1118 ((and (looking-at "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1119 (setq name (js--forward-function-decl)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1120
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1121 (when (eq name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1122 (setq name (js--guess-function-name orig-match-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1123 (if name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1124 (when js--guess-function-name-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1125 (setq orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1126 js--guess-function-name-start))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1127
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1128 (setq name t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1129
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1130 (assert (eq (char-after) ?{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1131 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1132 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1133 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1134 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1135 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1136 :name (if (eq name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1137 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1138 (js--split-name name))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1139
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1140 ;; Macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1141 ((looking-at js--macro-decl-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1142
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1143 ;; Macros often contain unbalanced parentheses.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1144 ;; Make sure that h-end is at the textual end of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1145 ;; the macro no matter what the parenthesis say.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1146 (c-end-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1147 (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1148
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1149 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1150 :paren-depth (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1151 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1152 :type 'macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1153 :name (list (match-string-no-properties 1))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1154
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1155 ;; "Prototype function" declaration
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1156 ((looking-at js--plain-method-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1157 (goto-char (match-beginning 3))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1158 (when (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1159 (js--forward-function-decl))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1160 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1161 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1162 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1163 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1164 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1165 :name (nconc (js--split-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1166 (match-string-no-properties 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1167 (list (match-string-no-properties 2))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1168
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1169 ;; Class definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1170 ((loop with syntactic-context =
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1171 (js--syntactic-context-from-pstate open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1172 for class-style in filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1173 if (and (memq syntactic-context
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1174 (plist-get class-style :contexts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1175 (looking-at (plist-get class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1176 :class-decl)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1177 do (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1178 and return
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1179 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1180 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1181 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1182 :type class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1183 :name (js--split-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1184 (match-string-no-properties 1))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1185
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1186 do (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1187 and do (push it open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1188 and do (put-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1189 (1- (point)) (point) 'js--pstate open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1190 else do (goto-char orig-match-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1191
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1192 (goto-char limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1193 (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1194 (setq js--cache-end limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1195 (setq js--last-parse-pos limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1196 (setq js--state-at-last-parse-pos open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1197 )))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1198
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1199 (defun js--end-of-defun-flat ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1200 "Helper function for `js-end-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1201 (loop while (js--re-search-forward "}" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1202 do (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1203 if (get-text-property (1- (point)) 'js--pend)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1204 if (eq 'function (js--pitem-type it))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1205 return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1206 finally do (goto-char (point-max))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1207
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1208 (defun js--end-of-defun-nested ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1209 "Helper function for `js-end-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1210 (message "test")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1211 (let* (pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1212 (this-end (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1213 (and (setq pitem (js--beginning-of-defun-nested))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1214 (js--pitem-goto-h-end pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1215 (progn (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1216 (forward-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1217 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1218 found)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1219
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1220 (if (and this-end (< (point) this-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1221 ;; We're already inside a function; just go to its end.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1222 (goto-char this-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1223
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1224 ;; Otherwise, go to the end of the next function...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1225 (while (and (js--re-search-forward "\\_<function\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1226 (not (setq found (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1227 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1228 (js--forward-function-decl))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1229
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1230 (if found (forward-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1231 ;; ... or eob.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1232 (goto-char (point-max))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1233
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1234 (defun js-end-of-defun (&optional arg)
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1235 "Value of `end-of-defun-function' for `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1236 (setq arg (or arg 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1237 (while (and (not (bobp)) (< arg 0))
105076
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1238 (incf arg)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1239 (js-beginning-of-defun)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1240 (js-beginning-of-defun)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1241 (unless (bobp)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1242 (js-end-of-defun)))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1243
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1244 (while (> arg 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1245 (decf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1246 ;; look for function backward. if we're inside it, go to that
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1247 ;; function's end. otherwise, search for the next function's end and
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1248 ;; go there
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1249 (if js-flat-functions
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1250 (js--end-of-defun-flat)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1251
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1252 ;; if we're doing nested functions, see whether we're in the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1253 ;; prologue. If we are, go to the end of the function; otherwise,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1254 ;; call js--end-of-defun-nested to do the real work
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1255 (let ((prologue-begin (js--function-prologue-beginning)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1256 (cond ((and prologue-begin (<= prologue-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1257 (goto-char prologue-begin)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1258 (re-search-forward "\\_<function")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1259 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1260 (js--forward-function-decl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1261 (forward-list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1262
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1263 (t (js--end-of-defun-nested)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1264
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1265 (defun js--beginning-of-macro (&optional lim)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1266 (let ((here (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1267 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1268 (if lim (narrow-to-region lim (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1269 (beginning-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1270 (while (eq (char-before (1- (point))) ?\\)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1271 (forward-line -1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1272 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1273 (if (and (<= (point) here)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1274 (looking-at js--opt-cpp-start))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1275 t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1276 (goto-char here)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1277 nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1278
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1279 (defun js--backward-syntactic-ws (&optional lim)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1280 "Simple implementation of `c-backward-syntactic-ws' for `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1281 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1282 (when lim (narrow-to-region lim (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1283
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1284 (let ((in-macro (save-excursion (js--beginning-of-macro)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1285 (pos (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1286
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1287 (while (progn (unless in-macro (js--beginning-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1288 (forward-comment most-negative-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1289 (/= (point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1290 (prog1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1291 pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1292 (setq pos (point)))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1293
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1294 (defun js--forward-syntactic-ws (&optional lim)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1295 "Simple implementation of `c-forward-syntactic-ws' for `js-mode'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1296 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1297 (when lim (narrow-to-region (point-min) lim))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1298 (let ((pos (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1299 (while (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1300 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1301 (when (eq (char-after) ?#)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1302 (c-end-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1303 (/= (point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1304 (prog1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1305 pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1306 (setq pos (point)))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1307
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1308 ;; Like (up-list -1), but only considers lists that end nearby"
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1309 (defun js--up-nearby-list ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1310 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1311 ;; Look at a very small region so our compuation time doesn't
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1312 ;; explode in pathological cases.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1313 (narrow-to-region (max (point-min) (- (point) 500)) (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1314 (up-list -1)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1315
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1316 (defun js--inside-param-list-p ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1317 "Return non-nil iff point is in a function parameter list."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1318 (ignore-errors
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1319 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1320 (js--up-nearby-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1321 (and (looking-at "(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1322 (progn (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1323 (or (looking-at "function")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1324 (progn (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1325 (looking-at "function"))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1326
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1327 (defun js--inside-dojo-class-list-p ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1328 "Return non-nil iff point is in a Dojo multiple-inheritance class block."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1329 (ignore-errors
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1330 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1331 (js--up-nearby-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1332 (let ((list-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1333 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1334 (and (looking-at js--dojo-class-decl-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1335 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1336 (looking-at "\"\\s-*,\\s-*\\[")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1337 (eq (match-end 0) (1+ list-begin)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1338
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1339 (defun js--syntax-begin-function ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1340 (when (< js--cache-end (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1341 (goto-char (max (point-min) js--cache-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1342
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1343 (let ((pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1344 (while (and (setq pitem (car (js--backward-pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1345 (not (eq 0 (js--pitem-paren-depth pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1346
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1347 (when pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1348 (goto-char (js--pitem-h-begin pitem )))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1349
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1350 ;;; Font Lock
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1351 (defun js--make-framework-matcher (framework &rest regexps)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1352 "Helper function for building `js--font-lock-keywords'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1353 Create a byte-compiled function for matching a concatenation of
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1354 REGEXPS, but only if FRAMEWORK is in `js-enabled-frameworks'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1355 (setq regexps (apply #'concat regexps))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1356 (byte-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1357 `(lambda (limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1358 (when (memq (quote ,framework) js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1359 (re-search-forward ,regexps limit t)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1360
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1361 (defvar js--tmp-location nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1362 (make-variable-buffer-local 'js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1363
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1364 (defun js--forward-destructuring-spec (&optional func)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1365 "Move forward over a JavaScript destructuring spec.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1366 If FUNC is supplied, call it with no arguments before every
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1367 variable name in the spec. Return true iff this was actually a
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1368 spec. FUNC must preserve the match data."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1369 (case (char-after)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1370 (?\[
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1371 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1372 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1373 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1374 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1375 (cond ((memq (char-after) '(?\[ ?\{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1376 (js--forward-destructuring-spec func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1377
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1378 ((eq (char-after) ?,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1379 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1380 t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1381
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1382 ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1383 (and func (funcall func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1384 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1385 t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1386 (when (eq (char-after) ?\])
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1387 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1388 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1389
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1390 (?\{
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1391 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1392 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1393 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1394 (when (looking-at js--objfield-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1395 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1396 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1397 (and (cond ((memq (char-after) '(?\[ ?\{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1398 (js--forward-destructuring-spec func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1399 ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1400 (and func (funcall func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1401 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1402 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1403 (progn (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1404 (when (eq (char-after) ?\,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1405 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1406 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1407 t)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1408 (when (eq (char-after) ?\})
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1409 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1410 t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1411
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1412 (defun js--variable-decl-matcher (limit)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1413 "Font-lock matcher for variable names in a variable declaration.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1414 This is a cc-mode-style matcher that *always* fails, from the
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1415 point of view of font-lock. It applies highlighting directly with
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1416 `font-lock-apply-highlight'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1417 (condition-case nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1418 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1419 (narrow-to-region (point-min) limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1420
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1421 (let ((first t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1422 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1423 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1424 (and (or first
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1425 (when (eq (char-after) ?,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1426 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1427 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1428 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1429 (cond ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1430 (font-lock-apply-highlight
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1431 '(0 font-lock-variable-name-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1432 (goto-char (match-end 0)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1433
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1434 ((save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1435 (js--forward-destructuring-spec))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1436
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1437 (js--forward-destructuring-spec
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1438 (lambda ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1439 (font-lock-apply-highlight
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1440 '(0 font-lock-variable-name-face)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1441
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1442 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1443 (when (eq (char-after) ?=)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1444 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1445 (js--forward-expression)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1446 (forward-comment most-positive-fixnum))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1447
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1448 (setq first nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1449
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1450 ;; Conditions to handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1451 (scan-error nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1452 (end-of-buffer nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1453
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1454 ;; Matcher always "fails"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1455 nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1456
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1457 (defconst js--font-lock-keywords-3
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1458 `(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1459 ;; This goes before keywords-2 so it gets used preferentially
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1460 ;; instead of the keywords in keywords-2. Don't use override
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1461 ;; because that will override syntactic fontification too, which
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1462 ;; will fontify commented-out directives as if they weren't
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1463 ;; commented out.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1464 ,@cpp-font-lock-keywords ; from font-lock.el
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1465
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1466 ,@js--font-lock-keywords-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1467
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1468 ("\\.\\(prototype\\)\\_>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1469 (1 font-lock-constant-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1470
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1471 ;; Highlights class being declared, in parts
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1472 (js--class-decl-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1473 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1474 (goto-char (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1475 nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1476 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1477
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1478 ;; Highlights parent class, in parts, if available
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1479 (js--class-decl-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1480 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1481 (if (match-beginning 2)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1482 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1483 (setq js--tmp-location (match-end 2))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1484 (goto-char js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1485 (insert "=")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1486 (goto-char (match-beginning 2)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1487 (setq js--tmp-location nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1488 (goto-char (point-at-eol)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1489 (when js--tmp-location
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1490 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1491 (goto-char js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1492 (delete-char 1)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1493 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1494
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1495 ;; Highlights parent class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1496 (js--class-decl-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1497 (2 font-lock-type-face nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1498
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1499 ;; Dojo needs its own matcher to override the string highlighting
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1500 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1501 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1502 "^\\s-*dojo\\.declare\\s-*(\""
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1503 "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1504 "\\(?:\"\\s-*,\\s-*\\(" js--dotted-name-re "\\)\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1505 (1 font-lock-type-face t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1506 (2 font-lock-type-face nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1507
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1508 ;; Match Dojo base classes. Of course Mojo has to be different
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1509 ;; from everything else under the sun...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1510 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1511 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1512 "^\\s-*dojo\\.declare\\s-*(\""
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1513 "\\(" js--dotted-name-re "\\)\"\\s-*,\\s-*\\[")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1514 ,(concat "[[,]\\s-*\\(" js--dotted-name-re "\\)\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1515 "\\(?:\\].*$\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1516 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1517 (end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1518 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1519
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1520 ;; continued Dojo base-class list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1521 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1522 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1523 "^\\s-*" js--dotted-name-re "\\s-*[],]")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1524 ,(concat "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1525 "\\s-*\\(?:\\].*$\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1526 (if (save-excursion (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1527 (js--inside-dojo-class-list-p))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1528 (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1529 (end-of-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1530 (end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1531 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1532
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1533 ;; variable declarations
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1534 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1535 (concat "\\_<\\(const\\|var\\|let\\)\\_>\\|" js--basic-type-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1536 (list #'js--variable-decl-matcher nil nil nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1537
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1538 ;; class instantiation
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1539 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1540 (concat "\\_<new\\_>\\s-+\\(" js--dotted-name-re "\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1541 (list 1 'font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1542
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1543 ;; instanceof
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1544 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1545 (concat "\\_<instanceof\\_>\\s-+\\(" js--dotted-name-re "\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1546 (list 1 'font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1547
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1548 ;; formal parameters
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1549 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1550 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1551 "\\_<function\\_>\\(\\s-+" js--name-re "\\)?\\s-*(\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1552 js--name-start-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1553 (list (concat "\\(" js--name-re "\\)\\(\\s-*).*\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1554 '(backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1555 '(end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1556 '(1 font-lock-variable-name-face)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1557
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1558 ;; continued formal parameter list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1559 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1560 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1561 "^\\s-*" js--name-re "\\s-*[,)]")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1562 (list js--name-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1563 '(if (save-excursion (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1564 (js--inside-param-list-p))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1565 (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1566 (end-of-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1567 '(end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1568 '(0 font-lock-variable-name-face))))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1569 "Level three font lock for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1570
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1571 (defun js--inside-pitem-p (pitem)
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1572 "Return whether point is inside the given pitem's header or body."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1573 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1574 (assert (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1575 (assert (js--pitem-paren-depth pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1576
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1577 (and (> (point) (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1578 (or (null (js--pitem-b-end pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1579 (> (js--pitem-b-end pitem) (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1580
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1581 (defun js--parse-state-at-point ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1582 "Parse the JavaScript program state at point.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1583 Return a list of `js--pitem' instances that apply to point, most
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1584 specific first. In the worst case, the current toplevel instance
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1585 will be returned."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1586 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1587 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1588 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1589 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1590 (let* ((bound (if (eobp) (point) (1+ (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1591 (pstate (or (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1592 (js--backward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1593 (list js--initial-pitem))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1594
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1595 ;; Loop until we either hit a pitem at BOB or pitem ends after
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1596 ;; point (or at point if we're at eob)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1597 (loop for pitem = (car pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1598 until (or (eq (js--pitem-type pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1599 'toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1600 (js--inside-pitem-p pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1601 do (pop pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1602
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1603 pstate))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1604
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1605 (defun js--syntactic-context-from-pstate (pstate)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1606 "Return the JavaScript syntactic context corresponding to PSTATE."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1607 (let ((type (js--pitem-type (car pstate))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1608 (cond ((memq type '(function macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1609 type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1610 ((consp type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1611 'class)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1612 (t 'toplevel))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1613
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1614 (defun js-syntactic-context ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1615 "Return the JavaScript syntactic context at point.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1616 When called interatively, also display a message with that
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1617 context."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1618 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1619 (let* ((syntactic-context (js--syntactic-context-from-pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1620 (js--parse-state-at-point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1621
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105076
diff changeset
1622 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1623 (message "Syntactic context: %s" syntactic-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1624
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1625 syntactic-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1626
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1627 (defun js--class-decl-matcher (limit)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1628 "Font lock function used by `js-mode'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1629 This performs fontification according to `js--class-styles'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1630 (loop initially (js--ensure-cache limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1631 while (re-search-forward js--quick-match-re limit t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1632 for orig-end = (match-end 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1633 do (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1634 if (loop for style in js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1635 for decl-re = (plist-get style :class-decl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1636 if (and (memq (plist-get style :framework)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1637 js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1638 (memq (js-syntactic-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1639 (plist-get style :contexts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1640 decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1641 (looking-at decl-re))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1642 do (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1643 and return t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1644 return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1645 else do (goto-char orig-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1646
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1647 (defconst js--font-lock-keywords
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1648 '(js--font-lock-keywords-3 js--font-lock-keywords-1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1649 js--font-lock-keywords-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1650 js--font-lock-keywords-3)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1651 "Font lock keywords for `js-mode'. See `font-lock-keywords'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1652
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1653 ;; XXX: Javascript can continue a regexp literal across lines so long
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1654 ;; as the newline is escaped with \. Account for that in the regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1655 ;; below.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1656 (defconst js--regexp-literal
112420
f7f90410cc52 * lisp/progmodes/js.el (js--regexp-literal): Count backslashes.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 112218
diff changeset
1657 "[=(,:]\\(?:\\s-\\|\n\\)*\\(/\\)\\(?:\\\\.\\|[^/*\\]\\)\\(?:\\\\.\\|[^/\\]\\)*\\(/\\)"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1658 "Regexp matching a JavaScript regular expression literal.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1659 Match groups 1 and 2 are the characters forming the beginning and
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1660 end of the literal.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1661
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1662 ;; we want to match regular expressions only at the beginning of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1663 ;; expressions
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1664 (defconst js-font-lock-syntactic-keywords
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1665 `((,js--regexp-literal (1 "|") (2 "|")))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1666 "Syntactic font lock keywords matching regexps in JavaScript.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1667 See `font-lock-keywords'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1668
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1669 ;;; Indentation
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1670
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1671 (defconst js--possibly-braceless-keyword-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1672 (js--regexp-opt-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1673 '("catch" "do" "else" "finally" "for" "if" "try" "while" "with"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1674 "each"))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1675 "Regexp matching keywords optionally followed by an opening brace.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1676
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1677 (defconst js--indent-operator-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1678 (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1679 (js--regexp-opt-symbol '("in" "instanceof")))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1680 "Regexp matching operators that affect indentation of continued expressions.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1681
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1682
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1683 (defun js--looking-at-operator-p ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1684 "Return non-nil if point is on a JavaScript operator, other than a comma."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1685 (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1686 (and (looking-at js--indent-operator-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1687 (or (not (looking-at ":"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1688 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1689 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1690 (looking-at "?")))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1691
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1692
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1693 (defun js--continued-expression-p ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1694 "Return non-nil if the current line continues an expression."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1695 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1696 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1697 (or (js--looking-at-operator-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1698 (and (js--re-search-backward "\n" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1699 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1700 (skip-chars-backward " \t")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1701 (or (bobp) (backward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1702 (and (> (point) (point-min))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1703 (save-excursion (backward-char) (not (looking-at "[/*]/")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1704 (js--looking-at-operator-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1705 (and (progn (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1706 (not (looking-at "++\\|--\\|/[/*]"))))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1707
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1708
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1709 (defun js--end-of-do-while-loop-p ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1710 "Return non-nil if point is on the \"while\" of a do-while statement.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1711 Otherwise, return nil. A braceless do-while statement spanning
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1712 several lines requires that the start of the loop is indented to
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1713 the same column as the current line."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1714 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1715 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1716 (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1717 (when (looking-at "\\s-*\\_<while\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1718 (if (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1719 (skip-chars-backward "[ \t\n]*}")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1720 (looking-at "[ \t\n]*}"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1721 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1722 (backward-list) (forward-symbol -1) (looking-at "\\_<do\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1723 (js--re-search-backward "\\_<do\\_>" (point-at-bol) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1724 (or (looking-at "\\_<do\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1725 (let ((saved-indent (current-indentation)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1726 (while (and (js--re-search-backward "^\\s-*\\_<" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1727 (/= (current-indentation) saved-indent)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1728 (and (looking-at "\\s-*\\_<do\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1729 (not (js--re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1730 "\\_<while\\_>" (point-at-eol) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1731 (= (current-indentation) saved-indent)))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1732
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1733
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1734 (defun js--ctrl-statement-indentation ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1735 "Helper function for `js--proper-indentation'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1736 Return the proper indentation of the current line if it starts
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1737 the body of a control statement without braces; otherwise, return
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1738 nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1739 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1740 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1741 (when (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1742 (and (not (eq (point-at-bol) (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1743 (not (looking-at "[{]"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1744 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1745 (js--re-search-backward "[[:graph:]]" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1746 (or (eobp) (forward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1747 (when (= (char-before) ?\)) (backward-list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1748 (skip-syntax-backward " ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1749 (skip-syntax-backward "w_")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1750 (looking-at js--possibly-braceless-keyword-re))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1751 (not (js--end-of-do-while-loop-p))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1752 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1753 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1754 (+ (current-indentation) js-indent-level)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1755
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1756 (defun js--get-c-offset (symbol anchor)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1757 (let ((c-offsets-alist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1758 (list (cons 'c js-comment-lineup-func))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1759 (c-get-syntactic-indentation (list (cons symbol anchor)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1760
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1761 (defun js--proper-indentation (parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1762 "Return the proper indentation for the current line."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1763 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1764 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1765 (cond ((nth 4 parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1766 (js--get-c-offset 'c (nth 8 parse-status)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1767 ((nth 8 parse-status) 0) ; inside string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1768 ((js--ctrl-statement-indentation))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1769 ((eq (char-after) ?#) 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1770 ((save-excursion (js--beginning-of-macro)) 4)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1771 ((nth 1 parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1772 (let ((same-indent-p (looking-at
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1773 "[]})]\\|\\_<case\\_>\\|\\_<default\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1774 (continued-expr-p (js--continued-expression-p)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1775 (goto-char (nth 1 parse-status))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1776 (if (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1777 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1778 (skip-syntax-backward " ")
104966
754f505b6d27 * progmodes/js.el (js--proper-indentation): Handle the case where
Chong Yidong <cyd@stupidchicken.com>
parents: 104683
diff changeset
1779 (when (eq (char-before) ?\)) (backward-list))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1780 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1781 (cond (same-indent-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1782 (current-column))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1783 (continued-expr-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1784 (+ (current-column) (* 2 js-indent-level)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1785 js-expr-indent-offset))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1786 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1787 (+ (current-column) js-indent-level))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1788 (unless same-indent-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1789 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1790 (skip-chars-forward " \t"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1791 (current-column))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1792
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1793 ((js--continued-expression-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1794 (+ js-indent-level js-expr-indent-offset))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1795 (t 0))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1796
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1797 (defun js-indent-line ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1798 "Indent the current line as JavaScript."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1799 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1800 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1801 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1802 (let* ((parse-status
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1803 (save-excursion (syntax-ppss (point-at-bol))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1804 (offset (- (current-column) (current-indentation))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1805 (indent-line-to (js--proper-indentation parse-status))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1806 (when (> offset 0) (forward-char offset)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1807
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1808 ;;; Filling
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1809
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1810 (defun js-c-fill-paragraph (&optional justify)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1811 "Fill the paragraph with `c-fill-paragraph'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1812 (interactive "*P")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1813 (flet ((c-forward-sws
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1814 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1815 (js--forward-syntactic-ws limit))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1816 (c-backward-sws
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1817 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1818 (js--backward-syntactic-ws limit))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1819 (c-beginning-of-macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1820 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1821 (js--beginning-of-macro limit)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1822 (let ((fill-paragraph-function 'c-fill-paragraph))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1823 (c-fill-paragraph justify))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1824
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1825 ;;; Type database and Imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1826
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1827 ;; We maintain a cache of semantic information, i.e., the classes and
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1828 ;; functions we've encountered so far. In order to avoid having to
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1829 ;; re-parse the buffer on every change, we cache the parse state at
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1830 ;; each interesting point in the buffer. Each parse state is a
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1831 ;; modified copy of the previous one, or in the case of the first
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1832 ;; parse state, the empty state.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1833 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1834 ;; The parse state itself is just a stack of js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1835 ;; instances. It starts off containing one element that is never
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1836 ;; closed, that is initially js--initial-pitem.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1837 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1838
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1839
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1840 (defun js--pitem-format (pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1841 (let ((name (js--pitem-name pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1842 (type (js--pitem-type pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1843
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1844 (format "name:%S type:%S"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1845 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1846 (if (atom type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1847 type
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1848 (plist-get type :name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1849
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1850 (defun js--make-merged-item (item child name-parts)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1851 "Helper function for `js--splice-into-items'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1852 Return a new item that is the result of merging CHILD into
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1853 ITEM. NAME-PARTS is a list of parts of the name of CHILD
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1854 that we haven't consumed yet."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1855 (js--debug "js--make-merged-item: {%s} into {%s}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1856 (js--pitem-format child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1857 (js--pitem-format item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1858
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1859 ;; If the item we're merging into isn't a class, make it into one
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1860 (unless (consp (js--pitem-type item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1861 (js--debug "js--make-merged-item: changing dest into class")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1862 (setq item (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1863 :children (list item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1864
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1865 ;; Use the child's class-style if it's available
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1866 :type (if (atom (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1867 js--dummy-class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1868 (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1869
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1870 :name (js--pitem-strname item))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1871
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1872 ;; Now we can merge either a function or a class into a class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1873 (cons (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1874 ((cdr name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1875 (js--debug "js--make-merged-item: recursing")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1876 ;; if we have more name-parts to go before we get to the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1877 ;; bottom of the class hierarchy, call the merger
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1878 ;; recursively
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1879 (js--splice-into-items (car item) child
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1880 (cdr name-parts)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1881
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1882 ((atom (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1883 (js--debug "js--make-merged-item: straight merge")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1884 ;; Not merging a class, but something else, so just prepend
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1885 ;; it
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1886 (cons child (car item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1887
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1888 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1889 ;; Otherwise, merge the new child's items into those
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1890 ;; of the new class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1891 (js--debug "js--make-merged-item: merging class contents")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1892 (append (car child) (car item))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1893 (cdr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1894
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1895 (defun js--pitem-strname (pitem)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1896 "Last part of the name of PITEM, as a string or symbol."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1897 (let ((name (js--pitem-name pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1898 (if (consp name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1899 (car (last name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1900 name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1901
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1902 (defun js--splice-into-items (items child name-parts)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1903 "Splice CHILD into the `js--pitem' ITEMS at NAME-PARTS.
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1904 If a class doesn't exist in the tree, create it. Return
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1905 the new items list. NAME-PARTS is a list of strings given
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
1906 the broken-down class name of the item to insert."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1907
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1908 (let ((top-name (car name-parts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1909 (item-ptr items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1910 new-items last-new-item new-cons item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1911
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1912 (js--debug "js--splice-into-items: name-parts: %S items:%S"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1913 name-parts
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1914 (mapcar #'js--pitem-name items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1915
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1916 (assert (stringp top-name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1917 (assert (> (length top-name) 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1918
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1919 ;; If top-name isn't found in items, then we build a copy of items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1920 ;; and throw it away. But that's okay, since most of the time, we
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1921 ;; *will* find an instance.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1922
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1923 (while (and item-ptr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1924 (cond ((equal (js--pitem-strname (car item-ptr)) top-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1925 ;; Okay, we found an entry with the right name. Splice
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1926 ;; the merged item into the list...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1927 (setq new-cons (cons (js--make-merged-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1928 (car item-ptr) child
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1929 name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1930 (cdr item-ptr)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1931
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1932 (if last-new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1933 (setcdr last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1934 (setq new-items new-cons))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1935
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1936 ;; ...and terminate the loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1937 nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1938
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1939 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1940 ;; Otherwise, copy the current cons and move onto the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1941 ;; text. This is tricky; we keep track of the tail of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1942 ;; the list that begins with new-items in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1943 ;; last-new-item.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1944 (setq new-cons (cons (car item-ptr) nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1945 (if last-new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1946 (setcdr last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1947 (setq new-items new-cons))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1948 (setq last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1949
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1950 ;; Go to the next cell in items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1951 (setq item-ptr (cdr item-ptr))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1952
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1953 (if item-ptr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1954 ;; Yay! We stopped because we found something, not because
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1955 ;; we ran out of items to search. Just return the new
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1956 ;; list.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1957 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1958 (js--debug "search succeeded: %S" name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1959 new-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1960
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1961 ;; We didn't find anything. If the child is a class and we don't
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1962 ;; have any classes to drill down into, just push that class;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1963 ;; otherwise, make a fake class and carry on.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1964 (js--debug "search failed: %S" name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1965 (cons (if (cdr name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1966 ;; We have name-parts left to process. Make a fake
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1967 ;; class for this particular part...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1968 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1969 ;; ...and recursively digest the rest of the name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1970 :children (js--splice-into-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1971 nil child (cdr name-parts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1972 :type js--dummy-class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1973 :name top-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1974
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1975 ;; Otherwise, this is the only name we have, so stick
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1976 ;; the item on the front of the list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1977 child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1978 items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1979
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1980 (defun js--pitem-add-child (pitem child)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1981 "Copy `js--pitem' PITEM, and push CHILD onto its list of children."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1982 (assert (integerp (js--pitem-h-begin child)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1983 (assert (if (consp (js--pitem-name child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1984 (loop for part in (js--pitem-name child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1985 always (stringp part))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1986 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1987
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1988 ;; This trick works because we know (based on our defstructs) that
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1989 ;; the child list is always the first element, and so the second
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1990 ;; element and beyond can be shared when we make our "copy".
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1991 (cons
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1992
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1993 (let ((name (js--pitem-name child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1994 (type (js--pitem-type child)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1995
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1996 (cond ((cdr-safe name) ; true if a list of at least two elements
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1997 ;; Use slow path because we need class lookup
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1998 (js--splice-into-items (car pitem) child name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1999
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2000 ((and (consp type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2001 (plist-get type :prototype))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2002
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2003 ;; Use slow path because we need class merging. We know
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2004 ;; name is a list here because down in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2005 ;; `js--ensure-cache', we made sure to only add
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2006 ;; class entries with lists for :name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2007 (assert (consp name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2008 (js--splice-into-items (car pitem) child name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2009
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2010 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2011 ;; Fast path
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2012 (cons child (car pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2013
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2014 (cdr pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2015
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2016 (defun js--maybe-make-marker (location)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2017 "Return a marker for LOCATION if `imenu-use-markers' is non-nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2018 (if imenu-use-markers
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2019 (set-marker (make-marker) location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2020 location))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2021
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2022 (defun js--pitems-to-imenu (pitems unknown-ctr)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2023 "Convert PITEMS, a list of `js--pitem' structures, to imenu format."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2024
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2025 (let (imenu-items pitem pitem-type pitem-name subitems)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2026
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2027 (while (setq pitem (pop pitems))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2028 (setq pitem-type (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2029 (setq pitem-name (js--pitem-strname pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2030 (when (eq pitem-name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2031 (setq pitem-name (format "[unknown %s]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2032 (incf (car unknown-ctr)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2033
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2034 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2035 ((memq pitem-type '(function macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2036 (assert (integerp (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2037 (push (cons pitem-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2038 (js--maybe-make-marker
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2039 (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2040 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2041
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2042 ((consp pitem-type) ; class definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2043 (setq subitems (js--pitems-to-imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2044 (js--pitem-children pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2045 unknown-ctr))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2046 (cond (subitems
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2047 (push (cons pitem-name subitems)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2048 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2049
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2050 ((js--pitem-h-begin pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2051 (assert (integerp (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2052 (setq subitems (list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2053 (cons "[empty]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2054 (js--maybe-make-marker
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2055 (js--pitem-h-begin pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2056 (push (cons pitem-name subitems)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2057 imenu-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2058
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2059 (t (error "Unknown item type: %S" pitem-type))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2060
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2061 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2062
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2063 (defun js--imenu-create-index ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2064 "Return an imenu index for the current buffer."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2065 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2066 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2067 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2068 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2069 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2070 (assert (or (= (point-min) (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2071 (eq js--last-parse-pos (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2072 (when js--last-parse-pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2073 (let ((state js--state-at-last-parse-pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2074 (unknown-ctr (cons -1 nil)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2075
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2076 ;; Make sure everything is closed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2077 (while (cdr state)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2078 (setq state
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2079 (cons (js--pitem-add-child (second state) (car state))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2080 (cddr state))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2081
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2082 (assert (= (length state) 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2083
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2084 ;; Convert the new-finalized state into what imenu expects
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2085 (js--pitems-to-imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2086 (car (js--pitem-children state))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2087 unknown-ctr))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2088
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2089 ;; Silence the compiler.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2090 (defvar which-func-imenu-joiner-function)
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2091
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2092 (defun js--which-func-joiner (parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2093 (mapconcat #'identity parts "."))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2094
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2095 (defun js--imenu-to-flat (items prefix symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2096 (loop for item in items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2097 if (imenu--subalist-p item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2098 do (js--imenu-to-flat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2099 (cdr item) (concat prefix (car item) ".")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2100 symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2101 else
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2102 do (let* ((name (concat prefix (car item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2103 (name2 name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2104 (ctr 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2105
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2106 (while (gethash name2 symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2107 (setq name2 (format "%s<%d>" name (incf ctr))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2108
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2109 (puthash name2 (cdr item) symbols))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2110
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2111 (defun js--get-all-known-symbols ()
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2112 "Return a hash table of all JavaScript symbols.
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2113 This searches all existing `js-mode' buffers. Each key is the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2114 name of a symbol (possibly disambiguated with <N>, where N > 1),
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2115 and each value is a marker giving the location of that symbol."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2116 (loop with symbols = (make-hash-table :test 'equal)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2117 with imenu-use-markers = t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2118 for buffer being the buffers
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2119 for imenu-index = (with-current-buffer buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2120 (when (eq major-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2121 (js--imenu-create-index)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2122 do (js--imenu-to-flat imenu-index "" symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2123 finally return symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2124
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2125 (defvar js--symbol-history nil
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2126 "History of entered JavaScript symbols.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2127
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2128 (defun js--read-symbol (symbols-table prompt &optional initial-input)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2129 "Helper function for `js-find-symbol'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2130 Read a symbol from SYMBOLS-TABLE, which is a hash table like the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2131 one from `js--get-all-known-symbols', using prompt PROMPT and
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2132 initial input INITIAL-INPUT. Return a cons of (SYMBOL-NAME
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2133 . LOCATION), where SYMBOL-NAME is a string and LOCATION is a
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2134 marker."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2135 (unless ido-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2136 (ido-mode t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2137 (ido-mode nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2138
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2139 (let ((choice (ido-completing-read
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2140 prompt
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2141 (loop for key being the hash-keys of symbols-table
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2142 collect key)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2143 nil t initial-input 'js--symbol-history)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2144 (cons choice (gethash choice symbols-table))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2145
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2146 (defun js--guess-symbol-at-point ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2147 (let ((bounds (bounds-of-thing-at-point 'symbol)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2148 (when bounds
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2149 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2150 (goto-char (car bounds))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2151 (when (eq (char-before) ?.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2152 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2153 (setf (car bounds) (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2154 (buffer-substring (car bounds) (cdr bounds)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2155
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2156 (defun js-find-symbol (&optional arg)
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2157 "Read a JavaScript symbol and jump to it.
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2158 With a prefix argument, restrict symbols to those from the
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2159 current buffer. Pushes a mark onto the tag ring just like
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2160 `find-tag'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2161 (interactive "P")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2162 (let (symbols marker)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2163 (if (not arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2164 (setq symbols (js--get-all-known-symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2165 (setq symbols (make-hash-table :test 'equal))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2166 (js--imenu-to-flat (js--imenu-create-index)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2167 "" symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2168
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2169 (setq marker (cdr (js--read-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2170 symbols "Jump to: "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2171 (js--guess-symbol-at-point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2172
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2173 (ring-insert find-tag-marker-ring (point-marker))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2174 (switch-to-buffer (marker-buffer marker))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2175 (push-mark)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2176 (goto-char marker)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2177
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2178 ;;; MozRepl integration
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2179
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2180 (put 'js-moz-bad-rpc 'error-conditions '(error timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2181 (put 'js-moz-bad-rpc 'error-message "Mozilla RPC Error")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2182
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2183 (put 'js-js-error 'error-conditions '(error js-error))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2184 (put 'js-js-error 'error-message "Javascript Error")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2185
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2186 (defun js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2187 (process regexp timeout &optional start)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2188 "Wait TIMEOUT seconds for PROCESS to output a match for REGEXP.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2189 On timeout, return nil. On success, return t with match data
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2190 set. If START is non-nil, look for output starting from START.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2191 Otherwise, use the current value of `process-mark'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2192 (with-current-buffer (process-buffer process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2193 (loop with start-pos = (or start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2194 (marker-position (process-mark process)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2195 with end-time = (+ (float-time) timeout)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2196 for time-left = (- end-time (float-time))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2197 do (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2198 if (looking-back regexp start-pos) return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2199 while (> time-left 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2200 do (accept-process-output process time-left nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2201 do (goto-char (process-mark process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2202 finally do (signal
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2203 'js-moz-bad-rpc
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2204 (list (format "Timed out waiting for output matching %S" regexp))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2205
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2206 (defstruct js--js-handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2207 ;; Integer, mirrors the value we see in JS
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2208 (id nil :read-only t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2209
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2210 ;; Process to which this thing belongs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2211 (process nil :read-only t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2212
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2213 (defun js--js-handle-expired-p (x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2214 (not (eq (js--js-handle-process x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2215 (inferior-moz-process))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2216
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2217 (defvar js--js-references nil
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2218 "Maps Elisp JavaScript proxy objects to their JavaScript IDs.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2219
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2220 (defvar js--js-process nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2221 "The most recent MozRepl process object.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2222
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2223 (defvar js--js-gc-idle-timer nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2224 "Idle timer for cleaning up JS object references.")
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2225
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2226 (defvar js--js-last-gcs-done nil)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2227
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2228 (defconst js--moz-interactor
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2229 (replace-regexp-in-string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2230 "[ \n]+" " "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2231 ; */" Make Emacs happy
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2232 "(function(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2233 repl.defineInteractor('js', {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2234 onStart: function onStart(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2235 if(!repl._jsObjects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2236 repl._jsObjects = {};
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2237 repl._jsLastID = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2238 repl._jsGC = this._jsGC;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2239 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2240 this._input = '';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2241 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2242
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2243 _jsGC: function _jsGC(ids_in_use) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2244 var objects = this._jsObjects;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2245 var keys = [];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2246 var num_freed = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2247
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2248 for(var pn in objects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2249 keys.push(Number(pn));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2250 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2251
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2252 keys.sort(function(x, y) x - y);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2253 ids_in_use.sort(function(x, y) x - y);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2254 var i = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2255 var j = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2256
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2257 while(i < ids_in_use.length && j < keys.length) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2258 var id = ids_in_use[i++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2259 while(j < keys.length && keys[j] !== id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2260 var k_id = keys[j++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2261 delete objects[k_id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2262 ++num_freed;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2263 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2264 ++j;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2265 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2266
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2267 while(j < keys.length) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2268 var k_id = keys[j++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2269 delete objects[k_id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2270 ++num_freed;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2271 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2273 return num_freed;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2274 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2275
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2276 _mkArray: function _mkArray() {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2277 var result = [];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2278 for(var i = 0; i < arguments.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2279 result.push(arguments[i]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2280 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2281 return result;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2282 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2283
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2284 _parsePropDescriptor: function _parsePropDescriptor(parts) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2285 if(typeof parts === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2286 parts = [ parts ];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2287 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2288
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2289 var obj = parts[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2290 var start = 1;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2291
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2292 if(typeof obj === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2293 obj = window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2294 start = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2295 } else if(parts.length < 2) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2296 throw new Error('expected at least 2 arguments');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2297 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2298
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2299 for(var i = start; i < parts.length - 1; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2300 obj = obj[parts[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2301 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2302
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2303 return [obj, parts[parts.length - 1]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2304 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2305
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2306 _getProp: function _getProp(/*...*/) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2307 if(arguments.length === 0) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2308 throw new Error('no arguments supplied to getprop');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2309 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2310
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2311 if(arguments.length === 1 &&
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2312 (typeof arguments[0]) !== 'string')
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2313 {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2314 return arguments[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2315 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2316
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2317 var [obj, propname] = this._parsePropDescriptor(arguments);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2318 return obj[propname];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2319 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2320
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2321 _putProp: function _putProp(properties, value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2322 var [obj, propname] = this._parsePropDescriptor(properties);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2323 obj[propname] = value;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2324 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2325
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2326 _delProp: function _delProp(propname) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2327 var [obj, propname] = this._parsePropDescriptor(arguments);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2328 delete obj[propname];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2329 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2330
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2331 _typeOf: function _typeOf(thing) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2332 return typeof thing;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2333 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2334
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2335 _callNew: function(constructor) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2336 if(typeof constructor === 'string')
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2337 {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2338 constructor = window[constructor];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2339 } else if(constructor.length === 1 &&
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2340 typeof constructor[0] !== 'string')
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2341 {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2342 constructor = constructor[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2343 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2344 var [obj,propname] = this._parsePropDescriptor(constructor);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2345 constructor = obj[propname];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2346 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2347
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2348 /* Hacky, but should be robust */
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2349 var s = 'new constructor(';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2350 for(var i = 1; i < arguments.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2351 if(i != 1) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2352 s += ',';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2353 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2354
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2355 s += 'arguments[' + i + ']';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2356 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2357
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2358 s += ')';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2359 return eval(s);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2360 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2361
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2362 _callEval: function(thisobj, js) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2363 return eval.call(thisobj, js);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2364 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2365
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2366 getPrompt: function getPrompt(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2367 return 'EVAL>'
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2368 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2369
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2370 _lookupObject: function _lookupObject(repl, id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2371 if(typeof id === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2372 switch(id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2373 case 'global':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2374 return window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2375 case 'nil':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2376 return null;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2377 case 't':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2378 return true;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2379 case 'false':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2380 return false;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2381 case 'undefined':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2382 return undefined;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2383 case 'repl':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2384 return repl;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2385 case 'interactor':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2386 return this;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2387 case 'NaN':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2388 return NaN;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2389 case 'Infinity':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2390 return Infinity;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2391 case '-Infinity':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2392 return -Infinity;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2393 default:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2394 throw new Error('No object with special id:' + id);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2395 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2396 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2397
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2398 var ret = repl._jsObjects[id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2399 if(ret === undefined) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2400 throw new Error('No object with id:' + id + '(' + typeof id + ')');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2401 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2402 return ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2403 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2404
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2405 _findOrAllocateObject: function _findOrAllocateObject(repl, value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2406 if(typeof value !== 'object' && typeof value !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2407 throw new Error('_findOrAllocateObject called on non-object('
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2408 + typeof(value) + '): '
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2409 + value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2410 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2411
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2412 for(var id in repl._jsObjects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2413 id = Number(id);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2414 var obj = repl._jsObjects[id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2415 if(obj === value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2416 return id;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2417 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2418 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2419
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2420 var id = ++repl._jsLastID;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2421 repl._jsObjects[id] = value;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2422 return id;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2423 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2424
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2425 _fixupList: function _fixupList(repl, list) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2426 for(var i = 0; i < list.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2427 if(list[i] instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2428 this._fixupList(repl, list[i]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2429 } else if(typeof list[i] === 'object') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2430 var obj = list[i];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2431 if(obj.funcall) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2432 var parts = obj.funcall;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2433 this._fixupList(repl, parts);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2434 var [thisobj, func] = this._parseFunc(parts[0]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2435 list[i] = func.apply(thisobj, parts.slice(1));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2436 } else if(obj.objid) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2437 list[i] = this._lookupObject(repl, obj.objid);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2438 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2439 throw new Error('Unknown object type: ' + obj.toSource());
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2440 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2441 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2442 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2443 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2444
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2445 _parseFunc: function(func) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2446 var thisobj = null;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2447
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2448 if(typeof func === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2449 func = window[func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2450 } else if(func instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2451 if(func.length === 1 && typeof func[0] !== 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2452 func = func[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2453 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2454 [thisobj, func] = this._parsePropDescriptor(func);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2455 func = thisobj[func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2456 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2457 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2458
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2459 return [thisobj,func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2460 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2461
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2462 _encodeReturn: function(value, array_as_mv) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2463 var ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2464
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2465 if(value === null) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2466 ret = ['special', 'null'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2467 } else if(value === true) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2468 ret = ['special', 'true'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2469 } else if(value === false) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2470 ret = ['special', 'false'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2471 } else if(value === undefined) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2472 ret = ['special', 'undefined'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2473 } else if(typeof value === 'number') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2474 if(isNaN(value)) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2475 ret = ['special', 'NaN'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2476 } else if(value === Infinity) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2477 ret = ['special', 'Infinity'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2478 } else if(value === -Infinity) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2479 ret = ['special', '-Infinity'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2480 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2481 ret = ['atom', value];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2482 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2483 } else if(typeof value === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2484 ret = ['atom', value];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2485 } else if(array_as_mv && value instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2486 ret = ['array', value.map(this._encodeReturn, this)];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2487 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2488 ret = ['objid', this._findOrAllocateObject(repl, value)];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2489 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2490
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2491 return ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2492 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2493
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2494 _handleInputLine: function _handleInputLine(repl, line) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2495 var ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2496 var array_as_mv = false;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2497
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2498 try {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2499 if(line[0] === '*') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2500 array_as_mv = true;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2501 line = line.substring(1);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2502 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2503 var parts = eval(line);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2504 this._fixupList(repl, parts);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2505 var [thisobj, func] = this._parseFunc(parts[0]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2506 ret = this._encodeReturn(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2507 func.apply(thisobj, parts.slice(1)),
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2508 array_as_mv);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2509 } catch(x) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2510 ret = ['error', x.toString() ];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2511 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2512
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2513 var JSON = Components.classes['@mozilla.org/dom/json;1'].createInstance(Components.interfaces.nsIJSON);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2514 repl.print(JSON.encode(ret));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2515 repl._prompt();
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2516 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2517
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2518 handleInput: function handleInput(repl, chunk) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2519 this._input += chunk;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2520 var match, line;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2521 while(match = this._input.match(/.*\\n/)) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2522 line = match[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2523
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2524 if(line === 'EXIT\\n') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2525 repl.popInteractor();
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2526 repl._prompt();
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2527 return;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2528 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2529
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2530 this._input = this._input.substring(line.length);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2531 this._handleInputLine(repl, line);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2532 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2533 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2534 });
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2535 })
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2536 ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2537
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2538 "String to set MozRepl up into a simple-minded evaluation mode.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2539
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2540 (defun js--js-encode-value (x)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2541 "Marshall the given value for JS.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2542 Strings and numbers are JSON-encoded. Lists (including nil) are
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2543 made into JavaScript array literals and their contents encoded
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2544 with `js--js-encode-value'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2545 (cond ((stringp x) (json-encode-string x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2546 ((numberp x) (json-encode-number x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2547 ((symbolp x) (format "{objid:%S}" (symbol-name x)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2548 ((js--js-handle-p x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2549
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2550 (when (js--js-handle-expired-p x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2551 (error "Stale JS handle"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2552
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2553 (format "{objid:%s}" (js--js-handle-id x)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2554
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2555 ((sequencep x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2556 (if (eq (car-safe x) 'js--funcall)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2557 (format "{funcall:[%s]}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2558 (mapconcat #'js--js-encode-value (cdr x) ","))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2559 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2560 "[" (mapconcat #'js--js-encode-value x ",") "]")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2561 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2562 (error "Unrecognized item: %S" x))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2563
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2564 (defconst js--js-prompt-regexp "\\(repl[0-9]*\\)> $")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2565 (defconst js--js-repl-prompt-regexp "^EVAL>$")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2566 (defvar js--js-repl-depth 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2567
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2568 (defun js--js-wait-for-eval-prompt ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2569 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2570 (inferior-moz-process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2571 js--js-repl-prompt-regexp js-js-timeout
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2572
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2573 ;; start matching against the beginning of the line in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2574 ;; order to catch a prompt that's only partially arrived
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2575 (save-excursion (forward-line 0) (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2576
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2577 (defun js--js-enter-repl ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2578 (inferior-moz-process) ; called for side-effect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2579 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2580 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2581
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2582 ;; Do some initialization the first time we see a process
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2583 (unless (eq (inferior-moz-process) js--js-process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2584 (setq js--js-process (inferior-moz-process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2585 (setq js--js-references (make-hash-table :test 'eq :weakness t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2586 (setq js--js-repl-depth 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2587
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2588 ;; Send interactor definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2589 (comint-send-string js--js-process js--moz-interactor)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2590 (comint-send-string js--js-process
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2591 (concat "(" moz-repl-name ")\n"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2592 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2593 (inferior-moz-process) js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2594 js-js-timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2595
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2596 ;; Sanity check
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2597 (when (looking-back js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2598 (save-excursion (forward-line 0) (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2599 (setq js--js-repl-depth 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2600
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2601 (if (> js--js-repl-depth 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2602 ;; If js--js-repl-depth > 0, we *should* be seeing an
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2603 ;; EVAL> prompt. If we don't, give Mozilla a chance to catch
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2604 ;; up with us.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2605 (js--js-wait-for-eval-prompt)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2606
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2607 ;; Otherwise, tell Mozilla to enter the interactor mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2608 (insert (match-string-no-properties 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2609 ".pushInteractor('js')")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2610 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2611 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2612 (inferior-moz-process) js--js-repl-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2613 js-js-timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2614
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2615 (incf js--js-repl-depth)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2616
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2617 (defun js--js-leave-repl ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2618 (assert (> js--js-repl-depth 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2619 (when (= 0 (decf js--js-repl-depth))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2620 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2621 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2622 (js--js-wait-for-eval-prompt)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2623 (insert "EXIT")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2624 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2625 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2626 (inferior-moz-process) js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2627 js-js-timeout))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2628
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2629 (defsubst js--js-not (value)
106457
c15d1227e860 * progmodes/js.el (js--js-not): Add null to the list of values.
Chong Yidong <cyd@stupidchicken.com>
parents: 105372
diff changeset
2630 (memq value '(nil null false undefined)))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2631
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2632 (defsubst js--js-true (value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2633 (not (js--js-not value)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2634
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2635 (eval-and-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2636 (defun js--optimize-arglist (arglist)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2637 "Convert immediate js< and js! references to deferred ones."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2638 (loop for item in arglist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2639 if (eq (car-safe item) 'js<)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2640 collect (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2641 '(list 'interactor "_getProp"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2642 (js--optimize-arglist (cdr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2643 else if (eq (car-safe item) 'js>)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2644 collect (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2645 '(list 'interactor "_putProp"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2646
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2647 (if (atom (cadr item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2648 (list (cadr item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2649 (list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2650 (append
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2651 (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2652 '(list 'interactor "_mkArray"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2653 (js--optimize-arglist (cadr item)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2654 (js--optimize-arglist (cddr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2655 else if (eq (car-safe item) 'js!)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2656 collect (destructuring-bind (ignored function &rest body) item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2657 (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2658 (if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2659 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2660 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2661 function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2662 (js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2663 else
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2664 collect item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2665
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2666 (defmacro js--js-get-service (class-name interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2667 `(js! ("Components" "classes" ,class-name "getService")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2668 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2669
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2670 (defmacro js--js-create-instance (class-name interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2671 `(js! ("Components" "classes" ,class-name "createInstance")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2672 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2673
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2674 (defmacro js--js-qi (object interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2675 `(js! (,object "QueryInterface")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2676 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2677
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2678 (defmacro with-js (&rest forms)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2679 "Run FORMS with the Mozilla repl set up for js commands.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2680 Inside the lexical scope of `with-js', `js?', `js!',
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2681 `js-new', `js-eval', `js-list', `js<', `js>', `js-get-service',
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2682 `js-create-instance', and `js-qi' are defined."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2683
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2684 `(progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2685 (js--js-enter-repl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2686 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2687 (macrolet ((js? (&rest body) `(js--js-true ,@body))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2688 (js! (function &rest body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2689 `(js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2690 ,(if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2691 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2692 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2693 function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2694 ,@(js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2695
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2696 (js-new (function &rest body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2697 `(js--js-new
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2698 ,(if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2699 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2700 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2701 function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2702 ,@body))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2703
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2704 (js-eval (thisobj js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2705 `(js--js-eval
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2706 ,@(js--optimize-arglist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2707 (list thisobj js))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2708
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2709 (js-list (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2710 `(js--js-list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2711 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2712
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2713 (js-get-service (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2714 `(js--js-get-service
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2715 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2716
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2717 (js-create-instance (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2718 `(js--js-create-instance
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2719 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2720
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2721 (js-qi (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2722 `(js--js-qi
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2723 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2724
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2725 (js< (&rest body) `(js--js-get
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2726 ,@(js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2727 (js> (props value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2728 `(js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2729 '(interactor "_putProp")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2730 ,(if (consp props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2731 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2732 (js--optimize-arglist props))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2733 props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2734 ,@(js--optimize-arglist (list value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2735 ))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2736 (js-handle? (arg) `(js--js-handle-p ,arg)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2737 ,@forms)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2738 (js--js-leave-repl))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2739
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2740 (defvar js--js-array-as-list nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2741 "Whether to listify any Array returned by a Mozilla function.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2742 If nil, the whole Array is treated as a JS symbol.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2743
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2744 (defun js--js-decode-retval (result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2745 (ecase (intern (first result))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2746 (atom (second result))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2747 (special (intern (second result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2748 (array
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2749 (mapcar #'js--js-decode-retval (second result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2750 (objid
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2751 (or (gethash (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2752 js--js-references)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2753 (puthash (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2754 (make-js--js-handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2755 :id (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2756 :process (inferior-moz-process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2757 js--js-references)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2758
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2759 (error (signal 'js-js-error (list (second result))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2760
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2761 (defun js--js-funcall (function &rest arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2762 "Call the Mozilla function FUNCTION with arguments ARGUMENTS.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2763 If function is a string, look it up as a property on the global
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2764 object and use the global object for `this'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2765 If FUNCTION is a list with one element, use that element as the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2766 function with the global object for `this', except that if that
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2767 single element is a string, look it up on the global object.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2768 If FUNCTION is a list with more than one argument, use the list
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2769 up to the last value as a property descriptor and the last
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2770 argument as a function."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2771
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2772 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2773 (let ((argstr (js--js-encode-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2774 (cons function arguments))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2775
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2776 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2777 ;; Actual funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2778 (when js--js-array-as-list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2779 (insert "*"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2780 (insert argstr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2781 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2782 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2783 (inferior-moz-process) "EVAL>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2784 js-js-timeout)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2785 (goto-char comint-last-input-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2786
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2787 ;; Read the result
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2788 (let* ((json-array-type 'list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2789 (result (prog1 (json-read)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2790 (goto-char (point-max)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2791 (js--js-decode-retval result))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2792
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2793 (defun js--js-new (constructor &rest arguments)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2794 "Call CONSTRUCTOR as a constructor, with arguments ARGUMENTS.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2795 CONSTRUCTOR is a JS handle, a string, or a list of these things."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2796 (apply #'js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2797 '(interactor "_callNew")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2798 constructor arguments))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2799
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2800 (defun js--js-eval (thisobj js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2801 (js--js-funcall '(interactor "_callEval") thisobj js))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2802
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2803 (defun js--js-list (&rest arguments)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2804 "Return a Lisp array resulting from evaluating each of ARGUMENTS."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2805 (let ((js--js-array-as-list t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2806 (apply #'js--js-funcall '(interactor "_mkArray")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2807 arguments)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2808
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2809 (defun js--js-get (&rest props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2810 (apply #'js--js-funcall '(interactor "_getProp") props))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2811
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2812 (defun js--js-put (props value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2813 (js--js-funcall '(interactor "_putProp") props value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2814
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2815 (defun js-gc (&optional force)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2816 "Tell the repl about any objects we don't reference anymore.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2817 With argument, run even if no intervening GC has happened."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2818 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2819
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2820 (when force
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2821 (setq js--js-last-gcs-done nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2822
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2823 (let ((this-gcs-done gcs-done) keys num)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2824 (when (and js--js-references
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2825 (boundp 'inferior-moz-buffer)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2826 (buffer-live-p inferior-moz-buffer)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2827
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2828 ;; Don't bother running unless we've had an intervening
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2829 ;; garbage collection; without a gc, nothing is deleted
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2830 ;; from the weak hash table, so it's pointless telling
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2831 ;; MozRepl about that references we still hold
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2832 (not (eq js--js-last-gcs-done this-gcs-done))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2833
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2834 ;; Are we looking at a normal prompt? Make sure not to
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2835 ;; interrupt the user if he's doing something
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2836 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2837 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2838 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2839 (looking-back js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2840 (save-excursion (forward-line 0) (point))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2841
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2842 (setq keys (loop for x being the hash-keys
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2843 of js--js-references
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2844 collect x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2845 (setq num (js--js-funcall '(repl "_jsGC") (or keys [])))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2846
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2847 (setq js--js-last-gcs-done this-gcs-done)
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105076
diff changeset
2848 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2849 (message "Cleaned %s entries" num))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2850
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2851 num)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2852
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2853 (run-with-idle-timer 30 t #'js-gc)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2854
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2855 (defun js-eval (js)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2856 "Evaluate the JavaScript in JS and return JSON-decoded result."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2857 (interactive "MJavascript to evaluate: ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2858 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2859 (let* ((content-window (js--js-content-window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2860 (js--get-js-context)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2861 (result (js-eval content-window js)))
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105076
diff changeset
2862 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2863 (message "%s" (js! "String" result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2864 result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2865
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2866 (defun js--get-tabs ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2867 "Enumerate all JavaScript contexts available.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2868 Each context is a list:
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2869 (TITLE URL BROWSER TAB TABBROWSER) for content documents
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2870 (TITLE URL WINDOW) for windows
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2871
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2872 All tabs of a given window are grouped together. The most recent
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2873 window is first. Within each window, the tabs are returned
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2874 left-to-right."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2875 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2876 (let (windows)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2877
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2878 (loop with window-mediator = (js! ("Components" "classes"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2879 "@mozilla.org/appshell/window-mediator;1"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2880 "getService")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2881 (js< "Components" "interfaces"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2882 "nsIWindowMediator"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2883 with enumerator = (js! (window-mediator "getEnumerator") nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2884
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2885 while (js? (js! (enumerator "hasMoreElements")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2886 for window = (js! (enumerator "getNext"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2887 for window-info = (js-list window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2888 (js< window "document" "title")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2889 (js! (window "location" "toString"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2890 (js< window "closed")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2891 (js< window "windowState"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2892
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2893 unless (or (js? (fourth window-info))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2894 (eq (fifth window-info) 2))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2895 do (push window-info windows))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2896
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2897 (loop for window-info in windows
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2898 for window = (first window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2899 collect (list (second window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2900 (third window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2901 window)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2902
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2903 for gbrowser = (js< window "gBrowser")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2904 if (js-handle? gbrowser)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2905 nconc (loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2906 for x below (js< gbrowser "browsers" "length")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2907 collect (js-list (js< gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2908 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2909 x
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2910 "contentDocument"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2911 "title")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2912
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2913 (js! (gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2914 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2915 x
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2916 "contentWindow"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2917 "location"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2918 "toString"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2919 (js< gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2920 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2921 x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2922
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2923 (js! (gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2924 "tabContainer"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2925 "childNodes"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2926 "item")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2927 x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2928
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2929 gbrowser))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2930
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2931 (defvar js-read-tab-history nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2932
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2933 (defun js--read-tab (prompt)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2934 "Read a Mozilla tab with prompt PROMPT.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2935 Return a cons of (TYPE . OBJECT). TYPE is either 'window or
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2936 'tab, and OBJECT is a JavaScript handle to a ChromeWindow or a
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2937 browser, respectively."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2938
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2939 ;; Prime IDO
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2940 (unless ido-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2941 (ido-mode t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2942 (ido-mode nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2943
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2944 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2945 (lexical-let ((tabs (js--get-tabs)) selected-tab-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2946 selected-tab prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2947
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2948 ;; Disambiguate names
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2949 (setq tabs (loop with tab-names = (make-hash-table :test 'equal)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2950 for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2951 for cname = (format "%s (%s)" (second tab) (first tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2952 for num = (incf (gethash cname tab-names -1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2953 if (> num 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2954 do (setq cname (format "%s <%d>" cname num))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2955 collect (cons cname tab)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2956
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2957 (labels ((find-tab-by-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2958 (cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2959 (loop for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2960 if (equal (car tab) cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2961 return (cdr tab)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2962
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2963 (mogrify-highlighting
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2964 (hitab unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2965
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2966 ;; Hack to reduce the number of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2967 ;; round-trips to mozilla
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2968 (let (cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2969 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2970 ;; Highlighting tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2971 ((fourth hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2972 (push '(js! ((fourth hitab) "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2973 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2974 "color: red; font-weight: bold")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2975 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2976
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2977 ;; Highlight window proper
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2978 (push '(js! ((third hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2979 "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2980 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2981 "border: 8px solid red")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2982 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2983
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2984 ;; Select tab, when appropriate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2985 (when js-js-switch-tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2986 (push
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2987 '(js> ((fifth hitab) "selectedTab") (fourth hitab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2988 cmds)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2989
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2990 ;; Hilighting whole window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2991 ((third hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2992 (push '(js! ((third hitab) "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2993 "documentElement" "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2994 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2995 (concat "-moz-appearance: none;"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2996 "border: 8px solid red;"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2997 cmds)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2998
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2999 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3000 ;; Unhighlighting tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3001 ((fourth unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3002 (push '(js! ((fourth unhitab) "setAttribute") "style" "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3003 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3004 (push '(js! ((third unhitab) "setAttribute") "style" "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3005 cmds))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3006
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3007 ;; Unhighlighting window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3008 ((third unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3009 (push '(js! ((third unhitab) "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3010 "documentElement" "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3011 "style" "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3012 cmds)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3013
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3014 (eval (list 'with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3015 (cons 'js-list (nreverse cmds))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3016
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3017 (command-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3018 ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3019 (let* ((tab (find-tab-by-cname (car ido-matches))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3020 (mogrify-highlighting tab prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3021 (setq prev-hitab tab)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3022
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3023 (setup-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3024 ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3025 ;; Fiddle with the match list a bit: if our first match
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3026 ;; is a tabbrowser window, rotate the match list until
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3027 ;; the active tab comes up
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3028 (let ((matched-tab (find-tab-by-cname (car ido-matches))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3029 (when (and matched-tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3030 (null (fourth matched-tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3031 (equal "navigator:browser"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3032 (js! ((third matched-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3033 "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3034 "documentElement"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3035 "getAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3036 "windowtype")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3037
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3038 (loop with tab-to-match = (js< (third matched-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3039 "gBrowser"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3040 "selectedTab")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3041
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3042 with index = 0
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3043 for match in ido-matches
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3044 for candidate-tab = (find-tab-by-cname match)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3045 if (eq (fourth candidate-tab) tab-to-match)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3046 do (setq ido-cur-list (ido-chop ido-cur-list match))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3047 and return t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3048
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3049 (add-hook 'post-command-hook #'command-hook t t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3050
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3051
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3052 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3053 (setq selected-tab-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3054 (let ((ido-minibuffer-setup-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3055 (cons #'setup-hook ido-minibuffer-setup-hook)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3056 (ido-completing-read
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3057 prompt
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3058 (mapcar #'car tabs)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3059 nil t nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3060 'js-read-tab-history)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3061
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3062 (when prev-hitab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3063 (mogrify-highlighting nil prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3064 (setq prev-hitab nil)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3065
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3066 (add-to-history 'js-read-tab-history selected-tab-cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3067
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3068 (setq selected-tab (loop for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3069 if (equal (car tab) selected-tab-cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3070 return (cdr tab)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3071
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3072 (if (fourth selected-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3073 (cons 'browser (third selected-tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3074 (cons 'window (third selected-tab)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3075
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3076 (defun js--guess-eval-defun-info (pstate)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3077 "Helper function for `js-eval-defun'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3078 Return a list (NAME . CLASSPARTS), where CLASSPARTS is a list of
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3079 strings making up the class name and NAME is the name of the
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3080 function part."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3081 (cond ((and (= (length pstate) 3)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3082 (eq (js--pitem-type (first pstate)) 'function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3083 (= (length (js--pitem-name (first pstate))) 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3084 (consp (js--pitem-type (second pstate))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3085
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3086 (append (js--pitem-name (second pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3087 (list (first (js--pitem-name (first pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3088
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3089 ((and (= (length pstate) 2)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3090 (eq (js--pitem-type (first pstate)) 'function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3091
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3092 (append
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3093 (butlast (js--pitem-name (first pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3094 (list (car (last (js--pitem-name (first pstate)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3095
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3096 (t (error "Function not a toplevel defun or class member"))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3097
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3098 (defvar js--js-context nil
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3099 "The current JavaScript context.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3100 This is a cons like the one returned from `js--read-tab'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3101 Change with `js-set-js-context'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3102
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3103 (defconst js--js-inserter
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3104 "(function(func_info,func) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3105 func_info.unshift('window');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3106 var obj = window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3107 for(var i = 1; i < func_info.length - 1; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3108 var next = obj[func_info[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3109 if(typeof next !== 'object' && typeof next !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3110 next = obj.prototype && obj.prototype[func_info[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3111 if(typeof next !== 'object' && typeof next !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3112 alert('Could not find ' + func_info.slice(0, i+1).join('.') +
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3113 ' or ' + func_info.slice(0, i+1).join('.') + '.prototype');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3114 return;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3115 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3116
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3117 func_info.splice(i+1, 0, 'prototype');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3118 ++i;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3119 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3120 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3121
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3122 obj[func_info[i]] = func;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3123 alert('Successfully updated '+func_info.join('.'));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3124 })")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3125
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3126 (defun js-set-js-context (context)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3127 "Set the JavaScript context to CONTEXT.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3128 When called interactively, prompt for CONTEXT."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3129 (interactive (list (js--read-tab "Javascript Context: ")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3130 (setq js--js-context context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3131
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3132 (defun js--get-js-context ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3133 "Return a valid JavaScript context.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3134 If one hasn't been set, or if it's stale, prompt for a new one."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3135 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3136 (when (or (null js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3137 (js--js-handle-expired-p (cdr js--js-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3138 (ecase (car js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3139 (window (js? (js< (cdr js--js-context) "closed")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3140 (browser (not (js? (js< (cdr js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3141 "contentDocument"))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3142 (setq js--js-context (js--read-tab "Javascript Context: ")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3143 js--js-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3144
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3145 (defun js--js-content-window (context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3146 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3147 (ecase (car context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3148 (window (cdr context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3149 (browser (js< (cdr context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3150 "contentWindow" "wrappedJSObject")))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3151
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3152 (defun js--make-nsilocalfile (path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3153 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3154 (let ((file (js-create-instance "@mozilla.org/file/local;1"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3155 "nsILocalFile")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3156 (js! (file "initWithPath") path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3157 file)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3158
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3159 (defun js--js-add-resource-alias (alias path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3160 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3161 (let* ((io-service (js-get-service "@mozilla.org/network/io-service;1"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3162 "nsIIOService"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3163 (res-prot (js! (io-service "getProtocolHandler") "resource"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3164 (res-prot (js-qi res-prot "nsIResProtocolHandler"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3165 (path-file (js--make-nsilocalfile path))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3166 (path-uri (js! (io-service "newFileURI") path-file)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3167 (js! (res-prot "setSubstitution") alias path-uri))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3168
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3169 (defun* js-eval-defun ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3170 "Update a Mozilla tab using the JavaScript defun at point."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3171 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3172
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3173 ;; This function works by generating a temporary file that contains
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3174 ;; the function we'd like to insert. We then use the elisp-js bridge
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3175 ;; to command mozilla to load this file by inserting a script tag
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3176 ;; into the document we set. This way, debuggers and such will have
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3177 ;; a way to find the source of the just-inserted function.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3178 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3179 ;; We delete the temporary file if there's an error, but otherwise
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3180 ;; we add an unload event listener on the Mozilla side to delete the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3181 ;; file.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3182
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3183 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3184 (let (begin end pstate defun-info temp-name defun-body)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3185 (js-end-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3186 (setq end (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3187 (js--ensure-cache)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3188 (js-beginning-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3189 (re-search-forward "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3190 (setq begin (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3191 (setq pstate (js--forward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3192
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3193 (when (or (null pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3194 (> (point) end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3195 (error "Could not locate function definition"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3196
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3197 (setq defun-info (js--guess-eval-defun-info pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3198
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3199 (let ((overlay (make-overlay begin end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3200 (overlay-put overlay 'face 'highlight)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3201 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3202 (unless (y-or-n-p (format "Send %s to Mozilla? "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3203 (mapconcat #'identity defun-info ".")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3204 (message "") ; question message lingers until next command
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3205 (return-from js-eval-defun))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3206 (delete-overlay overlay)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3207
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3208 (setq defun-body (buffer-substring-no-properties begin end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3209
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3210 (make-directory js-js-tmpdir t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3211
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3212 ;; (Re)register a Mozilla resource URL to point to the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3213 ;; temporary directory
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3214 (js--js-add-resource-alias "js" js-js-tmpdir)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3215
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3216 (setq temp-name (make-temp-file (concat js-js-tmpdir
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3217 "/js-")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3218 nil ".js"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3219 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3220 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3221 (with-temp-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3222 (insert js--js-inserter)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3223 (insert "(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3224 (insert (json-encode-list defun-info))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3225 (insert ",\n")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3226 (insert defun-body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3227 (insert "\n)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3228 (write-region (point-min) (point-max) temp-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3229 nil 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3230
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3231 ;; Give Mozilla responsibility for deleting this file
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3232 (let* ((content-window (js--js-content-window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3233 (js--get-js-context)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3234 (content-document (js< content-window "document"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3235 (head (if (js? (js< content-document "body"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3236 ;; Regular content
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3237 (js< (js! (content-document "getElementsByTagName")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3238 "head")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3239 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3240 ;; Chrome
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3241 (js< content-document "documentElement")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3242 (elem (js! (content-document "createElementNS")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3243 "http://www.w3.org/1999/xhtml" "script")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3244
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3245 (js! (elem "setAttribute") "type" "text/javascript")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3246 (js! (elem "setAttribute") "src"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3247 (format "resource://js/%s"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3248 (file-name-nondirectory temp-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3249
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3250 (js! (head "appendChild") elem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3251
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3252 (js! (content-window "addEventListener") "unload"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3253 (js! ((js-new
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3254 "Function" "file"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3255 "return function() { file.remove(false) }"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3256 (js--make-nsilocalfile temp-name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3257 'false)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3258 (setq temp-name nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3259
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3260
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3261
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3262 ))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3263
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3264 ;; temp-name is set to nil on success
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3265 (when temp-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3266 (delete-file temp-name))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3267
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3268 ;;; Main Function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3269
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3270 ;;;###autoload
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3271 (define-derived-mode js-mode nil "js"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3272 "Major mode for editing JavaScript.
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3273
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3274 Key bindings:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3275
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3276 \\{js-mode-map}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3277
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3278 :group 'js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3279 :syntax-table js-mode-syntax-table
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3280
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3281 (set (make-local-variable 'indent-line-function) 'js-indent-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3282 (set (make-local-variable 'beginning-of-defun-function)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3283 'js-beginning-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3284 (set (make-local-variable 'end-of-defun-function)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3285 'js-end-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3286
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3287 (set (make-local-variable 'open-paren-in-column-0-is-defun-start) nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3288 (set (make-local-variable 'font-lock-defaults)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3289 (list js--font-lock-keywords
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3290 nil nil nil nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3291 '(font-lock-syntactic-keywords
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3292 . js-font-lock-syntactic-keywords)))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3293
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3294 (set (make-local-variable 'parse-sexp-ignore-comments) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3295 (set (make-local-variable 'parse-sexp-lookup-properties) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3296 (set (make-local-variable 'which-func-imenu-joiner-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3297 #'js--which-func-joiner)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3298
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3299 ;; Comments
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3300 (setq comment-start "// ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3301 (setq comment-end "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3302 (set (make-local-variable 'fill-paragraph-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3303 'js-c-fill-paragraph)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3304
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3305 ;; Parse cache
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3306 (add-hook 'before-change-functions #'js--flush-caches t t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3307
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3308 ;; Frameworks
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3309 (js--update-quick-match-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3310
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3311 ;; Imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3312 (setq imenu-case-fold-search nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3313 (set (make-local-variable 'imenu-create-index-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3314 #'js--imenu-create-index)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3315
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3316 (setq major-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3317 (setq mode-name "Javascript")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3318
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3319 ;; for filling, pretend we're cc-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3320 (setq c-comment-prefix-regexp "//+\\|\\**"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3321 c-paragraph-start "$"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3322 c-paragraph-separate "$"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3323 c-block-comment-prefix "* "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3324 c-line-comment-starter "//"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3325 c-comment-start-regexp "/[*/]\\|\\s!"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3326 comment-start-skip "\\(//+\\|/\\*+\\)\\s *")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3327
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3328 (let ((c-buffer-is-cc-mode t))
108363
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3329 ;; FIXME: These are normally set by `c-basic-common-init'. Should
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3330 ;; we call it instead? (Bug#6071)
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3331 (make-local-variable 'paragraph-start)
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3332 (make-local-variable 'paragraph-separate)
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3333 (make-local-variable 'paragraph-ignore-fill-prefix)
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3334 (make-local-variable 'adaptive-fill-mode)
642b031fce0f Make paragraph vars local for js-mode (Bug#6071).
Chong Yidong <cyd@stupidchicken.com>
parents: 107692
diff changeset
3335 (make-local-variable 'adaptive-fill-regexp)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3336 (c-setup-paragraph-variables))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3337
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3338 (set (make-local-variable 'syntax-begin-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3339 #'js--syntax-begin-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3340
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3341 ;; Important to fontify the whole buffer syntactically! If we don't,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3342 ;; then we might have regular expression literals that aren't marked
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3343 ;; as strings, which will screw up parse-partial-sexp, scan-lists,
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3344 ;; etc. and and produce maddening "unbalanced parenthesis" errors.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3345 ;; When we attempt to find the error and scroll to the portion of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3346 ;; the buffer containing the problem, JIT-lock will apply the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3347 ;; correct syntax to the regular expresion literal and the problem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3348 ;; will mysteriously disappear.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3349 (font-lock-set-defaults)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3350
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3351 (let (font-lock-keywords) ; leaves syntactic keywords intact
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3352 (font-lock-fontify-buffer)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3353
106794
c177971c1cec * progmodes/js.el: Autoload javascript-mode alias.
Chong Yidong <cyd@stupidchicken.com>
parents: 106457
diff changeset
3354 ;;;###autoload
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3355 (defalias 'javascript-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3356
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3357 (eval-after-load 'folding
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3358 '(when (fboundp 'folding-add-to-marks-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3359 (folding-add-to-marks-list 'js-mode "// {{{" "// }}}" )))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3360
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3361 (provide 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3362
104276
2c69ae7c48d0 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 104275
diff changeset
3363 ;; arch-tag: 1a0d0409-e87f-4fc7-a58c-3731c66ddaac
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3364 ;; js.el ends here