annotate lisp/progmodes/js.el @ 106794:c177971c1cec

* progmodes/js.el: Autoload javascript-mode alias.
author Chong Yidong <cyd@stupidchicken.com>
date Mon, 11 Jan 2010 11:18:06 -0500
parents c15d1227e860
children 1d1d5d9bd884
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3 ;; Copyright (C) 2008, 2009 Free Software Foundation, Inc.
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
439 (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
440 "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
441 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
442 :type 'boolean
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
443 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
444
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
445 (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
446 "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
447 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
448 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
450 (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
451 "Frameworks recognized by `js-mode'.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
452 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
453 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
454 :type (cons 'set (mapcar (lambda (x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
455 (list 'const x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
456 js--available-frameworks))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
457 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
458
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
459 (defcustom js-js-switch-tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
460 (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
461 "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
462 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
463 for preventing Firefox from stealing the keyboard focus."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 :type 'boolean
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 (defcustom js-js-tmpdir
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468 "~/.emacs.d/js/js"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
469 "Temporary directory used by `js-mode' to communicate with Mozilla.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
470 This directory must be readable and writable by both Mozilla and
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
471 Emacs."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472 :type 'directory
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 (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
476 "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
477 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
478 getting timeout messages."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 :type 'integer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480 :group 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
482 ;;; KeyMap
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
483
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
484 (defvar js-mode-map
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 (let ((keymap (make-sparse-keymap)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486 (define-key keymap [(control ?c) (meta ?:)] #'js-eval)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487 (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
488 (define-key keymap [(control meta ?x)] #'js-eval-defun)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489 (define-key keymap [(meta ?.)] #'js-find-symbol)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 (easy-menu-define nil keymap "Javascript Menu"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 '("Javascript"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
492 ["Select new Mozilla context…" js-set-js-context
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
493 (fboundp #'inferior-moz-process)]
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
494 ["Evaluate expression in Mozilla context…" js-eval
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 (fboundp #'inferior-moz-process)]
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496 ["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
497 (fboundp #'inferior-moz-process)]))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
498 keymap)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
499 "Keymap for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
500
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
501 ;;; Syntax table and parsing
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
503 (defvar js-mode-syntax-table
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504 (let ((table (make-syntax-table)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
505 (c-populate-syntax-table table)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
506 (modify-syntax-entry ?$ "_" table)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 table)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
508 "Syntax table for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
510 (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
511 "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
512
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
513 (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
514 "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
515
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
516 (make-variable-buffer-local 'js--quick-match-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
517 (make-variable-buffer-local 'js--quick-match-re-func)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
518
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
519 (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
520 "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
521 (make-variable-buffer-local 'js--cache-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
522
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
523 (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
524 "Latest parse position reached by `js--ensure-cache'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 (make-variable-buffer-local 'js--last-parse-pos)
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--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
528 "Parse state at `js--last-parse-pos'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529 (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
530
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
531 (defun js--flatten-list (list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
532 (loop for item in list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
533 nconc (cond ((consp item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 (js--flatten-list item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
535 (item (list item)))))
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 (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
538 "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
539 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
540 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
541 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
542 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
543 element."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
544 (setq list (js--flatten-list list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
545 (when list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
546 (concat prefix (mapconcat #'identity list separator) suffix)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
547
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
548 (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
549 "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
550 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
551 enabled frameworks."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
552 (setq js--quick-match-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
553 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
554 "^[ \t]*\\(?:" "\\|" "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
555
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
556 ;; #define mumble
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
557 "#define[ \t]+[a-zA-Z_]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
558
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
559 (when (memq 'extjs js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
560 "Ext\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
561
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
562 (when (memq 'prototype js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
563 "Object\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
564
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
565 ;; var mumble = THING (
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
566 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
567 "\\(?:var[ \t]+\\)?[a-zA-Z_$0-9.]+[ \t]*=[ \t]*\\(?:"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
568 "\\|"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
569 "\\)[ \t]*\("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
570
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
571 (when (memq 'prototype js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
572 "Class\\.create")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
573
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
574 (when (memq 'extjs js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
575 "Ext\\.extend")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
576
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
577 (when (memq 'merrillpress js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
578 "[a-zA-Z_$0-9]+\\.extend\\(?:Final\\)?"))
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 (when (memq 'dojo js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
581 "dojo\\.declare[ \t]*\(")
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 'mochikit js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
584 "MochiKit\\.Base\\.update[ \t]*\(")
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 ;; mumble.prototypeTHING
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
587 (js--maybe-join
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
588 "[a-zA-Z_$0-9.]+\\.prototype\\(?:" "\\|" "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
589
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
590 (when (memq 'javascript js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
591 '( ;; foo.prototype.bar = function(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
592 "\\.[a-zA-Z_$0-9]+[ \t]*=[ \t]*function[ \t]*\("
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
593
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
594 ;; mumble.prototype = {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
595 "[ \t]*=[ \t]*{")))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
596
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
597 (setq js--quick-match-re-func
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
598 (concat "function\\|" js--quick-match-re)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
599
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
600 (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
601 "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
602 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
603 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
604 (let ((next-value (get-text-property (point) propname)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
605 (if next-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
606 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
607
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
608 (goto-char (next-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
609 (point) propname nil (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
610 (unless (eobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
611 (setq next-value (get-text-property (point) propname))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
612 (forward-char)))
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 next-value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
615
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
616 (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
617 "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
618 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
619 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
620 point at BOB."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
621 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
622 (let ((prev-value (get-text-property (1- (point)) propname)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
623 (if prev-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
624 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
625
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
626 (goto-char (previous-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
627 (point) propname nil (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
628
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
629 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
630 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
631 (setq prev-value (get-text-property (point) propname))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
632
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
633 prev-value)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
634
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
635 (defsubst js--forward-pstate ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
636 (js--forward-text-property 'js--pstate))
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 (defsubst js--backward-pstate ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
639 (js--backward-text-property 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
640
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
641 (defun js--pitem-goto-h-end (pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
642 (goto-char (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
643 (js--forward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
644
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
645 (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
646 "Helper function for `js--re-search-forward'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
647 (let ((parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
648 str-terminator
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
649 (orig-macro-end (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
650 (when (js--beginning-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
651 (c-end-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
652 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
653 (while (> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
654 (re-search-forward regexp bound)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
655 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
656 (cond ((setq str-terminator (nth 3 parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
657 (when (eq str-terminator t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
658 (setq str-terminator ?/))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
659 (re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
660 (concat "\\([^\\]\\|^\\)" (string str-terminator))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
661 (save-excursion (end-of-line) (point)) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
662 ((nth 7 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
663 (forward-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
664 ((or (nth 4 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
665 (and (eq (char-before) ?\/) (eq (char-after) ?\*)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
666 (re-search-forward "\\*/"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
667 ((and (not (and orig-macro-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
668 (<= (point) orig-macro-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
669 (js--beginning-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
670 (c-end-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
671 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
672 (setq count (1- count))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
673 (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
674
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
675
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
676 (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
677 "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
678 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
679 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
680
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
681 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
682 macro as normal text."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
683 (let ((saved-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
684 (search-expr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
685 (cond ((null count)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
686 '(js--re-search-forward-inner regexp bound 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
687 ((< count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
688 '(js--re-search-backward-inner regexp bound (- count)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
689 ((> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
690 '(js--re-search-forward-inner regexp bound count)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
691 (condition-case err
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
692 (eval search-expr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
693 (search-failed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
694 (goto-char saved-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
695 (unless noerror
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
696 (error (error-message-string err)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
697
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 (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
700 "Auxiliary function for `js--re-search-backward'."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
701 (let ((parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
702 str-terminator
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
703 (orig-macro-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
704 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
705 (and (js--beginning-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
706 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
707 (while (> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
708 (re-search-backward regexp bound)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
709 (when (and (> (point) (point-min))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
710 (save-excursion (backward-char) (looking-at "/[/*]")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
711 (forward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
712 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
713 (cond ((setq str-terminator (nth 3 parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
714 (when (eq str-terminator t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
715 (setq str-terminator ?/))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
716 (re-search-backward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
717 (concat "\\([^\\]\\|^\\)" (string str-terminator))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
718 (save-excursion (beginning-of-line) (point)) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
719 ((nth 7 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
720 (goto-char (nth 8 parse)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
721 ((or (nth 4 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
722 (and (eq (char-before) ?/) (eq (char-after) ?*)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
723 (re-search-backward "/\\*"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
724 ((and (not (and orig-macro-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
725 (>= (point) orig-macro-start)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
726 (js--beginning-of-macro)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
727 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
728 (setq count (1- count))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
729 (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
730
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
731
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
732 (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
733 "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
734
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
735 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
736 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
737 removed.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
738
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
739 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
740 (let ((saved-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
741 (search-expr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
742 (cond ((null count)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
743 '(js--re-search-backward-inner regexp bound 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
744 ((< count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
745 '(js--re-search-forward-inner regexp bound (- count)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
746 ((> count 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
747 '(js--re-search-backward-inner regexp bound count)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
748 (condition-case err
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
749 (eval search-expr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
750 (search-failed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
751 (goto-char saved-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
752 (unless noerror
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
753 (error (error-message-string err)))))))
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 (defun js--forward-expression ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
756 "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
757 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
758 lines."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
759 (loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
760 ;; non-continued case; simplistic, but good enough?
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
761 do (loop until (or (eolp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
762 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
763 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
764 (memq (char-after) '(?\, ?\; ?\] ?\) ?\}))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
765 do (forward-sexp))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
766
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
767 while (and (eq (char-after) ?\n)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
768 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
769 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
770 (js--continued-expression-p)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
771
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
772 (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
773 "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
774 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
775
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
776 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
777 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
778 determined. Otherwise, return nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
779 (assert (looking-at "\\_<function\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
780 (let ((name t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
781 (forward-word)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
782 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
783 (when (looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
784 (setq name (match-string-no-properties 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
785 (goto-char (match-end 0)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
786 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
787 (and (eq (char-after) ?\( )
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
788 (ignore-errors (forward-list) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
789 (progn (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
790 (and (eq (char-after) ?{)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
791 name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
792
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
793 (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
794 "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
795 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
796 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
797 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
798 (let (prologue-begin)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
799 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
800 (if pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
801 (goto-char pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
802 (setq pos (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
803
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
804 (when (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
805 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
806 (or (looking-at js--function-heading-2-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
807 (looking-at js--function-heading-3-re)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
808
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
809 (setq prologue-begin (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
810 (when (<= prologue-begin pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
811 (goto-char (match-end 0))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
812
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
813 (skip-syntax-backward "w_")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
814 (and (or (looking-at "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
815 (js--re-search-backward "\\_<function\\_>" nil t))
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 (save-match-data (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
818 (js--forward-function-decl))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
819
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
820 (<= pos (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
821 (or prologue-begin (match-beginning 0))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
822
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
823 (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
824 "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
825 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
826 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
827 anything."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
828 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
829 (let (pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
830 (while (and (setq pstate (js--backward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
831 (not (eq 'function (js--pitem-type (car pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
832 (and (not (bobp)) pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
833
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
834 (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
835 "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
836 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
837 top-most pitem. Otherwise, return nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
838 (loop for pitem in pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
839 with func-depth = 0
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
840 with func-pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
841 if (eq 'function (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
842 do (incf func-depth)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
843 and do (setq func-pitem pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
844 finally return (if (eq func-depth 1) func-pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
845
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
846 (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
847 "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
848 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
849 (or
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
850 ;; Look for the smallest function that encloses point...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
851 (loop for pitem in (js--parse-state-at-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
852 if (and (eq 'function (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
853 (js--inside-pitem-p pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
854 do (goto-char (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
855 and return pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
856
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
857 ;; ...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
858 ;; defun
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
859 (loop for pstate = (js--backward-pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
860 while pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
861 if (js--pstate-is-toplevel-defun pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
862 do (goto-char (js--pitem-h-begin it))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
863 and return it)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
864
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
865 (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
866 "Helper function for `js-beginning-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
867 (let ((pstate (js--beginning-of-defun-raw)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
868 (when pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
869 (goto-char (js--pitem-h-begin (car pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
870
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
871 (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
872 "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
873 (setq arg (or arg 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
874 (while (and (not (eobp)) (< arg 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
875 (incf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
876 (when (and (not js-flat-functions)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
877 (or (eq (js-syntactic-context) 'function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
878 (js--function-prologue-beginning)))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
879 (js-end-of-defun))
104272
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 (if (js--re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
882 "\\_<function\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
883 (goto-char (js--function-prologue-beginning))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
884 (goto-char (point-max))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
885
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
886 (while (> arg 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
887 (decf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
888 ;; 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
889 ;; to go to the beginning of *that* function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
890 (when (eq (char-before) ?})
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
891 (backward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
892
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
893 (let ((prologue-begin (js--function-prologue-beginning)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
894 (cond ((and prologue-begin (< prologue-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
895 (goto-char prologue-begin))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
896
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
897 (js-flat-functions
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
898 (js--beginning-of-defun-flat))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
899 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
900 (js--beginning-of-defun-nested))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
901
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
902 (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
903 "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
904 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
905 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
906 (setq beg (or beg (save-restriction (widen) (point-min))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
907 (setq js--cache-end (min js--cache-end beg)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
908
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
909 (defmacro js--debug (&rest arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
910 ;; `(message ,@arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
911 )
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
912
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
913 (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
914 (let ((top-item (car open-items)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
915 (when (<= paren-depth (js--pitem-paren-depth top-item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
916 (assert (not (get-text-property (1- (point)) 'js-pend)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
917 (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
918 (setf (js--pitem-b-end top-item) (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
919 (setq open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
920 ;; 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
921 ;; 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
922 ;; that assumption holds.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
923 (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
924 (cddr open-items)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
925 open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
926
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
927 (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
928 "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
929 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
930 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
931 the body of `js--ensure-cache'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
932 `(progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
933 (setq goal-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
934 (goto-char prev-parse-point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
935 (while (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
936 (setq open-items (js--ensure-cache--pop-if-ended
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
937 open-items (car parse)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
938 ;; 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
939 ;; 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
940 ;; depth.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
941 (assert (> (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
942 (js--pitem-paren-depth (car open-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
943 (setq parse (parse-partial-sexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
944 prev-parse-point goal-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
945 (js--pitem-paren-depth (car open-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
946 nil parse))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
947
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
948 ;; (let ((overlay (make-overlay prev-parse-point (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
949 ;; (overlay-put overlay 'face '(:background "red"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
950 ;; (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
951 ;; (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
952 ;; (js--debug "parsed: %S" parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
953 ;; (sit-for 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
954 ;; (delete-overlay overlay)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
955
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
956 (setq prev-parse-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
957 (< (point) goal-point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
958
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
959 (setq open-items (js--ensure-cache--pop-if-ended
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
960 open-items (car parse)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
961
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
962 (defun js--show-cache-at-point ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
963 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
964 (require 'pp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
965 (let ((prop (get-text-property (point) 'js--pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
966 (with-output-to-temp-buffer "*Help*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
967 (pp prop))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
968
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
969 (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
970 "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
971 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
972 \(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
973 (let ((name (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
974 (split-string string "\\." t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
975 (unless (and (= (length name) 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
976 (equal (car name) "prototype"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
977
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
978 (setq name (remove "prototype" name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
979
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
980 (defvar js--guess-function-name-start nil)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
981
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
982 (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
983 "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
984 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
985 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
986 guessed.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
987
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
988 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
989 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
990 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
991 set that variable to nil."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
992 (setq js--guess-function-name-start nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
993 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
994 (goto-char position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
995 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
996 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
997 ((looking-at js--function-heading-3-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
998 (and (eq (match-end 0) position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
999 (setq js--guess-function-name-start (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1000 (match-string-no-properties 1)))
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 ((looking-at js--function-heading-2-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1003 (and (eq (match-end 0) position)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1004 (setq js--guess-function-name-start (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1005 (match-string-no-properties 1))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1006
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1007 (defun js--clear-stale-cache ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1008 ;; Clear any endings that occur after point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1009 (let (end-prop)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1010 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1011 (while (setq end-prop (js--forward-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1012 'js--pend))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1013 (setf (js--pitem-b-end end-prop) nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1014
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1015 ;; Remove any cache properties after this point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1016 (remove-text-properties (point) (point-max)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1017 '(js--pstate t js--pend t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1018
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1019 (defun js--ensure-cache (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1020 "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
1021 LIMIT defaults to point."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1022 (setq limit (or limit (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1023 (when (< js--cache-end limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1024
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1025 (c-save-buffer-state
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1026 (open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1027 orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1028 orig-match-end
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1029 orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1030 parse
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1031 prev-parse-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1032 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1033 case-fold-search
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1034 filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1035 new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1036 goal-point
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1037 end-prop)
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 ;; 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
1040 (setq filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1041 (loop for style in js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1042 if (memq (plist-get style :framework)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1043 js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1044 collect style))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1045
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1046 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1047 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1048 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1049
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1050 ;; Find last known good position
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1051 (goto-char js--cache-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1052 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1053 (setq open-items (get-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1054 (1- (point)) 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1055
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1056 (unless open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1057 (goto-char (previous-single-property-change
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1058 (point) 'js--pstate nil (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1059
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1060 (unless (bobp)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1061 (setq open-items (get-text-property (1- (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1062 'js--pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1063 (assert open-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1064
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1065 (unless open-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1066 ;; Make a placeholder for the top-level definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1067 (setq open-items (list js--initial-pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1068
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1069 (setq parse (syntax-ppss))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1070 (setq prev-parse-point (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1071
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1072 (js--clear-stale-cache)
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 (narrow-to-region (point-min) limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1075
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1076 (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
1077 for orig-match-start = (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1078 for orig-match-end = (match-end 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1079 do (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1080 for orig-depth = (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1081
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1082 ;; Each of these conditions should return non-nil if
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1083 ;; 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
1084 ;; 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
1085 ;; js--pitem diagram). This point is the one
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1086 ;; after the last character we need to unambiguously
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1087 ;; detect this construct. If one of these evaluates to
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1088 ;; nil, the location of the point is ignored.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1089 if (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1090 ;; In comment or string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1091 ((nth 8 parse) nil)
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 ;; Regular function declaration
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1094 ((and (looking-at "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1095 (setq name (js--forward-function-decl)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1096
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1097 (when (eq name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1098 (setq name (js--guess-function-name orig-match-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1099 (if name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1100 (when js--guess-function-name-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1101 (setq orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1102 js--guess-function-name-start))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1103
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1104 (setq name t)))
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 (assert (eq (char-after) ?{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1107 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1108 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1109 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1110 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1111 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1112 :name (if (eq name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1113 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1114 (js--split-name name))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1115
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1116 ;; Macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1117 ((looking-at js--macro-decl-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1118
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1119 ;; Macros often contain unbalanced parentheses.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1120 ;; 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
1121 ;; the macro no matter what the parenthesis say.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1122 (c-end-of-macro)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1123 (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1124
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1125 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1126 :paren-depth (nth 0 parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1127 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1128 :type 'macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1129 :name (list (match-string-no-properties 1))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1130
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1131 ;; "Prototype function" declaration
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1132 ((looking-at js--plain-method-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1133 (goto-char (match-beginning 3))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1134 (when (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1135 (js--forward-function-decl))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1136 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1137 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1138 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1139 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1140 :type 'function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1141 :name (nconc (js--split-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1142 (match-string-no-properties 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1143 (list (match-string-no-properties 2))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1144
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1145 ;; Class definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1146 ((loop with syntactic-context =
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1147 (js--syntactic-context-from-pstate open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1148 for class-style in filtered-class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1149 if (and (memq syntactic-context
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1150 (plist-get class-style :contexts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1151 (looking-at (plist-get class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1152 :class-decl)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1153 do (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1154 and return
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1155 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1156 :paren-depth orig-depth
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1157 :h-begin orig-match-start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1158 :type class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1159 :name (js--split-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1160 (match-string-no-properties 1))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1161
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1162 do (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1163 and do (push it open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1164 and do (put-text-property
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1165 (1- (point)) (point) 'js--pstate open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1166 else do (goto-char orig-match-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1167
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1168 (goto-char limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1169 (js--ensure-cache--update-parse)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1170 (setq js--cache-end limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1171 (setq js--last-parse-pos limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1172 (setq js--state-at-last-parse-pos open-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1173 )))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1174
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1175 (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
1176 "Helper function for `js-end-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1177 (loop while (js--re-search-forward "}" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1178 do (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1179 if (get-text-property (1- (point)) 'js--pend)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1180 if (eq 'function (js--pitem-type it))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1181 return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1182 finally do (goto-char (point-max))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1183
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1184 (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
1185 "Helper function for `js-end-of-defun'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1186 (message "test")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1187 (let* (pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1188 (this-end (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1189 (and (setq pitem (js--beginning-of-defun-nested))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1190 (js--pitem-goto-h-end pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1191 (progn (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1192 (forward-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1193 (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1194 found)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1195
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1196 (if (and this-end (< (point) this-end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1197 ;; 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
1198 (goto-char this-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1199
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1200 ;; Otherwise, go to the end of the next function...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1201 (while (and (js--re-search-forward "\\_<function\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1202 (not (setq found (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1203 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1204 (js--forward-function-decl))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1205
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1206 (if found (forward-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1207 ;; ... or eob.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1208 (goto-char (point-max))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1209
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1210 (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
1211 "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
1212 (setq arg (or arg 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1213 (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
1214 (incf arg)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1215 (js-beginning-of-defun)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1216 (js-beginning-of-defun)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1217 (unless (bobp)
8a45209e673f (js-end-of-defun): Remove malformed and unneeded let.
Glenn Morris <rgm@gnu.org>
parents: 104966
diff changeset
1218 (js-end-of-defun)))
104272
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 (while (> arg 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1221 (decf arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1222 ;; 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
1223 ;; 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
1224 ;; go there
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1225 (if js-flat-functions
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1226 (js--end-of-defun-flat)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1227
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1228 ;; 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
1229 ;; 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
1230 ;; 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
1231 (let ((prologue-begin (js--function-prologue-beginning)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1232 (cond ((and prologue-begin (<= prologue-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1233 (goto-char prologue-begin)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1234 (re-search-forward "\\_<function")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1235 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1236 (js--forward-function-decl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1237 (forward-list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1238
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1239 (t (js--end-of-defun-nested)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1240
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1241 (defun js--beginning-of-macro (&optional lim)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1242 (let ((here (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1243 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1244 (if lim (narrow-to-region lim (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1245 (beginning-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1246 (while (eq (char-before (1- (point))) ?\\)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1247 (forward-line -1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1248 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1249 (if (and (<= (point) here)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1250 (looking-at js--opt-cpp-start))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1251 t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1252 (goto-char here)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1253 nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1254
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1255 (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
1256 "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
1257 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1258 (when lim (narrow-to-region lim (point-max)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1259
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1260 (let ((in-macro (save-excursion (js--beginning-of-macro)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1261 (pos (point)))
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 (while (progn (unless in-macro (js--beginning-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1264 (forward-comment most-negative-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1265 (/= (point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1266 (prog1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1267 pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1268 (setq pos (point)))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1269
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1270 (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
1271 "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
1272 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1273 (when lim (narrow-to-region (point-min) lim))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1274 (let ((pos (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1275 (while (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1276 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1277 (when (eq (char-after) ?#)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1278 (c-end-of-macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1279 (/= (point)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1280 (prog1
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1281 pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1282 (setq pos (point)))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1283
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1284 ;; 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
1285 (defun js--up-nearby-list ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1286 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1287 ;; 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
1288 ;; explode in pathological cases.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1289 (narrow-to-region (max (point-min) (- (point) 500)) (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1290 (up-list -1)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1291
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1292 (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
1293 "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
1294 (ignore-errors
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1295 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1296 (js--up-nearby-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1297 (and (looking-at "(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1298 (progn (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1299 (or (looking-at "function")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1300 (progn (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1301 (looking-at "function"))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1302
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1303 (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
1304 "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
1305 (ignore-errors
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1306 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1307 (js--up-nearby-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1308 (let ((list-begin (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1309 (forward-line 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1310 (and (looking-at js--dojo-class-decl-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1311 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1312 (looking-at "\"\\s-*,\\s-*\\[")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1313 (eq (match-end 0) (1+ list-begin)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1314
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1315 (defun js--syntax-begin-function ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1316 (when (< js--cache-end (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1317 (goto-char (max (point-min) js--cache-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1318
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1319 (let ((pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1320 (while (and (setq pitem (car (js--backward-pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1321 (not (eq 0 (js--pitem-paren-depth pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1322
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1323 (when pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1324 (goto-char (js--pitem-h-begin pitem )))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1325
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1326 ;;; Font Lock
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1327 (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
1328 "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
1329 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
1330 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
1331 (setq regexps (apply #'concat regexps))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1332 (byte-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1333 `(lambda (limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1334 (when (memq (quote ,framework) js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1335 (re-search-forward ,regexps limit t)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1336
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1337 (defvar js--tmp-location nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1338 (make-variable-buffer-local 'js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1339
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1340 (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
1341 "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
1342 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
1343 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
1344 spec. FUNC must preserve the match data."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1345 (case (char-after)
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 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1348 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1349 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1350 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1351 (cond ((memq (char-after) '(?\[ ?\{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1352 (js--forward-destructuring-spec func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1353
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1354 ((eq (char-after) ?,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1355 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1356 t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1357
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1358 ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1359 (and func (funcall func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1360 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1361 t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1362 (when (eq (char-after) ?\])
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1363 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1364 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1365
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1366 (?\{
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1367 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1368 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1369 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1370 (when (looking-at js--objfield-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1371 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1372 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1373 (and (cond ((memq (char-after) '(?\[ ?\{))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1374 (js--forward-destructuring-spec func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1375 ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1376 (and func (funcall func))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1377 (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1378 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1379 (progn (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1380 (when (eq (char-after) ?\,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1381 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1382 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1383 t)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1384 (when (eq (char-after) ?\})
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1385 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1386 t))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1387
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1388 (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
1389 "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
1390 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
1391 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
1392 `font-lock-apply-highlight'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1393 (condition-case nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1394 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1395 (narrow-to-region (point-min) limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1396
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1397 (let ((first t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1398 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1399 (while
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1400 (and (or first
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1401 (when (eq (char-after) ?,)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1402 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1403 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1404 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1405 (cond ((looking-at js--name-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1406 (font-lock-apply-highlight
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1407 '(0 font-lock-variable-name-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1408 (goto-char (match-end 0)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1409
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1410 ((save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1411 (js--forward-destructuring-spec))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1412
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1413 (js--forward-destructuring-spec
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1414 (lambda ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1415 (font-lock-apply-highlight
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1416 '(0 font-lock-variable-name-face)))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1417
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1418 (forward-comment most-positive-fixnum)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1419 (when (eq (char-after) ?=)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1420 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1421 (js--forward-expression)
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1424 (setq first nil))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1425
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1426 ;; Conditions to handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1427 (scan-error nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1428 (end-of-buffer nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1429
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1430 ;; Matcher always "fails"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1431 nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1432
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1433 (defconst js--font-lock-keywords-3
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1434 `(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1435 ;; 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
1436 ;; 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
1437 ;; because that will override syntactic fontification too, which
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1438 ;; 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
1439 ;; commented out.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1440 ,@cpp-font-lock-keywords ; from font-lock.el
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 ,@js--font-lock-keywords-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1443
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1444 ("\\.\\(prototype\\)\\_>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1445 (1 font-lock-constant-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1446
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1447 ;; Highlights class being declared, in parts
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1448 (js--class-decl-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1449 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1450 (goto-char (match-beginning 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1451 nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1452 (1 font-lock-type-face))
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 ;; Highlights parent class, in parts, if available
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1455 (js--class-decl-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1456 ,(concat "\\(" js--name-re "\\)\\(?:\\.\\|.*$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1457 (if (match-beginning 2)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1458 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1459 (setq js--tmp-location (match-end 2))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1460 (goto-char js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1461 (insert "=")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1462 (goto-char (match-beginning 2)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1463 (setq js--tmp-location nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1464 (goto-char (point-at-eol)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1465 (when js--tmp-location
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1466 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1467 (goto-char js--tmp-location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1468 (delete-char 1)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1469 (1 font-lock-type-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 parent class
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 (2 font-lock-type-face nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1474
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1475 ;; 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
1476 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1477 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1478 "^\\s-*dojo\\.declare\\s-*(\""
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1479 "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1480 "\\(?:\"\\s-*,\\s-*\\(" js--dotted-name-re "\\)\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1481 (1 font-lock-type-face t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1482 (2 font-lock-type-face nil t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1483
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1484 ;; 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
1485 ;; from everything else under the sun...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1486 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1487 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1488 "^\\s-*dojo\\.declare\\s-*(\""
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1489 "\\(" js--dotted-name-re "\\)\"\\s-*,\\s-*\\[")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1490 ,(concat "[[,]\\s-*\\(" js--dotted-name-re "\\)\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1491 "\\(?:\\].*$\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1492 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1493 (end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1494 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1495
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1496 ;; continued Dojo base-class list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1497 (,(js--make-framework-matcher
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1498 'dojo
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1499 "^\\s-*" js--dotted-name-re "\\s-*[],]")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1500 ,(concat "\\(" js--dotted-name-re "\\)"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1501 "\\s-*\\(?:\\].*$\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1502 (if (save-excursion (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1503 (js--inside-dojo-class-list-p))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1504 (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1505 (end-of-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1506 (end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1507 (1 font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1508
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1509 ;; variable declarations
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1510 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1511 (concat "\\_<\\(const\\|var\\|let\\)\\_>\\|" js--basic-type-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1512 (list #'js--variable-decl-matcher nil nil nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1513
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1514 ;; class instantiation
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1515 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1516 (concat "\\_<new\\_>\\s-+\\(" js--dotted-name-re "\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1517 (list 1 'font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1518
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1519 ;; instanceof
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1520 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1521 (concat "\\_<instanceof\\_>\\s-+\\(" js--dotted-name-re "\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1522 (list 1 'font-lock-type-face))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1523
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1524 ;; formal parameters
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1525 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1526 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1527 "\\_<function\\_>\\(\\s-+" js--name-re "\\)?\\s-*(\\s-*"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1528 js--name-start-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1529 (list (concat "\\(" js--name-re "\\)\\(\\s-*).*\\)?")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1530 '(backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1531 '(end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1532 '(1 font-lock-variable-name-face)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1533
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1534 ;; continued formal parameter list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1535 ,(list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1536 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1537 "^\\s-*" js--name-re "\\s-*[,)]")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1538 (list js--name-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1539 '(if (save-excursion (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1540 (js--inside-param-list-p))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1541 (forward-symbol -1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1542 (end-of-line))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1543 '(end-of-line)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1544 '(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
1545 "Level three font lock for `js-mode'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1546
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1547 (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
1548 "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
1549 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1550 (assert (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1551 (assert (js--pitem-paren-depth pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1552
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1553 (and (> (point) (js--pitem-h-begin pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1554 (or (null (js--pitem-b-end pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1555 (> (js--pitem-b-end pitem) (point)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1556
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1557 (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
1558 "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
1559 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
1560 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
1561 will be returned."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1562 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1563 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1564 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1565 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1566 (let* ((bound (if (eobp) (point) (1+ (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1567 (pstate (or (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1568 (js--backward-pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1569 (list js--initial-pitem))))
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 ;; 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
1572 ;; point (or at point if we're at eob)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1573 (loop for pitem = (car pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1574 until (or (eq (js--pitem-type pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1575 'toplevel)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1576 (js--inside-pitem-p pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1577 do (pop pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1578
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1579 pstate))))
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--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
1582 "Return the JavaScript syntactic context corresponding to PSTATE."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1583 (let ((type (js--pitem-type (car pstate))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1584 (cond ((memq type '(function macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1585 type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1586 ((consp type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1587 'class)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1588 (t 'toplevel))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1589
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1590 (defun js-syntactic-context ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1591 "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
1592 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
1593 context."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1594 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1595 (let* ((syntactic-context (js--syntactic-context-from-pstate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1596 (js--parse-state-at-point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1597
105372
bd2966850aac Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents: 105076
diff changeset
1598 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1599 (message "Syntactic context: %s" syntactic-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1600
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1601 syntactic-context))
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 (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
1604 "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
1605 This performs fontification according to `js--class-styles'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1606 (loop initially (js--ensure-cache limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1607 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
1608 for orig-end = (match-end 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1609 do (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1610 if (loop for style in js--class-styles
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1611 for decl-re = (plist-get style :class-decl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1612 if (and (memq (plist-get style :framework)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1613 js-enabled-frameworks)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1614 (memq (js-syntactic-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1615 (plist-get style :contexts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1616 decl-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1617 (looking-at decl-re))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1618 do (goto-char (match-end 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1619 and return t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1620 return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1621 else do (goto-char orig-end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1622
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1623 (defconst js--font-lock-keywords
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1624 '(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
1625 js--font-lock-keywords-2
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1626 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
1627 "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
1628
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1629 ;; 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
1630 ;; 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
1631 ;; below.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1632 (defconst js--regexp-literal
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1633 "[=(,:]\\(?:\\s-\\|\n\\)*\\(/\\)\\(?:\\\\/\\|[^/*]\\)\\(?:\\\\/\\|[^/]\\)*\\(/\\)"
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1634 "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
1635 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
1636 end of the literal.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1637
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1638 ;; 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
1639 ;; expressions
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1640 (defconst js-font-lock-syntactic-keywords
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1641 `((,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
1642 "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
1643 See `font-lock-keywords'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1644
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1645 ;;; Indentation
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--possibly-braceless-keyword-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1648 (js--regexp-opt-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1649 '("catch" "do" "else" "finally" "for" "if" "try" "while" "with"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1650 "each"))
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1651 "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
1652
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1653 (defconst js--indent-operator-re
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1654 (concat "[-+*/%<>=&^|?:.]\\([^-+*/]\\|$\\)\\|"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1655 (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
1656 "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
1657
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1658
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1659 (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
1660 "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
1661 (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1662 (and (looking-at js--indent-operator-re)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1663 (or (not (looking-at ":"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1664 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1665 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1666 (looking-at "?")))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1667
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 (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
1670 "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
1671 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1672 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1673 (or (js--looking-at-operator-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1674 (and (js--re-search-backward "\n" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1675 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1676 (skip-chars-backward " \t")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1677 (or (bobp) (backward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1678 (and (> (point) (point-min))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1679 (save-excursion (backward-char) (not (looking-at "[/*]/")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1680 (js--looking-at-operator-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1681 (and (progn (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1682 (not (looking-at "++\\|--\\|/[/*]"))))))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1683
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1684
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1685 (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
1686 "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
1687 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
1688 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
1689 the same column as the current line."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1690 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1691 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1692 (save-match-data
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1693 (when (looking-at "\\s-*\\_<while\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1694 (if (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1695 (skip-chars-backward "[ \t\n]*}")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1696 (looking-at "[ \t\n]*}"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1697 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1698 (backward-list) (forward-symbol -1) (looking-at "\\_<do\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1699 (js--re-search-backward "\\_<do\\_>" (point-at-bol) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1700 (or (looking-at "\\_<do\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1701 (let ((saved-indent (current-indentation)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1702 (while (and (js--re-search-backward "^\\s-*\\_<" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1703 (/= (current-indentation) saved-indent)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1704 (and (looking-at "\\s-*\\_<do\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1705 (not (js--re-search-forward
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1706 "\\_<while\\_>" (point-at-eol) t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1707 (= (current-indentation) saved-indent)))))))))
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1710 (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
1711 "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
1712 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
1713 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
1714 nil."
104272
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 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1717 (when (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1718 (and (not (eq (point-at-bol) (point-min)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1719 (not (looking-at "[{]"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1720 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1721 (js--re-search-backward "[[:graph:]]" nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1722 (or (eobp) (forward-char))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1723 (when (= (char-before) ?\)) (backward-list))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1724 (skip-syntax-backward " ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1725 (skip-syntax-backward "w_")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1726 (looking-at js--possibly-braceless-keyword-re))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1727 (not (js--end-of-do-while-loop-p))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1728 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1729 (goto-char (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1730 (+ (current-indentation) js-indent-level)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1731
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1732 (defun js--get-c-offset (symbol anchor)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1733 (let ((c-offsets-alist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1734 (list (cons 'c js-comment-lineup-func))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1735 (c-get-syntactic-indentation (list (cons symbol anchor)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1736
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1737 (defun js--proper-indentation (parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1738 "Return the proper indentation for the current line."
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 (cond ((nth 4 parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1742 (js--get-c-offset 'c (nth 8 parse-status)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1743 ((nth 8 parse-status) 0) ; inside string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1744 ((js--ctrl-statement-indentation))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1745 ((eq (char-after) ?#) 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1746 ((save-excursion (js--beginning-of-macro)) 4)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1747 ((nth 1 parse-status)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1748 (let ((same-indent-p (looking-at
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1749 "[]})]\\|\\_<case\\_>\\|\\_<default\\_>"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1750 (continued-expr-p (js--continued-expression-p)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1751 (goto-char (nth 1 parse-status))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1752 (if (looking-at "[({[]\\s-*\\(/[/*]\\|$\\)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1753 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1754 (skip-syntax-backward " ")
104966
754f505b6d27 * progmodes/js.el (js--proper-indentation): Handle the case where
Chong Yidong <cyd@stupidchicken.com>
parents: 104683
diff changeset
1755 (when (eq (char-before) ?\)) (backward-list))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1756 (back-to-indentation)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1757 (cond (same-indent-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1758 (current-column))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1759 (continued-expr-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1760 (+ (current-column) (* 2 js-indent-level)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1761 js-expr-indent-offset))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1762 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1763 (+ (current-column) js-indent-level))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1764 (unless same-indent-p
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1765 (forward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1766 (skip-chars-forward " \t"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1767 (current-column))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1768
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1769 ((js--continued-expression-p)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1770 (+ js-indent-level js-expr-indent-offset))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1771 (t 0))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1772
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1773 (defun js-indent-line ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
1774 "Indent the current line as JavaScript."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1775 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1776 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1777 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1778 (let* ((parse-status
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1779 (save-excursion (syntax-ppss (point-at-bol))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1780 (offset (- (current-column) (current-indentation))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1781 (indent-line-to (js--proper-indentation parse-status))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1782 (when (> offset 0) (forward-char offset)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1783
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1784 ;;; Filling
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1785
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1786 (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
1787 "Fill the paragraph with `c-fill-paragraph'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1788 (interactive "*P")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1789 (flet ((c-forward-sws
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1790 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1791 (js--forward-syntactic-ws limit))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1792 (c-backward-sws
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1793 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1794 (js--backward-syntactic-ws limit))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1795 (c-beginning-of-macro
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1796 (&optional limit)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1797 (js--beginning-of-macro limit)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1798 (let ((fill-paragraph-function 'c-fill-paragraph))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1799 (c-fill-paragraph justify))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1800
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1801 ;;; Type database and Imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1802
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1803 ;; 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
1804 ;; 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
1805 ;; 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
1806 ;; 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
1807 ;; 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
1808 ;; parse state, the empty state.
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 ;; 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
1811 ;; 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
1812 ;; closed, that is initially js--initial-pitem.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1813 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1814
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1815
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1816 (defun js--pitem-format (pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1817 (let ((name (js--pitem-name pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1818 (type (js--pitem-type pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1819
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1820 (format "name:%S type:%S"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1821 name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1822 (if (atom type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1823 type
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1824 (plist-get type :name)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1825
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1826 (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
1827 "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
1828 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
1829 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
1830 that we haven't consumed yet."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1831 (js--debug "js--make-merged-item: {%s} into {%s}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1832 (js--pitem-format child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1833 (js--pitem-format item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1834
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1835 ;; 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
1836 (unless (consp (js--pitem-type item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1837 (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
1838 (setq item (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1839 :children (list item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1840
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1841 ;; 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
1842 :type (if (atom (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1843 js--dummy-class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1844 (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1845
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1846 :name (js--pitem-strname item))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1847
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1848 ;; 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
1849 (cons (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1850 ((cdr name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1851 (js--debug "js--make-merged-item: recursing")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1852 ;; 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
1853 ;; bottom of the class hierarchy, call the merger
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1854 ;; recursively
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1855 (js--splice-into-items (car item) child
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1856 (cdr name-parts)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1857
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1858 ((atom (js--pitem-type child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1859 (js--debug "js--make-merged-item: straight merge")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1860 ;; 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
1861 ;; it
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1862 (cons child (car item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1863
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1864 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1865 ;; Otherwise, merge the new child's items into those
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1866 ;; of the new class
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1867 (js--debug "js--make-merged-item: merging class contents")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1868 (append (car child) (car item))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1869 (cdr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1870
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1871 (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
1872 "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
1873 (let ((name (js--pitem-name pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1874 (if (consp name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1875 (car (last name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1876 name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1877
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1878 (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
1879 "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
1880 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
1881 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
1882 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
1883
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1884 (let ((top-name (car name-parts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1885 (item-ptr items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1886 new-items last-new-item new-cons 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 (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
1889 name-parts
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1890 (mapcar #'js--pitem-name items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1891
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1892 (assert (stringp top-name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1893 (assert (> (length top-name) 0))
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 ;; 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
1896 ;; 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
1897 ;; *will* find an instance.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1898
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1899 (while (and item-ptr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1900 (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
1901 ;; 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
1902 ;; the merged item into the list...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1903 (setq new-cons (cons (js--make-merged-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1904 (car item-ptr) child
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1905 name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1906 (cdr item-ptr)))
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 (if last-new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1909 (setcdr last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1910 (setq new-items new-cons))
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 ;; ...and terminate the loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1913 nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1914
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1915 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1916 ;; Otherwise, copy the current cons and move onto the
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1917 ;; 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
1918 ;; the list that begins with new-items in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1919 ;; last-new-item.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1920 (setq new-cons (cons (car item-ptr) nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1921 (if last-new-item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1922 (setcdr last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1923 (setq new-items new-cons))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1924 (setq last-new-item new-cons)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1925
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1926 ;; Go to the next cell in items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1927 (setq item-ptr (cdr item-ptr))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1928
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1929 (if item-ptr
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1930 ;; Yay! We stopped because we found something, not because
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1931 ;; 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
1932 ;; list.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1933 (progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1934 (js--debug "search succeeded: %S" name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1935 new-items)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1936
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1937 ;; 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
1938 ;; 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
1939 ;; otherwise, make a fake class and carry on.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1940 (js--debug "search failed: %S" name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1941 (cons (if (cdr name-parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1942 ;; 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
1943 ;; class for this particular part...
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1944 (make-js--pitem
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1945 ;; ...and recursively digest the rest of the name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1946 :children (js--splice-into-items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1947 nil child (cdr name-parts))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1948 :type js--dummy-class-style
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1949 :name top-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1950
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1951 ;; 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
1952 ;; the item on the front of the list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1953 child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1954 items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1955
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1956 (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
1957 "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
1958 (assert (integerp (js--pitem-h-begin child)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1959 (assert (if (consp (js--pitem-name child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1960 (loop for part in (js--pitem-name child)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1961 always (stringp part))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1962 t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1963
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1964 ;; 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
1965 ;; 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
1966 ;; 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
1967 (cons
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1968
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1969 (let ((name (js--pitem-name child))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1970 (type (js--pitem-type child)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1971
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1972 (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
1973 ;; Use slow path because we need class lookup
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1974 (js--splice-into-items (car pitem) child name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1975
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1976 ((and (consp type)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1977 (plist-get type :prototype))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1978
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1979 ;; 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
1980 ;; name is a list here because down in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1981 ;; `js--ensure-cache', we made sure to only add
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1982 ;; class entries with lists for :name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1983 (assert (consp name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1984 (js--splice-into-items (car pitem) child name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1985
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 ;; Fast path
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1988 (cons child (car pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1989
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1990 (cdr pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1991
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1992 (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
1993 "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
1994 (if imenu-use-markers
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1995 (set-marker (make-marker) location)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1996 location))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1997
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1998 (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
1999 "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
2000
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2001 (let (imenu-items pitem pitem-type pitem-name subitems)
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 (while (setq pitem (pop pitems))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2004 (setq pitem-type (js--pitem-type pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2005 (setq pitem-name (js--pitem-strname pitem))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2006 (when (eq pitem-name t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2007 (setq pitem-name (format "[unknown %s]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2008 (incf (car unknown-ctr)))))
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 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2011 ((memq pitem-type '(function macro))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2012 (assert (integerp (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2013 (push (cons pitem-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2014 (js--maybe-make-marker
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2015 (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2016 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2017
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2018 ((consp pitem-type) ; class definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2019 (setq subitems (js--pitems-to-imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2020 (js--pitem-children pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2021 unknown-ctr))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2022 (cond (subitems
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2023 (push (cons pitem-name subitems)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2024 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2025
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2026 ((js--pitem-h-begin pitem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2027 (assert (integerp (js--pitem-h-begin pitem)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2028 (setq subitems (list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2029 (cons "[empty]"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2030 (js--maybe-make-marker
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2031 (js--pitem-h-begin pitem)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2032 (push (cons pitem-name subitems)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2033 imenu-items))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2034
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2035 (t (error "Unknown item type: %S" pitem-type))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2036
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2037 imenu-items))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2038
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2039 (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
2040 "Return an imenu index for the current buffer."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2041 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2042 (save-restriction
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2043 (widen)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2044 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2045 (js--ensure-cache)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2046 (assert (or (= (point-min) (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2047 (eq js--last-parse-pos (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2048 (when js--last-parse-pos
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2049 (let ((state js--state-at-last-parse-pos)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2050 (unknown-ctr (cons -1 nil)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2051
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2052 ;; Make sure everything is closed
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2053 (while (cdr state)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2054 (setq state
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2055 (cons (js--pitem-add-child (second state) (car state))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2056 (cddr state))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2057
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2058 (assert (= (length state) 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2059
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2060 ;; Convert the new-finalized state into what imenu expects
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2061 (js--pitems-to-imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2062 (car (js--pitem-children state))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2063 unknown-ctr))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2064
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2065 ;; Silence the compiler.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2066 (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
2067
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2068 (defun js--which-func-joiner (parts)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2069 (mapconcat #'identity parts "."))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2070
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2071 (defun js--imenu-to-flat (items prefix symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2072 (loop for item in items
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2073 if (imenu--subalist-p item)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2074 do (js--imenu-to-flat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2075 (cdr item) (concat prefix (car item) ".")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2076 symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2077 else
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2078 do (let* ((name (concat prefix (car item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2079 (name2 name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2080 (ctr 0))
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 (while (gethash name2 symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2083 (setq name2 (format "%s<%d>" name (incf ctr))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2084
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2085 (puthash name2 (cdr item) symbols))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2086
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2087 (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
2088 "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
2089 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
2090 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
2091 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
2092 (loop with symbols = (make-hash-table :test 'equal)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2093 with imenu-use-markers = t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2094 for buffer being the buffers
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2095 for imenu-index = (with-current-buffer buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2096 (when (eq major-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2097 (js--imenu-create-index)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2098 do (js--imenu-to-flat imenu-index "" symbols)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2099 finally return symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2100
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2101 (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
2102 "History of entered JavaScript symbols.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2103
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2104 (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
2105 "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
2106 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
2107 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
2108 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
2109 . 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
2110 marker."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2111 (unless ido-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2112 (ido-mode t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2113 (ido-mode nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2114
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2115 (let ((choice (ido-completing-read
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2116 prompt
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2117 (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
2118 collect key)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2119 nil t initial-input 'js--symbol-history)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2120 (cons choice (gethash choice symbols-table))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2121
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2122 (defun js--guess-symbol-at-point ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2123 (let ((bounds (bounds-of-thing-at-point 'symbol)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2124 (when bounds
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2125 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2126 (goto-char (car bounds))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2127 (when (eq (char-before) ?.)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2128 (backward-char)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2129 (setf (car bounds) (point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2130 (buffer-substring (car bounds) (cdr bounds)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2131
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2132 (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
2133 "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
2134 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
2135 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
2136 `find-tag'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2137 (interactive "P")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2138 (let (symbols marker)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2139 (if (not arg)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2140 (setq symbols (js--get-all-known-symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2141 (setq symbols (make-hash-table :test 'equal))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2142 (js--imenu-to-flat (js--imenu-create-index)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2143 "" symbols))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2144
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2145 (setq marker (cdr (js--read-symbol
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2146 symbols "Jump to: "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2147 (js--guess-symbol-at-point))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2148
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2149 (ring-insert find-tag-marker-ring (point-marker))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2150 (switch-to-buffer (marker-buffer marker))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2151 (push-mark)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2152 (goto-char marker)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2153
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2154 ;;; MozRepl integration
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 (put 'js-moz-bad-rpc 'error-conditions '(error timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2157 (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
2158
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2159 (put 'js-js-error 'error-conditions '(error js-error))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2160 (put 'js-js-error 'error-message "Javascript Error")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2161
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2162 (defun js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2163 (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
2164 "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
2165 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
2166 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
2167 Otherwise, use the current value of `process-mark'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2168 (with-current-buffer (process-buffer process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2169 (loop with start-pos = (or start
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2170 (marker-position (process-mark process)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2171 with end-time = (+ (float-time) timeout)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2172 for time-left = (- end-time (float-time))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2173 do (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2174 if (looking-back regexp start-pos) return t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2175 while (> time-left 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2176 do (accept-process-output process time-left nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2177 do (goto-char (process-mark process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2178 finally do (signal
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2179 'js-moz-bad-rpc
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2180 (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
2181
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2182 (defstruct js--js-handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2183 ;; Integer, mirrors the value we see in JS
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2184 (id nil :read-only t)
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 ;; Process to which this thing belongs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2187 (process nil :read-only t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2188
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2189 (defun js--js-handle-expired-p (x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2190 (not (eq (js--js-handle-process x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2191 (inferior-moz-process))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2192
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2193 (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
2194 "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
2195
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2196 (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
2197 "The most recent MozRepl process object.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2198
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2199 (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
2200 "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
2201
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2202 (defvar js--js-last-gcs-done nil)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2203
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2204 (defconst js--moz-interactor
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2205 (replace-regexp-in-string
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2206 "[ \n]+" " "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2207 ; */" Make Emacs happy
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2208 "(function(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2209 repl.defineInteractor('js', {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2210 onStart: function onStart(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2211 if(!repl._jsObjects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2212 repl._jsObjects = {};
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2213 repl._jsLastID = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2214 repl._jsGC = this._jsGC;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2215 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2216 this._input = '';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2217 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2218
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2219 _jsGC: function _jsGC(ids_in_use) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2220 var objects = this._jsObjects;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2221 var keys = [];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2222 var num_freed = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2223
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2224 for(var pn in objects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2225 keys.push(Number(pn));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2226 }
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 keys.sort(function(x, y) x - y);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2229 ids_in_use.sort(function(x, y) x - y);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2230 var i = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2231 var j = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2232
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2233 while(i < ids_in_use.length && j < keys.length) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2234 var id = ids_in_use[i++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2235 while(j < keys.length && keys[j] !== id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2236 var k_id = keys[j++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2237 delete objects[k_id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2238 ++num_freed;
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 ++j;
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 while(j < keys.length) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2244 var k_id = keys[j++];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2245 delete objects[k_id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2246 ++num_freed;
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2249 return num_freed;
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 _mkArray: function _mkArray() {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2253 var result = [];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2254 for(var i = 0; i < arguments.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2255 result.push(arguments[i]);
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 return result;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2258 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2259
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2260 _parsePropDescriptor: function _parsePropDescriptor(parts) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2261 if(typeof parts === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2262 parts = [ parts ];
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2265 var obj = parts[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2266 var start = 1;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2267
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2268 if(typeof obj === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2269 obj = window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2270 start = 0;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2271 } else if(parts.length < 2) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2272 throw new Error('expected at least 2 arguments');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2273 }
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 for(var i = start; i < parts.length - 1; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2276 obj = obj[parts[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2277 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2278
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2279 return [obj, parts[parts.length - 1]];
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2282 _getProp: function _getProp(/*...*/) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2283 if(arguments.length === 0) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2284 throw new Error('no arguments supplied to getprop');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2285 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2286
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2287 if(arguments.length === 1 &&
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2288 (typeof arguments[0]) !== 'string')
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2289 {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2290 return arguments[0];
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2293 var [obj, propname] = this._parsePropDescriptor(arguments);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2294 return obj[propname];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2295 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2296
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2297 _putProp: function _putProp(properties, value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2298 var [obj, propname] = this._parsePropDescriptor(properties);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2299 obj[propname] = value;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2300 },
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 _delProp: function _delProp(propname) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2303 var [obj, propname] = this._parsePropDescriptor(arguments);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2304 delete obj[propname];
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2307 _typeOf: function _typeOf(thing) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2308 return typeof thing;
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 _callNew: function(constructor) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2312 if(typeof constructor === '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 constructor = window[constructor];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2315 } else if(constructor.length === 1 &&
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2316 typeof constructor[0] !== 'string')
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2317 {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2318 constructor = constructor[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2319 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2320 var [obj,propname] = this._parsePropDescriptor(constructor);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2321 constructor = obj[propname];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2322 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2323
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2324 /* Hacky, but should be robust */
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2325 var s = 'new constructor(';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2326 for(var i = 1; i < arguments.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2327 if(i != 1) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2328 s += ',';
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 s += 'arguments[' + i + ']';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2332 }
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 s += ')';
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2335 return eval(s);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2336 },
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 _callEval: function(thisobj, js) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2339 return eval.call(thisobj, js);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2340 },
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 getPrompt: function getPrompt(repl) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2343 return 'EVAL>'
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2344 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2345
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2346 _lookupObject: function _lookupObject(repl, id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2347 if(typeof id === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2348 switch(id) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2349 case 'global':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2350 return window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2351 case 'nil':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2352 return null;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2353 case 't':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2354 return true;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2355 case 'false':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2356 return false;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2357 case 'undefined':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2358 return undefined;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2359 case 'repl':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2360 return repl;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2361 case 'interactor':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2362 return this;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2363 case 'NaN':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2364 return NaN;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2365 case 'Infinity':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2366 return Infinity;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2367 case '-Infinity':
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2368 return -Infinity;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2369 default:
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2370 throw new Error('No object with special id:' + id);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2371 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2372 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2373
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2374 var ret = repl._jsObjects[id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2375 if(ret === undefined) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2376 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
2377 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2378 return ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2379 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2380
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2381 _findOrAllocateObject: function _findOrAllocateObject(repl, value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2382 if(typeof value !== 'object' && typeof value !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2383 throw new Error('_findOrAllocateObject called on non-object('
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2384 + typeof(value) + '): '
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2385 + value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2386 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2387
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2388 for(var id in repl._jsObjects) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2389 id = Number(id);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2390 var obj = repl._jsObjects[id];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2391 if(obj === value) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2392 return id;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2393 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2394 }
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 var id = ++repl._jsLastID;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2397 repl._jsObjects[id] = value;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2398 return id;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2399 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2400
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2401 _fixupList: function _fixupList(repl, list) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2402 for(var i = 0; i < list.length; ++i) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2403 if(list[i] instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2404 this._fixupList(repl, list[i]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2405 } else if(typeof list[i] === 'object') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2406 var obj = list[i];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2407 if(obj.funcall) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2408 var parts = obj.funcall;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2409 this._fixupList(repl, parts);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2410 var [thisobj, func] = this._parseFunc(parts[0]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2411 list[i] = func.apply(thisobj, parts.slice(1));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2412 } else if(obj.objid) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2413 list[i] = this._lookupObject(repl, obj.objid);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2414 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2415 throw new Error('Unknown object type: ' + obj.toSource());
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2416 }
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2421 _parseFunc: function(func) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2422 var thisobj = null;
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 if(typeof func === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2425 func = window[func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2426 } else if(func instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2427 if(func.length === 1 && typeof func[0] !== 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2428 func = func[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2429 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2430 [thisobj, func] = this._parsePropDescriptor(func);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2431 func = thisobj[func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2432 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2433 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2434
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2435 return [thisobj,func];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2436 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2437
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2438 _encodeReturn: function(value, array_as_mv) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2439 var ret;
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 if(value === null) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2442 ret = ['special', 'null'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2443 } else if(value === true) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2444 ret = ['special', 'true'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2445 } else if(value === false) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2446 ret = ['special', 'false'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2447 } else if(value === undefined) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2448 ret = ['special', 'undefined'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2449 } else if(typeof value === 'number') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2450 if(isNaN(value)) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2451 ret = ['special', 'NaN'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2452 } else if(value === Infinity) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2453 ret = ['special', 'Infinity'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2454 } else if(value === -Infinity) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2455 ret = ['special', '-Infinity'];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2456 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2457 ret = ['atom', value];
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 } else if(typeof value === 'string') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2460 ret = ['atom', value];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2461 } else if(array_as_mv && value instanceof Array) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2462 ret = ['array', value.map(this._encodeReturn, this)];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2463 } else {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2464 ret = ['objid', this._findOrAllocateObject(repl, value)];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2465 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2466
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2467 return ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2468 },
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2469
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2470 _handleInputLine: function _handleInputLine(repl, line) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2471 var ret;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2472 var array_as_mv = false;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2473
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2474 try {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2475 if(line[0] === '*') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2476 array_as_mv = true;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2477 line = line.substring(1);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2478 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2479 var parts = eval(line);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2480 this._fixupList(repl, parts);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2481 var [thisobj, func] = this._parseFunc(parts[0]);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2482 ret = this._encodeReturn(
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2483 func.apply(thisobj, parts.slice(1)),
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2484 array_as_mv);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2485 } catch(x) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2486 ret = ['error', x.toString() ];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2487 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2488
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2489 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
2490 repl.print(JSON.encode(ret));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2491 repl._prompt();
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 handleInput: function handleInput(repl, chunk) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2495 this._input += chunk;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2496 var match, line;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2497 while(match = this._input.match(/.*\\n/)) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2498 line = match[0];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2499
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2500 if(line === 'EXIT\\n') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2501 repl.popInteractor();
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2502 repl._prompt();
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2503 return;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2504 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2505
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2506 this._input = this._input.substring(line.length);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2507 this._handleInputLine(repl, line);
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2508 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2509 }
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2510 });
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
104683
2b8eeeaa8c1d * international/ucs-normalize.el (ucs-normalize-sort, quick-check-list):
Juanma Barranquero <lekktu@gmail.com>
parents: 104391
diff changeset
2514 "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
2515
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2516 (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
2517 "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
2518 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
2519 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
2520 with `js--js-encode-value'."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2521 (cond ((stringp x) (json-encode-string x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2522 ((numberp x) (json-encode-number x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2523 ((symbolp x) (format "{objid:%S}" (symbol-name x)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2524 ((js--js-handle-p x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2525
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2526 (when (js--js-handle-expired-p x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2527 (error "Stale JS handle"))
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 (format "{objid:%s}" (js--js-handle-id x)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2530
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2531 ((sequencep x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2532 (if (eq (car-safe x) 'js--funcall)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2533 (format "{funcall:[%s]}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2534 (mapconcat #'js--js-encode-value (cdr x) ","))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2535 (concat
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2536 "[" (mapconcat #'js--js-encode-value x ",") "]")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2537 (t
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2538 (error "Unrecognized item: %S" x))))
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 (defconst js--js-prompt-regexp "\\(repl[0-9]*\\)> $")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2541 (defconst js--js-repl-prompt-regexp "^EVAL>$")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2542 (defvar js--js-repl-depth 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2543
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2544 (defun js--js-wait-for-eval-prompt ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2545 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2546 (inferior-moz-process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2547 js--js-repl-prompt-regexp js-js-timeout
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2548
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2549 ;; start matching against the beginning of the line in
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2550 ;; 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
2551 (save-excursion (forward-line 0) (point))))
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 (defun js--js-enter-repl ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2554 (inferior-moz-process) ; called for side-effect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2555 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2556 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2557
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2558 ;; 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
2559 (unless (eq (inferior-moz-process) js--js-process)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2560 (setq js--js-process (inferior-moz-process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2561 (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
2562 (setq js--js-repl-depth 0)
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 ;; Send interactor definition
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2565 (comint-send-string js--js-process js--moz-interactor)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2566 (comint-send-string js--js-process
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2567 (concat "(" moz-repl-name ")\n"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2568 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2569 (inferior-moz-process) js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2570 js-js-timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2571
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2572 ;; Sanity check
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2573 (when (looking-back js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2574 (save-excursion (forward-line 0) (point)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2575 (setq js--js-repl-depth 0))
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 (if (> js--js-repl-depth 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2578 ;; 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
2579 ;; 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
2580 ;; up with us.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2581 (js--js-wait-for-eval-prompt)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2582
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2583 ;; Otherwise, tell Mozilla to enter the interactor mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2584 (insert (match-string-no-properties 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2585 ".pushInteractor('js')")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2586 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2587 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2588 (inferior-moz-process) js--js-repl-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2589 js-js-timeout))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2590
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2591 (incf js--js-repl-depth)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2592
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2593 (defun js--js-leave-repl ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2594 (assert (> js--js-repl-depth 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2595 (when (= 0 (decf js--js-repl-depth))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2596 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2597 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2598 (js--js-wait-for-eval-prompt)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2599 (insert "EXIT")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2600 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2601 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2602 (inferior-moz-process) js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2603 js-js-timeout))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2604
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2605 (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
2606 (memq value '(nil null false undefined)))
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2607
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2608 (defsubst js--js-true (value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2609 (not (js--js-not value)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2610
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2611 (eval-and-compile
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2612 (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
2613 "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
2614 (loop for item in arglist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2615 if (eq (car-safe item) 'js<)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2616 collect (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2617 '(list 'interactor "_getProp"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2618 (js--optimize-arglist (cdr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2619 else if (eq (car-safe item) 'js>)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2620 collect (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2621 '(list 'interactor "_putProp"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2622
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2623 (if (atom (cadr item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2624 (list (cadr item))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2625 (list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2626 (append
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2627 (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2628 '(list 'interactor "_mkArray"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2629 (js--optimize-arglist (cadr item)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2630 (js--optimize-arglist (cddr item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2631 else if (eq (car-safe item) 'js!)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2632 collect (destructuring-bind (ignored function &rest body) item
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2633 (append (list 'list ''js--funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2634 (if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2635 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2636 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2637 function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2638 (js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2639 else
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2640 collect item)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2641
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2642 (defmacro js--js-get-service (class-name interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2643 `(js! ("Components" "classes" ,class-name "getService")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2644 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2645
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2646 (defmacro js--js-create-instance (class-name interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2647 `(js! ("Components" "classes" ,class-name "createInstance")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2648 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2649
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2650 (defmacro js--js-qi (object interface-name)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2651 `(js! (,object "QueryInterface")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2652 (js< "Components" "interfaces" ,interface-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2653
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2654 (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
2655 "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
2656 Inside the lexical scope of `with-js', `js?', `js!',
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2657 `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
2658 `js-create-instance', and `js-qi' are defined."
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2659
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2660 `(progn
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2661 (js--js-enter-repl)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2662 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2663 (macrolet ((js? (&rest body) `(js--js-true ,@body))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2664 (js! (function &rest body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2665 `(js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2666 ,(if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2667 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2668 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2669 function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2670 ,@(js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2671
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2672 (js-new (function &rest body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2673 `(js--js-new
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2674 ,(if (consp function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2675 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2676 (js--optimize-arglist function))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2677 function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2678 ,@body))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2679
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2680 (js-eval (thisobj js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2681 `(js--js-eval
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2682 ,@(js--optimize-arglist
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2683 (list thisobj js))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2684
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2685 (js-list (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2686 `(js--js-list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2687 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2688
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2689 (js-get-service (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2690 `(js--js-get-service
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2691 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2692
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2693 (js-create-instance (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2694 `(js--js-create-instance
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2695 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2696
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2697 (js-qi (&rest args)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2698 `(js--js-qi
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2699 ,@(js--optimize-arglist args)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2700
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2701 (js< (&rest body) `(js--js-get
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2702 ,@(js--optimize-arglist body)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2703 (js> (props value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2704 `(js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2705 '(interactor "_putProp")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2706 ,(if (consp props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2707 (cons 'list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2708 (js--optimize-arglist props))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2709 props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2710 ,@(js--optimize-arglist (list value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2711 ))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2712 (js-handle? (arg) `(js--js-handle-p ,arg)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2713 ,@forms)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2714 (js--js-leave-repl))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2715
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2716 (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
2717 "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
2718 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
2719
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2720 (defun js--js-decode-retval (result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2721 (ecase (intern (first result))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2722 (atom (second result))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2723 (special (intern (second result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2724 (array
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2725 (mapcar #'js--js-decode-retval (second result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2726 (objid
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2727 (or (gethash (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2728 js--js-references)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2729 (puthash (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2730 (make-js--js-handle
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2731 :id (second result)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2732 :process (inferior-moz-process))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2733 js--js-references)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2734
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2735 (error (signal 'js-js-error (list (second result))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2736
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2737 (defun js--js-funcall (function &rest arguments)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2738 "Call the Mozilla function FUNCTION with arguments ARGUMENTS.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2739 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
2740 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
2741 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
2742 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
2743 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
2744 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
2745 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
2746 argument as a function."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2747
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2748 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2749 (let ((argstr (js--js-encode-value
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2750 (cons function arguments))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2751
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2752 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2753 ;; Actual funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2754 (when js--js-array-as-list
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2755 (insert "*"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2756 (insert argstr)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2757 (comint-send-input nil t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2758 (js--wait-for-matching-output
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2759 (inferior-moz-process) "EVAL>"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2760 js-js-timeout)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2761 (goto-char comint-last-input-end)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2762
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2763 ;; Read the result
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2764 (let* ((json-array-type 'list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2765 (result (prog1 (json-read)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2766 (goto-char (point-max)))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2767 (js--js-decode-retval result))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2768
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2769 (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
2770 "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
2771 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
2772 (apply #'js--js-funcall
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2773 '(interactor "_callNew")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2774 constructor 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 (defun js--js-eval (thisobj js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2777 (js--js-funcall '(interactor "_callEval") thisobj js))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2778
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2779 (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
2780 "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
2781 (let ((js--js-array-as-list t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2782 (apply #'js--js-funcall '(interactor "_mkArray")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2783 arguments)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2784
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2785 (defun js--js-get (&rest props)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2786 (apply #'js--js-funcall '(interactor "_getProp") props))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2787
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2788 (defun js--js-put (props value)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2789 (js--js-funcall '(interactor "_putProp") props value))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2790
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2791 (defun js-gc (&optional force)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2792 "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
2793 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
2794 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2795
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2796 (when force
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2797 (setq js--js-last-gcs-done nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2798
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2799 (let ((this-gcs-done gcs-done) keys num)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2800 (when (and js--js-references
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2801 (boundp 'inferior-moz-buffer)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2802 (buffer-live-p inferior-moz-buffer)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2803
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2804 ;; 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
2805 ;; garbage collection; without a gc, nothing is deleted
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2806 ;; 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
2807 ;; MozRepl about that references we still hold
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2808 (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
2809
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2810 ;; 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
2811 ;; interrupt the user if he's doing something
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2812 (with-current-buffer inferior-moz-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2813 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2814 (goto-char (point-max))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2815 (looking-back js--js-prompt-regexp
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2816 (save-excursion (forward-line 0) (point))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2817
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2818 (setq keys (loop for x being the hash-keys
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2819 of js--js-references
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2820 collect x))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2821 (setq num (js--js-funcall '(repl "_jsGC") (or keys [])))
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 (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
2824 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2825 (message "Cleaned %s entries" num))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2826
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2827 num)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2828
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2829 (run-with-idle-timer 30 t #'js-gc)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2830
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2831 (defun js-eval (js)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2832 "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
2833 (interactive "MJavascript to evaluate: ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2834 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2835 (let* ((content-window (js--js-content-window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2836 (js--get-js-context)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2837 (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
2838 (when (called-interactively-p 'interactive)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2839 (message "%s" (js! "String" result)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2840 result)))
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 (defun js--get-tabs ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2843 "Enumerate all JavaScript contexts available.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2844 Each context is a list:
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2845 (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
2846 (TITLE URL WINDOW) for windows
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2847
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
2848 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
2849 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
2850 left-to-right."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2851 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2852 (let (windows)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2853
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2854 (loop with window-mediator = (js! ("Components" "classes"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2855 "@mozilla.org/appshell/window-mediator;1"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2856 "getService")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2857 (js< "Components" "interfaces"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2858 "nsIWindowMediator"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2859 with enumerator = (js! (window-mediator "getEnumerator") nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2860
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2861 while (js? (js! (enumerator "hasMoreElements")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2862 for window = (js! (enumerator "getNext"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2863 for window-info = (js-list window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2864 (js< window "document" "title")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2865 (js! (window "location" "toString"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2866 (js< window "closed")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2867 (js< window "windowState"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2868
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2869 unless (or (js? (fourth window-info))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2870 (eq (fifth window-info) 2))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2871 do (push window-info windows))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2872
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2873 (loop for window-info in windows
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2874 for window = (first window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2875 collect (list (second window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2876 (third window-info)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2877 window)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2878
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2879 for gbrowser = (js< window "gBrowser")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2880 if (js-handle? gbrowser)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2881 nconc (loop
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2882 for x below (js< gbrowser "browsers" "length")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2883 collect (js-list (js< gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2884 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2885 x
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2886 "contentDocument"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2887 "title")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2888
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2889 (js! (gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2890 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2891 x
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2892 "contentWindow"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2893 "location"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2894 "toString"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2895 (js< gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2896 "browsers"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2897 x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2898
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2899 (js! (gbrowser
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2900 "tabContainer"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2901 "childNodes"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2902 "item")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2903 x)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2904
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2905 gbrowser))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2906
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2907 (defvar js-read-tab-history nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2908
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2909 (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
2910 "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
2911 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
2912 '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
2913 browser, respectively."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2914
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2915 ;; Prime IDO
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2916 (unless ido-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2917 (ido-mode t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2918 (ido-mode nil))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2919
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2920 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2921 (lexical-let ((tabs (js--get-tabs)) selected-tab-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2922 selected-tab prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2923
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2924 ;; Disambiguate names
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2925 (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
2926 for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2927 for cname = (format "%s (%s)" (second tab) (first tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2928 for num = (incf (gethash cname tab-names -1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2929 if (> num 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2930 do (setq cname (format "%s <%d>" cname num))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2931 collect (cons cname tab)))
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 (labels ((find-tab-by-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2934 (cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2935 (loop for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2936 if (equal (car tab) cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2937 return (cdr tab)))
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 (mogrify-highlighting
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2940 (hitab unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2941
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2942 ;; Hack to reduce the number of
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2943 ;; round-trips to mozilla
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2944 (let (cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2945 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2946 ;; Highlighting tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2947 ((fourth hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2948 (push '(js! ((fourth hitab) "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2949 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2950 "color: red; font-weight: bold")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2951 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2952
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2953 ;; Highlight window proper
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2954 (push '(js! ((third hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2955 "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2956 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2957 "border: 8px solid red")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2958 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2959
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2960 ;; Select tab, when appropriate
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2961 (when js-js-switch-tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2962 (push
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2963 '(js> ((fifth hitab) "selectedTab") (fourth hitab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2964 cmds)))
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 ;; Hilighting whole window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2967 ((third hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2968 (push '(js! ((third hitab) "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2969 "documentElement" "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2970 "style"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2971 (concat "-moz-appearance: none;"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2972 "border: 8px solid red;"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2973 cmds)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2974
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2975 (cond
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2976 ;; Unhighlighting tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2977 ((fourth unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2978 (push '(js! ((fourth unhitab) "setAttribute") "style" "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2979 cmds)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2980 (push '(js! ((third unhitab) "setAttribute") "style" "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2981 cmds))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2982
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2983 ;; Unhighlighting window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2984 ((third unhitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2985 (push '(js! ((third unhitab) "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2986 "documentElement" "setAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2987 "style" "")
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 (eval (list 'with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2991 (cons 'js-list (nreverse cmds))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2992
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2993 (command-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2994 ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2995 (let* ((tab (find-tab-by-cname (car ido-matches))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2996 (mogrify-highlighting tab prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2997 (setq prev-hitab tab)))
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 (setup-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3000 ()
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3001 ;; 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
3002 ;; is a tabbrowser window, rotate the match list until
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3003 ;; the active tab comes up
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3004 (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
3005 (when (and matched-tab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3006 (null (fourth matched-tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3007 (equal "navigator:browser"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3008 (js! ((third matched-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3009 "document"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3010 "documentElement"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3011 "getAttribute")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3012 "windowtype")))
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 (loop with tab-to-match = (js< (third matched-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3015 "gBrowser"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3016 "selectedTab")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3017
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3018 with index = 0
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3019 for match in ido-matches
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3020 for candidate-tab = (find-tab-by-cname match)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3021 if (eq (fourth candidate-tab) tab-to-match)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3022 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
3023 and return t)))
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 (add-hook 'post-command-hook #'command-hook t t)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3026
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3027
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3028 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3029 (setq selected-tab-cname
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3030 (let ((ido-minibuffer-setup-hook
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3031 (cons #'setup-hook ido-minibuffer-setup-hook)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3032 (ido-completing-read
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3033 prompt
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3034 (mapcar #'car tabs)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3035 nil t nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3036 'js-read-tab-history)))
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 (when prev-hitab
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3039 (mogrify-highlighting nil prev-hitab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3040 (setq prev-hitab nil)))
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 (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
3043
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3044 (setq selected-tab (loop for tab in tabs
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3045 if (equal (car tab) selected-tab-cname)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3046 return (cdr tab)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3047
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3048 (if (fourth selected-tab)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3049 (cons 'browser (third selected-tab))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3050 (cons 'window (third selected-tab)))))))
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 (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
3053 "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
3054 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
3055 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
3056 function part."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3057 (cond ((and (= (length pstate) 3)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3058 (eq (js--pitem-type (first pstate)) 'function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3059 (= (length (js--pitem-name (first pstate))) 1)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3060 (consp (js--pitem-type (second pstate))))
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 (append (js--pitem-name (second pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3063 (list (first (js--pitem-name (first pstate))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3064
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3065 ((and (= (length pstate) 2)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3066 (eq (js--pitem-type (first pstate)) 'function))
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 (append
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3069 (butlast (js--pitem-name (first pstate)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3070 (list (car (last (js--pitem-name (first pstate)))))))
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 (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
3073
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3074 (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
3075 "The current JavaScript context.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3076 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
3077 Change with `js-set-js-context'.")
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3078
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3079 (defconst js--js-inserter
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3080 "(function(func_info,func) {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3081 func_info.unshift('window');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3082 var obj = window;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3083 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
3084 var next = obj[func_info[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3085 if(typeof next !== 'object' && typeof next !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3086 next = obj.prototype && obj.prototype[func_info[i]];
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3087 if(typeof next !== 'object' && typeof next !== 'function') {
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3088 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
3089 ' or ' + func_info.slice(0, i+1).join('.') + '.prototype');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3090 return;
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
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3093 func_info.splice(i+1, 0, 'prototype');
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3094 ++i;
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 }
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 obj[func_info[i]] = func;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3099 alert('Successfully updated '+func_info.join('.'));
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3100 })")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3101
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3102 (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
3103 "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
3104 When called interactively, prompt for CONTEXT."
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3105 (interactive (list (js--read-tab "Javascript Context: ")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3106 (setq js--js-context context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3107
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3108 (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
3109 "Return a valid JavaScript context.
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3110 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
3111 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3112 (when (or (null js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3113 (js--js-handle-expired-p (cdr js--js-context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3114 (ecase (car js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3115 (window (js? (js< (cdr js--js-context) "closed")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3116 (browser (not (js? (js< (cdr js--js-context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3117 "contentDocument"))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3118 (setq js--js-context (js--read-tab "Javascript Context: ")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3119 js--js-context))
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 (defun js--js-content-window (context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3122 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3123 (ecase (car context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3124 (window (cdr context))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3125 (browser (js< (cdr context)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3126 "contentWindow" "wrappedJSObject")))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3127
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3128 (defun js--make-nsilocalfile (path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3129 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3130 (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
3131 "nsILocalFile")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3132 (js! (file "initWithPath") path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3133 file)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3134
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3135 (defun js--js-add-resource-alias (alias path)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3136 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3137 (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
3138 "nsIIOService"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3139 (res-prot (js! (io-service "getProtocolHandler") "resource"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3140 (res-prot (js-qi res-prot "nsIResProtocolHandler"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3141 (path-file (js--make-nsilocalfile path))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3142 (path-uri (js! (io-service "newFileURI") path-file)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3143 (js! (res-prot "setSubstitution") alias path-uri))))
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-eval-defun ()
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3146 "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
3147 (interactive)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3148
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3149 ;; 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
3150 ;; 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
3151 ;; 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
3152 ;; 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
3153 ;; 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
3154 ;;
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3155 ;; 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
3156 ;; 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
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 (save-excursion
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3160 (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
3161 (js-end-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3162 (setq end (point))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3163 (js--ensure-cache)
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3164 (js-beginning-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3165 (re-search-forward "\\_<function\\_>")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3166 (setq begin (match-beginning 0))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3167 (setq pstate (js--forward-pstate))
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 (when (or (null pstate)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3170 (> (point) end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3171 (error "Could not locate function definition"))
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 (setq defun-info (js--guess-eval-defun-info pstate))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3174
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3175 (let ((overlay (make-overlay begin end)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3176 (overlay-put overlay 'face 'highlight)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3177 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3178 (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
3179 (mapconcat #'identity defun-info ".")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3180 (message "") ; question message lingers until next command
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3181 (return-from js-eval-defun))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3182 (delete-overlay overlay)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3183
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3184 (setq defun-body (buffer-substring-no-properties begin end))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3185
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3186 (make-directory js-js-tmpdir t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3187
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3188 ;; (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
3189 ;; temporary directory
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3190 (js--js-add-resource-alias "js" js-js-tmpdir)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3191
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3192 (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
3193 "/js-")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3194 nil ".js"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3195 (unwind-protect
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3196 (with-js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3197 (with-temp-buffer
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3198 (insert js--js-inserter)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3199 (insert "(")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3200 (insert (json-encode-list defun-info))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3201 (insert ",\n")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3202 (insert defun-body)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3203 (insert "\n)")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3204 (write-region (point-min) (point-max) temp-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3205 nil 1))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3206
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3207 ;; Give Mozilla responsibility for deleting this file
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3208 (let* ((content-window (js--js-content-window
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3209 (js--get-js-context)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3210 (content-document (js< content-window "document"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3211 (head (if (js? (js< content-document "body"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3212 ;; Regular content
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3213 (js< (js! (content-document "getElementsByTagName")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3214 "head")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3215 0)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3216 ;; Chrome
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3217 (js< content-document "documentElement")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3218 (elem (js! (content-document "createElementNS")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3219 "http://www.w3.org/1999/xhtml" "script")))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3220
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3221 (js! (elem "setAttribute") "type" "text/javascript")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3222 (js! (elem "setAttribute") "src"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3223 (format "resource://js/%s"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3224 (file-name-nondirectory temp-name)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3225
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3226 (js! (head "appendChild") elem)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3227
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3228 (js! (content-window "addEventListener") "unload"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3229 (js! ((js-new
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3230 "Function" "file"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3231 "return function() { file.remove(false) }"))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3232 (js--make-nsilocalfile temp-name))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3233 'false)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3234 (setq temp-name nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3235
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3236
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3237
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3238 ))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3239
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3240 ;; temp-name is set to nil on success
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3241 (when temp-name
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3242 (delete-file temp-name))))))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3243
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3244 ;;; Main Function
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3245
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3246 ;;;###autoload
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3247 (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
3248 "Major mode for editing JavaScript.
104272
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 Key bindings:
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-mode-map}"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3253
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3254 :group 'js
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3255 :syntax-table js-mode-syntax-table
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3256
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3257 (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
3258 (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
3259 'js-beginning-of-defun)
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3260 (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
3261 'js-end-of-defun)
104272
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 (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
3264 (set (make-local-variable 'font-lock-defaults)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3265 (list js--font-lock-keywords
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3266 nil nil nil nil
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3267 '(font-lock-syntactic-keywords
104275
3bf815184a6c * progmodes/js.el: Edit docstrings throughout to follow Emacs
Chong Yidong <cyd@stupidchicken.com>
parents: 104272
diff changeset
3268 . js-font-lock-syntactic-keywords)))
104272
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 (set (make-local-variable 'parse-sexp-ignore-comments) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3271 (set (make-local-variable 'parse-sexp-lookup-properties) t)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3272 (set (make-local-variable 'which-func-imenu-joiner-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3273 #'js--which-func-joiner)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3274
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3275 ;; Comments
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3276 (setq comment-start "// ")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3277 (setq comment-end "")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3278 (set (make-local-variable 'fill-paragraph-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3279 'js-c-fill-paragraph)
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 ;; Parse cache
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3282 (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
3283
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3284 ;; Frameworks
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3285 (js--update-quick-match-re)
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 ;; Imenu
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3288 (setq imenu-case-fold-search nil)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3289 (set (make-local-variable 'imenu-create-index-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3290 #'js--imenu-create-index)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3291
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3292 (setq major-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3293 (setq mode-name "Javascript")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3294
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3295 ;; for filling, pretend we're cc-mode
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3296 (setq c-comment-prefix-regexp "//+\\|\\**"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3297 c-paragraph-start "$"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3298 c-paragraph-separate "$"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3299 c-block-comment-prefix "* "
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3300 c-line-comment-starter "//"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3301 c-comment-start-regexp "/[*/]\\|\\s!"
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3302 comment-start-skip "\\(//+\\|/\\*+\\)\\s *")
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3303
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3304 (let ((c-buffer-is-cc-mode t))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3305 (c-setup-paragraph-variables))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3306
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3307 (set (make-local-variable 'syntax-begin-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3308 #'js--syntax-begin-function)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3309
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3310 ;; 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
3311 ;; 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
3312 ;; 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
3313 ;; etc. and and produce maddening "unbalanced parenthesis" errors.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3314 ;; 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
3315 ;; 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
3316 ;; 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
3317 ;; will mysteriously disappear.
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3318 (font-lock-set-defaults)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3319
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3320 (let (font-lock-keywords) ; leaves syntactic keywords intact
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3321 (font-lock-fontify-buffer)))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3322
106794
c177971c1cec * progmodes/js.el: Autoload javascript-mode alias.
Chong Yidong <cyd@stupidchicken.com>
parents: 106457
diff changeset
3323 ;;;###autoload
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3324 (defalias 'javascript-mode 'js-mode)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3325
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3326 (eval-after-load 'folding
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3327 '(when (fboundp 'folding-add-to-marks-list)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3328 (folding-add-to-marks-list 'js-mode "// {{{" "// }}}" )))
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3329
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3330 (provide 'js)
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3331
104276
2c69ae7c48d0 Add arch tagline
Miles Bader <miles@gnu.org>
parents: 104275
diff changeset
3332 ;; arch-tag: 1a0d0409-e87f-4fc7-a58c-3731c66ddaac
104272
ea67ac46d172 * progmodes/js2-mode.el: File removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3333 ;; js.el ends here