1324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/*
2324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverSome portions:
3324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCopyright (c) 2008, Yahoo! Inc. All rights reserved.
4324c4644fee44b9898524c09511bd33c3f12e2dfBen GruverCode licensed under the BSD License:
5324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverhttp://developer.yahoo.net/yui/license.txt
6324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverversion: 2.5.1
7324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver*/
8324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
9324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver// create org.antlr module
10324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif (typeof org == "undefined" || !org) {
11324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    var org = {};
12324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
13324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverif (typeof org.antlr == "undefined" || !org.antlr) {
14324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
15324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * The org.antlr global namespace object.  If antlr is already defined, the
16324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * existing antlr object will not be overwritten so that defined
17324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * namespaces are preserved.
18324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @namespace org.antlr
19324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
20324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    org.antlr = {};
21324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}
22324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
23324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
24324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * The global JavaScript object.
25324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
26324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.global = (function() {
27324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return this;
28324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}).call(null);
29324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
30324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
31324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Returns the namespace specified and creates it if it doesn't exist.
32324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
33324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Be careful when naming packages. Reserved words may work in some browsers
34324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * and not others. For instance, the following will fail in Safari:
35324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * <pre>
36324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * org.antlr.namespace("really.long.nested.namespace");
37324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * </pre>
38324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * This fails because "long" is a future reserved word in ECMAScript
39324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver *
40324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @static
41324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @param  {Array.<String>} arguments 1-n namespaces to create
42324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @return {Object}  A reference to the last namespace object created
43324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @example
44324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * org.antlr.namespace("org.antlr.property.package");
45324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
46324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.namespace = function() {
47324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    var a=arguments, o=null, i, j, d;
48324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    for (i=0; i<a.length; i=i+1) {
49324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        d=a[i].split(".");
50324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        o=org.antlr.global;
51324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
52324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        // ANTLR is implied, so it is ignored if it is included
53324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        for (j=0; j<d.length; j=j+1) {
54324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o[d[j]]=o[d[j]] || {};
55324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o=o[d[j]];
56324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
57324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
58324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
59324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return o;
60324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
61324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
62324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
63324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * org.antlr.env is used to keep track of what is known about the library and
64324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * the browsing environment
65324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @namespace org.antlr.env
66324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
67324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.env = org.antlr.env || {};
68324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
69324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
70324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Do not fork for a browser if it can be avoided.  Use feature detection when
71324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * you can.  Use the user agent as a last resort.  org.antlr.env.ua stores a
72324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * version number for the browser engine, 0 otherwise.  This value may or may
73324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * not map to the version number of the browser using the engine.  The value is
74324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * presented as a float so that it can easily be used for boolean evaluation
75324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * as well as for looking for a particular range of versions.  Because of this,
76324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * some of the granularity of the version info may be lost (e.g., Gecko 1.8.0.9
77324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * reports 1.8).
78324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @namespace org.antlr.env.ua
79324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
80324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.env.ua = function() {
81324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    var o= /** @lends org.antlr.env.ua */ {
82324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
83324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
84324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Internet Explorer version number or 0.  Example: 6
85324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property ie
86324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type float
87324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
88324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ie:0,
89324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
90324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
91324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Opera version number or 0.  Example: 9.2
92324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property opera
93324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type float
94324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
95324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        opera:0,
96324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
97324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
98324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Gecko engine revision number.  Will evaluate to 1 if Gecko
99324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * is detected but the revision could not be found. Other browsers
100324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * will be 0.  Example: 1.8
101324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * <pre>
102324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Firefox 1.0.0.4: 1.7.8   <-- Reports 1.7
103324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Firefox 1.5.0.9: 1.8.0.9 <-- Reports 1.8
104324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Firefox 2.0.0.3: 1.8.1.3 <-- Reports 1.8
105324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Firefox 3 alpha: 1.9a4   <-- Reports 1.9
106324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * </pre>
107324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property gecko
108324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type float
109324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
110324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        gecko:0,
111324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
112324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
113324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * AppleWebKit version.  KHTML browsers that are not WebKit browsers
114324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * will evaluate to 1, other browsers 0.  Example: 418.9.1
115324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * <pre>
116324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 1.3.2 (312.6): 312.8.1 <-- Reports 312.8 -- currently the
117324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   latest available for Mac OSX 10.3.
118324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 2.0.2:         416     <-- hasOwnProperty introduced
119324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 2.0.4:         418     <-- preventDefault fixed
120324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 2.0.4 (419.3): 418.9.1 <-- One version of Safari may run
121324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   different versions of webkit
122324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 2.0.4 (419.3): 419     <-- Tiger installations that have been
123324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   updated, but not updated
124324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   to the latest patch.
125324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Webkit 212 nightly:   522+    <-- Safari 3.0 precursor (with native SVG
126324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   and many major issues fixed).
127324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * 3.x yahoo.com, flickr:422     <-- Safari 3.x hacks the user agent
128324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   string when hitting yahoo.com and
129324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   flickr.com.
130324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Safari 3.0.4 (523.12):523.12  <-- First Tiger release - automatic update
131324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   from 2.x via the 10.4.11 OS patch
132324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Webkit nightly 1/2008:525+    <-- Supports DOMContentLoaded event.
133324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *                                   yahoo.com user agent hack removed.
134324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         *
135324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * </pre>
136324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * http://developer.apple.com/internet/safari/uamatrix.html
137324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property webkit
138324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type float
139324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
140324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        webkit: 0,
141324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
142324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
143324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * The mobile property will be set to a string containing any relevant
144324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * user agent information when a modern mobile browser is detected.
145324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Currently limited to Safari on the iPhone/iPod Touch, Nokia N-series
146324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * devices with the WebKit-based browser, and Opera Mini.
147324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property mobile
148324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type string
149324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
150324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        mobile: null,
151324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
152324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
153324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Adobe AIR version number or 0.  Only populated if webkit is detected.
154324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Example: 1.0
155324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property air
156324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type float
157324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
158324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        air: 0,
159324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
160324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
161324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Is this the Rhino interpreter?
162324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @property rhino
163324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @type Boolean
164324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
165324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        rhino: false
166324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
167324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    };
168324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
169324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    var ua, m;
170324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
171324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    try {
172324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        ua = navigator.userAgent;
173324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
174324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        // Modern KHTML browsers should qualify as Safari X-Grade
175324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if ((/KHTML/).test(ua)) {
176324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o.webkit=1;
177324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
178324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        // Modern WebKit browsers are at least X-Grade
179324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        m=ua.match(/AppleWebKit\/([^\s]*)/);
180324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (m&&m[1]) {
181324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o.webkit=parseFloat(m[1]);
182324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
183324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // Mobile browser check
184324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (/ Mobile\//.test(ua)) {
185324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                o.mobile = "Apple"; // iPhone or iPod Touch
186324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        } else {
187324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            m=ua.match(/NokiaN[^\/]*/);
188324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (m) {
189324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                o.mobile = m[0]; // Nokia N-series, ex: NokiaN95
190324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
191324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
192324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
193324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        m=ua.match(/AdobeAIR\/([^\s]*)/);
194324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (m) {
195324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o.air = m[0]; // Adobe AIR 1.0 or better
196324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
197324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
198324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
199324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
200324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (!o.webkit) { // not webkit
201324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            // @todo check Opera/8.01 (J2ME/MIDP; Opera Mini/2.0.4509/1316; fi; U; ssr)
202324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            m=ua.match(/Opera[\s\/]([^\s]*)/);
203324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (m&&m[1]) {
204324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                o.opera=parseFloat(m[1]);
205324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                m=ua.match(/Opera Mini[^;]*/);
206324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (m) {
207324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                o.mobile = m[0]; // ex: Opera Mini/2.0.4509/1316
208324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
209324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            } else { // not opera or webkit
210324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                m=ua.match(/MSIE\s([^;]*)/);
211324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if (m&&m[1]) {
212324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    o.ie=parseFloat(m[1]);
213324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                } else { // not opera, webkit, or ie
214324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    m=ua.match(/Gecko\/([^\s]*)/);
215324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    if (m) {
216324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        o.gecko=1; // Gecko detected, look for revision
217324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        m=ua.match(/rv:([^\s\)]*)/);
218324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        if (m&&m[1]) {
219324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                            o.gecko=parseFloat(m[1]);
220324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                        }
221324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    }
222324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
223324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
224324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
225324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    } catch(e) {
226324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        // ignore this if we're not in a browser
227324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
228324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
229324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    try {
230324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (typeof window=="undefined" && typeof loadClass!="undefined") {
231324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            o.rhino = true;
232324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
233324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    } catch(e) {}
234324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
235324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
236324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    return o;
237324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver}();
238324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
239324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
240324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * JavaScript runtime library code.
241324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @name org.antlr.runtime
242324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @namespace
243324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
244324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
245324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * JavaScript runtime library tree parser code.
246324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @name org.antlr.runtime.tree
247324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @namespace
248324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
249324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.namespace("org.antlr.runtime.tree");
250324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
251324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver/**
252324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * Provides the language utilites and extensions used by the library
253324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver * @namespace org.antlr.lang
254324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver */
255324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverorg.antlr.lang = org.antlr.lang || /** @lends org.antlr.lang */ {
256324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
257324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is an array.
258324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Testing typeof/instanceof/constructor of arrays across frame
259324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * boundaries isn't possible in Safari unless you have a reference
260324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * to the other frame to test against its Array prototype.  To
261324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * handle this case, we test well-known array properties instead.
262324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * properties.
263324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
264324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
265324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
266324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isArray: function(o) {
267324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (o) {
268324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver           var l = org.antlr.lang;
269324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver           return l.isNumber(o.length) && l.isFunction(o.splice);
270324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
271324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return false;
272324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
273324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
274324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
275324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is a boolean
276324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
277324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
278324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
279324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isBoolean: function(o) {
280324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return typeof o === 'boolean';
281324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
282324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
283324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
284324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is a function
285324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
286324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
287324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
288324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isFunction: function(o) {
289324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return typeof o === 'function';
290324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
291324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
292324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
293324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is null
294324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
295324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
296324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
297324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isNull: function(o) {
298324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return o === null;
299324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
300324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
301324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
302324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is a legal number
303324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
304324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
305324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
306324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isNumber: function(o) {
307324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return typeof o === 'number' && isFinite(o);
308324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
309324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
310324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
311324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is of type object
312324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * or function
313324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
314324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
315324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
316324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isObject: function(o) {
317324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverreturn (o && (typeof o === 'object' || org.antlr.lang.isFunction(o))) || false;
318324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
319324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
320324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
321324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is a string
322324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
323324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
324324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
325324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isString: function(o) {
326324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return typeof o === 'string';
327324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
328324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
329324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
330324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Determines whether or not the provided object is undefined
331324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {any} o The object being testing
332324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} the result
333324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
334324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isUndefined: function(o) {
335324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return typeof o === 'undefined';
336324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
337324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
338324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
339324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * IE will not enumerate native functions in a derived object even if the
340324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * function was overridden.  This is a workaround for specific functions
341324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * we care about on the Object prototype.
342324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} r  the object to receive the augmentation
343324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} s  the object that supplies the properties to augment
344324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @private
345324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
346324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    _IEEnumFix: function(r, s) {
347324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (org.antlr.env.ua.ie) {
348324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var add=["toString", "valueOf"], i;
349324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            for (i=0;i<add.length;i=i+1) {
350324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                var fname=add[i],f=s[fname];
351324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if (org.antlr.lang.isFunction(f) && f!=Object.prototype[fname]) {
352324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    r[fname]=f;
353324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
354324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
355324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
356324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
357324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
358324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
359324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Utility to set up the prototype, constructor and superclass properties to
360324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * support an inheritance strategy that can chain constructors and methods.
361324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Static members will not be inherited.
362324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *
363324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @method extend
364324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @static
365324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} subc   the object to modify
366324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} superc the object to inherit
367324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Object} [overrides]  additional properties/methods to add to the
368324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *                              subclass prototype.  These will override the
369324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *                              matching items obtained from the superclass
370324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *                              if present.
371324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
372324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    extend: function(subc, superc, overrides) {
373324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (!superc||!subc) {
374324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            throw new Error("org.antlr.lang.extend failed, please check that " +
375324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                            "all dependencies are included.");
376324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
377324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var F = function() {};
378324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        F.prototype=superc.prototype;
379324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        subc.prototype=new F();
380324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        subc.prototype.constructor=subc;
381324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        subc.superclass=superc.prototype;
382324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (superc.prototype.constructor == Object.prototype.constructor) {
383324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            superc.prototype.constructor=superc;
384324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
385324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
386324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (overrides) {
387324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            for (var i in overrides) {
388324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                subc.prototype[i]=overrides[i];
389324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
390324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
391324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            org.antlr.lang._IEEnumFix(subc.prototype, overrides);
392324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
393324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
394324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
395324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
396324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Applies all properties in the supplier to the receiver if the
397324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * receiver does not have these properties yet.  Optionally, one or
398324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * more methods/properties can be specified (as additional
399324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * parameters).  This option will overwrite the property if receiver
400324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * has it already.  If true is passed as the third parameter, all
401324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * properties will be applied and _will_ overwrite properties in
402324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * the receiver.
403324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *
404324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} r  the object to receive the augmentation
405324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} s  the object that supplies the properties to augment
406324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Array.<String>|boolean}  [arguments] zero or more properties
407324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        methods  to augment the receiver with.  If none specified,
408324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        everything in the supplier will be used unless it would
409324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        overwrite an existing property in the receiver. If true
410324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        is specified as the third parameter, all properties will
411324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        be applied and will overwrite an existing property in
412324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        the receiver
413324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
414324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    augmentObject: function(r, s) {
415324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (!s||!r) {
416324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            throw new Error("Absorb failed, verify dependencies.");
417324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
418324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var a=arguments, i, p, override=a[2];
419324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (override && override!==true) { // only absorb the specified properties
420324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            for (i=2; i<a.length; i=i+1) {
421324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                r[a[i]] = s[a[i]];
422324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
423324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        } else { // take everything, overwriting only if the third parameter is true
424324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            for (p in s) {
425324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                if (override || !r[p]) {
426324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                    r[p] = s[p];
427324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                }
428324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
429324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
430324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            org.antlr.lang._IEEnumFix(r, s);
431324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
432324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
433324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
434324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
435324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Same as org.antlr.lang.augmentObject, except it only applies prototype properties
436324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @see org.antlr.lang.augmentObject
437324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} r  the object to receive the augmentation
438324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Function} s  the object that supplies the properties to augment
439324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param {Array.<String>|boolean}  [arguments] zero or more properties methods
440324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        to augment the receiver with.  If none specified, everything
441324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        in the supplier will be used unless it would overwrite an existing
442324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        property in the receiver.  if true is specified as the third
443324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        parameter, all properties will be applied and will overwrite an
444324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     *        existing property in the receiver
445324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
446324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    augmentProto: function(r, s) {
447324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        if (!s||!r) {
448324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            throw new Error("Augment failed, verify dependencies.");
449324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
450324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        //var a=[].concat(arguments);
451324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var a=[r.prototype,s.prototype];
452324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        for (var i=2;i<arguments.length;i=i+1) {
453324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            a.push(arguments[i]);
454324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
455324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        org.antlr.lang.augmentObject.apply(this, a);
456324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
457324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
458324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
459324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Returns a new object containing all of the properties of
460324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * all the supplied objects.  The properties from later objects
461324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * will overwrite those in earlier objects.
462324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param arguments {Object*} the objects to merge
463324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return the new merged object
464324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
465324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    merge: function() {
466324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var o={}, a=arguments;
467324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        for (var i=0, l=a.length; i<l; i=i+1) {
468324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            org.antlr.lang.augmentObject(o, a[i], true);
469324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
470324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        return o;
471324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
472324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
473324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /**
474324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * A convenience method for detecting a legitimate non-null value.
475324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * Returns false for null/undefined/NaN, true for other values,
476324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * including 0/false/''
477324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @param o {any} the item to test
478324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     * @return {boolean} true if it is not null/undefined/NaN || false
479324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver     */
480324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    isValue: function(o) {
481324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        var l = org.antlr.lang;
482324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruverreturn (l.isObject(o) || l.isString(o) || l.isNumber(o) || l.isBoolean(o));
483324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    },
484324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver
485324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    /** @namespace org.antlr.lang.array Array convenience methods. */
486324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    array: /** @lends org.antlr.lang.array */ {
487324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        /**
488324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * Retrieve the last element of an array. Throws an error if a is not
489324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * an array or empty.
490324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @param a {Array} the array stack to peek in
491324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         * @return the last element of the array
492324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         */
493324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver         peek: function(a) {
494324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (!org.antlr.lang.isArray(a)) {
495324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                throw new Error("org.antlr.lang.array.peek: a is not an array.");
496324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
497324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            var l = a.length;
498324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            if (l<=0) {
499324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver                throw new Error("org.antlr.lang.array.peek: a is empty.");
500324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            }
501324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver            return a[l-1];
502324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver        }
503324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver    }
504324c4644fee44b9898524c09511bd33c3f12e2dfBen Gruver};
505