Bug 461680 - Improve video control fade in/out animation. r=enn
[wine-gecko.git] / js / narcissus / jsdefs.js
bloba1031d798d0c64bfbe5eae8e4b4196e3a32c1306
1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
12 * License.
14 * The Original Code is the Narcissus JavaScript engine.
16 * The Initial Developer of the Original Code is
17 * Brendan Eich <brendan@mozilla.org>.
18 * Portions created by the Initial Developer are Copyright (C) 2004
19 * the Initial Developer. All Rights Reserved.
21 * Contributor(s):
23 * Alternatively, the contents of this file may be used under the terms of
24 * either the GNU General Public License Version 2 or later (the "GPL"), or
25 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26 * in which case the provisions of the GPL or the LGPL are applicable instead
27 * of those above. If you wish to allow use of your version of this file only
28 * under the terms of either the GPL or the LGPL, and not to allow others to
29 * use your version of this file under the terms of the MPL, indicate your
30 * decision by deleting the provisions above and replace them with the notice
31 * and other provisions required by the GPL or the LGPL. If you do not delete
32 * the provisions above, a recipient may use your version of this file under
33 * the terms of any one of the MPL, the GPL or the LGPL.
35 * ***** END LICENSE BLOCK ***** */
38 * Narcissus - JS implemented in JS.
40 * Well-known constants and lookup tables. Many consts are generated from the
41 * tokens table via eval to minimize redundancy, so consumers must be compiled
42 * separately to take advantage of the simple switch-case constant propagation
43 * done by SpiderMonkey.
45 const GLOBAL = this;
47 var tokens = [
48 // End of source.
49 "END",
51 // Operators and punctuators. Some pair-wise order matters, e.g. (+, -)
52 // and (UNARY_PLUS, UNARY_MINUS).
53 "\n", ";",
54 ",",
55 "=",
56 "?", ":", "CONDITIONAL",
57 "||",
58 "&&",
59 "|",
60 "^",
61 "&",
62 "==", "!=", "===", "!==",
63 "<", "<=", ">=", ">",
64 "<<", ">>", ">>>",
65 "+", "-",
66 "*", "/", "%",
67 "!", "~", "UNARY_PLUS", "UNARY_MINUS",
68 "++", "--",
69 ".",
70 "[", "]",
71 "{", "}",
72 "(", ")",
74 // Nonterminal tree node type codes.
75 "SCRIPT", "BLOCK", "LABEL", "FOR_IN", "CALL", "NEW_WITH_ARGS", "INDEX",
76 "ARRAY_INIT", "OBJECT_INIT", "PROPERTY_INIT", "GETTER", "SETTER",
77 "GROUP", "LIST",
79 // Terminals.
80 "IDENTIFIER", "NUMBER", "STRING", "REGEXP",
82 // Keywords.
83 "break",
84 "case", "catch", "const", "continue",
85 "debugger", "default", "delete", "do",
86 "else", "enum",
87 "false", "finally", "for", "function",
88 "if", "in", "instanceof",
89 "new", "null",
90 "return",
91 "switch",
92 "this", "throw", "true", "try", "typeof",
93 "var", "void",
94 "while", "with",
97 // Operator and punctuator mapping from token to tree node type name.
98 // NB: superstring tokens (e.g., ++) must come before their substring token
99 // counterparts (+ in the example), so that the opRegExp regular expression
100 // synthesized from this list makes the longest possible match.
101 var opTypeNames = {
102 '\n': "NEWLINE",
103 ';': "SEMICOLON",
104 ',': "COMMA",
105 '?': "HOOK",
106 ':': "COLON",
107 '||': "OR",
108 '&&': "AND",
109 '|': "BITWISE_OR",
110 '^': "BITWISE_XOR",
111 '&': "BITWISE_AND",
112 '===': "STRICT_EQ",
113 '==': "EQ",
114 '=': "ASSIGN",
115 '!==': "STRICT_NE",
116 '!=': "NE",
117 '<<': "LSH",
118 '<=': "LE",
119 '<': "LT",
120 '>>>': "URSH",
121 '>>': "RSH",
122 '>=': "GE",
123 '>': "GT",
124 '++': "INCREMENT",
125 '--': "DECREMENT",
126 '+': "PLUS",
127 '-': "MINUS",
128 '*': "MUL",
129 '/': "DIV",
130 '%': "MOD",
131 '!': "NOT",
132 '~': "BITWISE_NOT",
133 '.': "DOT",
134 '[': "LEFT_BRACKET",
135 ']': "RIGHT_BRACKET",
136 '{': "LEFT_CURLY",
137 '}': "RIGHT_CURLY",
138 '(': "LEFT_PAREN",
139 ')': "RIGHT_PAREN"
142 // Hash of keyword identifier to tokens index. NB: we must null __proto__ to
143 // avoid toString, etc. namespace pollution.
144 var keywords = {__proto__: null};
146 // Define const END, etc., based on the token names. Also map name to index.
147 var consts = "const ";
148 for (var i = 0, j = tokens.length; i < j; i++) {
149 if (i > 0)
150 consts += ", ";
151 var t = tokens[i];
152 if (/^[a-z]/.test(t)) {
153 consts += t.toUpperCase();
154 keywords[t] = i;
155 } else {
156 consts += (/^\W/.test(t) ? opTypeNames[t] : t);
158 consts += " = " + i;
159 tokens[t] = i;
161 eval(consts + ";");
163 // Map assignment operators to their indexes in the tokens array.
164 var assignOps = ['|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%'];
166 for (i = 0, j = assignOps.length; i < j; i++) {
167 t = assignOps[i];
168 assignOps[t] = tokens[t];