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