00001 
00002 /*
00003  *  JScripter Standard 1.0 - To Script In Java
00004  *  Copyright (C) 2008-2011  J.J.Liu<jianjunliu@126.com> <http://www.jscripter.org>
00005  *  
00006  *  This program is free software: you can redistribute it and/or modify
00007  *  it under the terms of the GNU Affero General Public License as published by
00008  *  the Free Software Foundation, either version 3 of the License, or
00009  *  (at your option) any later version.
00010  *  
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU Affero General Public License for more details.
00015  *  
00016  *  You should have received a copy of the GNU Affero General Public License
00017  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
00018  */
00019 
00020 package js.core;
00021 
00022 import js.*;
00023 
00024 /**
00025  * <p>An <b>opaque</b> class representing the JavaScript <tt>Global</tt> object 
00026  * without the client-side support.</p>
00027  *
00028  * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
00029  * 
00030  * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
00031  * generated into the target codes. Re-compilers must exit with error on the operations of 
00032  * accessing that kind of class objects.
00033  * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
00034  * and <tt>instanceof</tt> to it always <tt>true</tt>.
00035  */
00036 public class JsGlobal extends JsObject
00037 {
00038     /**
00039      * <p>An <b>internal</b> class containing membership data for its enclosing 
00040      * opaque class.</p>
00041      * <p>This class is only used inside of <b>opaque</b> or <b>internal</b> classes or 
00042      * class members.</p>
00043      *
00044      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
00045      * 
00046      * @javascript Re-compilers must report error on resolving an <b>internal</b> class. 
00047      */
00048     protected static abstract class Members extends JsObject.Members
00049     {
00050         /**
00051          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00052          * used internally to define a member of the same name.</p>
00053          * @since 1.0
00054          * @see JsGlobal#Infinity
00055          * @see Member#Infinity
00056          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00057          */
00058         public final static Mid Infinity            = id("Infinity"           );
00059         /**
00060          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00061          * used internally to define a member of the same name.</p>
00062          * @since 1.0
00063          * @see JsGlobal#NaN
00064          * @see Member#NaN
00065          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00066          */
00067         public final static Mid NaN                 = id("NaN"                );
00068         /**
00069          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00070          * used internally to define a member of the same name.</p>
00071          * @since 1.0
00072          * @see JsGlobal#decodeURI
00073          * @see Member#decodeURI
00074          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00075          */
00076         public final static Mid decodeURI           = id("decodeURI"          );
00077         /**
00078          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00079          * used internally to define a member of the same name.</p>
00080          * @since 1.0
00081          * @see JsGlobal#decodeURIComponent
00082          * @see Member#decodeURIComponent
00083          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00084          */
00085         public final static Mid decodeURIComponent  = id("decodeURIComponent" );
00086         /**
00087          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00088          * used internally to define a member of the same name.</p>
00089          * @since 1.0
00090          * @see JsGlobal#encodeURI
00091          * @see Member#encodeURI
00092          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00093          */
00094         public final static Mid encodeURI           = id("encodeURI"          );
00095         /**
00096          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00097          * used internally to define a member of the same name.</p>
00098          * @since 1.0
00099          * @see JsGlobal#encodeURIComponent
00100          * @see Member#encodeURIComponent
00101          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00102          */
00103         public final static Mid encodeURIComponent  = id("encodeURIComponent" );
00104         /**
00105          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00106          * used internally to define a member of the same name.</p>
00107          * @since 1.0
00108          * @see JsGlobal#escape
00109          * @see Member#escape
00110          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00111          */
00112         public final static Mid escape              = id("escape"             );
00113         /**
00114          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00115          * used internally to define a member of the same name.</p>
00116          * @since 1.0
00117          * @see JsGlobal#eval
00118          * @see Member#eval
00119          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00120          */
00121         public final static Mid eval                = id("eval"               );
00122         /**
00123          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00124          * used internally to define a member of the same name.</p>
00125          * @since 1.0
00126          * @see JsGlobal#isFinite
00127          * @see Member#isFinite
00128          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00129          */
00130         public final static Mid isFinite            = id("isFinite"           );
00131         /**
00132          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00133          * used internally to define a member of the same name.</p>
00134          * @since 1.0
00135          * @see JsGlobal#isNaN
00136          * @see Member#isNaN
00137          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00138          */
00139         public final static Mid isNaN               = id("isNaN"              );
00140         /**
00141          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00142          * used internally to define a member of the same name.</p>
00143          * @since 1.0
00144          * @see JsGlobal#parseFloat
00145          * @see Member#parseFloat
00146          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00147          */
00148         public final static Mid parseFloat          = id("parseFloat"         );
00149         /**
00150          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00151          * used internally to define a member of the same name.</p>
00152          * @since 1.0
00153          * @see JsGlobal#parseInt
00154          * @see Member#parseInt
00155          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00156          */
00157         public final static Mid parseInt            = id("parseInt"           );
00158         /**
00159          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00160          * used internally to define a member of the same name.</p>
00161          * @since 1.0
00162          * @see JsGlobal#unescape
00163          * @see Member#unescape
00164          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00165          */
00166         public final static Mid unescape            = id("unescape"           );
00167         /**
00168          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00169          * used internally to define a member of the same name.</p>
00170          * @since 1.0
00171          * @see JsGlobal#Array
00172          * @see Member#Array
00173          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00174          */
00175         public final static Mid Array               = id("Array"              );
00176         /**
00177          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00178          * used internally to define a member of the same name.</p>
00179          * @since 1.0
00180          * @see JsGlobal#Boolean
00181          * @see Member#Boolean
00182          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00183          */
00184         public final static Mid Boolean             = id("Boolean"            );
00185         /**
00186          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00187          * used internally to define a member of the same name.</p>
00188          * @since 1.0
00189          * @see JsGlobal#Date
00190          * @see Member#Date
00191          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00192          */
00193         public final static Mid Date                = id("Date"               );
00194         /**
00195          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00196          * used internally to define a member of the same name.</p>
00197          * @since 1.0
00198          * @see JsGlobal#Error
00199          * @see Member#Error
00200          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00201          */
00202         public final static Mid Error               = id("Error"              );
00203         /**
00204          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00205          * used internally to define a member of the same name.</p>
00206          * @since 1.0
00207          * @see JsGlobal#EvalError
00208          * @see Member#EvalError
00209          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00210          */
00211         public final static Mid EvalError           = id("EvalError"          );
00212         /**
00213          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00214          * used internally to define a member of the same name.</p>
00215          * @since 1.0
00216          * @see JsGlobal#Function
00217          * @see Member#Function
00218          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00219          */
00220         public final static Mid Function            = id("Function"           );
00221         /**
00222          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00223          * used internally to define a member of the same name.</p>
00224          * @since 1.0
00225          * @see JsGlobal#Math
00226          * @see Member#Math
00227          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00228          */
00229         public final static Mid Math                = id("Math"               );
00230         /**
00231          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00232          * used internally to define a member of the same name.</p>
00233          * @since 1.0
00234          * @see JsGlobal#Number
00235          * @see Member#Number
00236          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00237          */
00238         public final static Mid Number              = id("Number"             );
00239         /**
00240          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00241          * used internally to define a member of the same name.</p>
00242          * @since 1.0
00243          * @see JsGlobal#Object
00244          * @see Member#Object
00245          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00246          */
00247         public final static Mid Object              = id("Object"             );
00248         /**
00249          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00250          * used internally to define a member of the same name.</p>
00251          * @since 1.0
00252          * @see JsGlobal#RangeError
00253          * @see Member#RangeError
00254          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00255          */
00256         public final static Mid RangeError          = id("RangeError"         );
00257         /**
00258          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00259          * used internally to define a member of the same name.</p>
00260          * @since 1.0
00261          * @see JsGlobal#ReferenceError
00262          * @see Member#ReferenceError
00263          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00264          */
00265         public final static Mid ReferenceError      = id("ReferenceError"     );
00266         /**
00267          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00268          * used internally to define a member of the same name.</p>
00269          * @since 1.0
00270          * @see JsGlobal#RegExp
00271          * @see Member#RegExp
00272          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00273          */
00274         public final static Mid RegExp              = id("RegExp"             );
00275         /**
00276          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00277          * used internally to define a member of the same name.</p>
00278          * @since 1.0
00279          * @see JsGlobal#String
00280          * @see Member#String
00281          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00282          */
00283         public final static Mid String              = id("String"             );
00284         /**
00285          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00286          * used internally to define a member of the same name.</p>
00287          * @since 1.0
00288          * @see JsGlobal#SyntaxError
00289          * @see Member#SyntaxError
00290          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00291          */
00292         public final static Mid SyntaxError         = id("SyntaxError"        );
00293         /**
00294          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00295          * used internally to define a member of the same name.</p>
00296          * @since 1.0
00297          * @see JsGlobal#TypeError
00298          * @see Member#TypeError
00299          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00300          */
00301         public final static Mid TypeError           = id("TypeError"          );
00302         /**
00303          * <p>An <b>internal</b> static field defining a member ID of the field name and 
00304          * used internally to define a member of the same name.</p>
00305          * @since 1.0
00306          * @see JsGlobal#URIError
00307          * @see Member#URIError
00308          * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
00309          */
00310         public final static Mid URIError            = id("URIError"           );
00311     }
00312 
00313     /**
00314      * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
00315      * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
00316      * This class and the subclasses of this class are used to declare either <b>opaque</b> 
00317      * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
00318      * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
00319      * constructors are used to define the fields inside <b>opaque</b> classes. Under 
00320      * either circumstance, the field names must be exactly same as the member names, as 
00321      * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
00322      * based on the field names.</p>
00323      *
00324      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
00325      * 
00326      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
00327      * in the target codes. Re-compilers must exit with error on operations accessing that kind 
00328      * of class objects.
00329      * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
00330      * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
00331      * <pre>q.m</pre>
00332      * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
00333      * resolved from the instance of the enclosing member. Re-compilers must resolve an 
00334      * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
00335      * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
00336      * <pre>m</pre>
00337      * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
00338      * error on the access to <b>opaque</b> fields declared by this class under any other 
00339      * circumstances.
00340      */
00341     protected static class Member extends JsObject.Member
00342     {
00343         /**
00344          * <p>Internally constructs a member based on a qualifying member.</p>
00345          * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
00346          * or <b>internal</b> classes or class members.</p>
00347          * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
00348          * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
00349          * declared in the declaring class of this constructor itself or its subclasses. 
00350          * Under this circumstance, the field names must be exactly same as the member 
00351          * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
00352          * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
00353          * to their names appending to the name resolved from the specified qualifying 
00354          * member with a dot in between.</p>
00355          * @param q A qualifying member
00356          * @param mid The ID of the member to construct
00357          * @since 1.0
00358          * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
00359          */
00360         protected Member(JsObject.Member q, Mid mid) {
00361             super(q, mid);
00362         }
00363         /**
00364          * <p>Internally constructs a member without a qualifying member.</p>
00365          * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
00366          * or <b>internal</b> classes or class members.</p>
00367          * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
00368          * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
00369          * declared in <b>opaque</b> types other than the declaring class of this constructor 
00370          * itself and its subclasses. Under this circumstance, the field names must be 
00371          * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
00372          * types are generally resolved by re-compilers directly to identifiers of their names.</p>
00373          * @param mid The ID of the member to construct
00374          * @since 1.0
00375          * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
00376          */
00377         protected Member(Mid mid) {
00378             super(mid);
00379         }
00380         /**
00381          * <p>Evaluates the property, represented by the current member instance, of the 
00382          * argument object.</p>
00383          * @param o The argument object
00384          * @return The value of the current member based on the object argument.
00385          * @since 1.0
00386          * @javascript Re-compilers must convert the instance invocation of this method into 
00387          * the JavaScript expression: 
00388          * <pre>o.m</pre>
00389          * where <tt>m</tt> is the identifier name resolved from the current member 
00390          * instance of the invocation.
00391          */
00392         @Override
00393         public JsGlobal with(ObjectLike o) {
00394             return new JsGlobal(super.with(o));
00395         }
00396 
00397         /**
00398          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00399          * name of this field, qualified by the current member instance of the field, and 
00400          * to access the property of the name on an object.</p>
00401          * <p>The global <tt>Infinity</tt> property contains the special numeric value 
00402          * representing positive infinity.</p>
00403          * <p>Note that <tt>Infinity</tt> is not a constant and can be set to any other value, 
00404          * something that you should take care not to do. {@link JsGlobal.Number#POSITIVE_INFINITY} is 
00405          * a constant, however.</p>
00406          * <p>In JavaScript, the <tt>Infinity</tt> property is not enumerated by <tt>for/in</tt> 
00407          * loops and cannot be deleted with the <tt>delete</tt> operator.</p>
00408          * @since 1.0
00409          * @javascript Re-compilers must resolve the member of this instance field to the 
00410          * identifier of the field name appending to the identifier resolved from its 
00411          * qualifying member with a dot in between.
00412          */
00413         public final Value.Number.Member Infinity = new Value.Number.Member(this, Members.Infinity);
00414         /**
00415          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00416          * name of this field, qualified by the current member instance of the field, and 
00417          * to access the property of the name on an object.</p>
00418          * <p>The global <tt>NaN</tt> property is a reference to the special numeric 
00419          * not-a-number value.</p>
00420          * <p>Note that <tt>NaN</tt> is not a constant and can be set to any other value, 
00421          * something that you should take care not to do.</p>
00422          * <p>In JavaScript, the <tt>NaN</tt> property is not enumerated by <tt>for/in</tt> 
00423          * loops and cannot be deleted with the <tt>delete</tt> operator.</p>
00424          * @since 1.0
00425          * @javascript Re-compilers must resolve the member of this instance field to the 
00426          * identifier of the field name appending to the identifier resolved from its 
00427          * qualifying member with a dot in between.
00428          */
00429         public final Value.Number.Member NaN      = new Value.Number.Member(this, Members.NaN     );
00430         /**
00431          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00432          * name of this field, qualified by the current member instance of the field, and 
00433          * to access the property of the name on an object.</p>
00434          * @since 1.0
00435          * @see JsGlobal#decodeURI(Object)
00436          * @javascript Re-compilers must resolve the member of this instance field to the 
00437          * identifier of the field name appending to the identifier resolved from its 
00438          * qualifying member with a dot in between.
00439          */
00440         public final JsFunction.Member<java.lang.String> decodeURI          = new JsFunction.Member<java.lang.String>(this, Members.decodeURI         );
00441         /**
00442          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00443          * name of this field, qualified by the current member instance of the field, and 
00444          * to access the property of the name on an object.</p>
00445          * @see JsGlobal#decodeURIComponent(Object)
00446          * @since 1.0
00447          * @javascript Re-compilers must resolve the member of this instance field to the 
00448          * identifier of the field name appending to the identifier resolved from its 
00449          * qualifying member with a dot in between.
00450          */
00451         public final JsFunction.Member<java.lang.String> decodeURIComponent = new JsFunction.Member<java.lang.String>(this, Members.decodeURIComponent);
00452         /**
00453          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00454          * name of this field, qualified by the current member instance of the field, and 
00455          * to access the property of the name on an object.</p>
00456          * @since 1.0
00457          * @see JsGlobal#encodeURI(Object)
00458          * @javascript Re-compilers must resolve the member of this instance field to the 
00459          * identifier of the field name appending to the identifier resolved from its 
00460          * qualifying member with a dot in between.
00461          */
00462         public final JsFunction.Member<java.lang.String> encodeURI          = new JsFunction.Member<java.lang.String>(this, Members.encodeURI         );
00463         /**
00464          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00465          * name of this field, qualified by the current member instance of the field, and 
00466          * to access the property of the name on an object.</p>
00467          * @since 1.0
00468          * @see JsGlobal#encodeURIComponent(Object)
00469          * @javascript Re-compilers must resolve the member of this instance field to the 
00470          * identifier of the field name appending to the identifier resolved from its 
00471          * qualifying member with a dot in between.
00472          */
00473         public final JsFunction.Member<java.lang.String> encodeURIComponent = new JsFunction.Member<java.lang.String>(this, Members.encodeURIComponent);
00474         /**
00475          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00476          * name of this field, qualified by the current member instance of the field, and 
00477          * to access the property of the name on an object.</p>
00478          * @since 1.0
00479          * @see JsGlobal#escape(Object)
00480          * @javascript Re-compilers must resolve the member of this instance field to the 
00481          * identifier of the field name appending to the identifier resolved from its 
00482          * qualifying member with a dot in between.
00483          */
00484         public final JsFunction.Member<java.lang.String> escape   = new JsFunction.Member<java.lang.String>(this, Members.escape  );
00485         /**
00486          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00487          * name of this field, qualified by the current member instance of the field, and 
00488          * to access the property of the name on an object.</p>
00489          * @since 1.0
00490          * @see JsGlobal#unescape(Object)
00491          * @javascript Re-compilers must resolve the member of this instance field to the 
00492          * identifier of the field name appending to the identifier resolved from its 
00493          * qualifying member with a dot in between.
00494          */
00495         public final JsFunction.Member<java.lang.String> unescape = new JsFunction.Member<java.lang.String>(this, Members.unescape);
00496         /**
00497          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00498          * name of this field, qualified by the current member instance of the field, and 
00499          * to access the property of the name on an object.</p>
00500          * @since 1.0
00501          * @see JsGlobal#eval(Object)
00502          * @javascript Re-compilers must resolve the member of this instance field to the 
00503          * identifier of the field name appending to the identifier resolved from its 
00504          * qualifying member with a dot in between.
00505          */
00506         public final JsFunction.Member<?> eval = new JsFunction.Member<java.lang.Object>(this, Members.eval);
00507         /**
00508          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00509          * name of this field, qualified by the current member instance of the field, and 
00510          * to access the property of the name on an object.</p>
00511          * @since 1.0
00512          * @see JsGlobal#isFinite(Object)
00513          * @javascript Re-compilers must resolve the member of this instance field to the 
00514          * identifier of the field name appending to the identifier resolved from its 
00515          * qualifying member with a dot in between.
00516          */
00517         public final JsFunction.Member<java.lang.Boolean> isFinite = new JsFunction.Member<java.lang.Boolean>(this, Members.isFinite);
00518         /**
00519          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00520          * name of this field, qualified by the current member instance of the field, and 
00521          * to access the property of the name on an object.</p>
00522          * @since 1.0
00523          * @see JsGlobal#isNaN(Object)
00524          * @javascript Re-compilers must resolve the member of this instance field to the 
00525          * identifier of the field name appending to the identifier resolved from its 
00526          * qualifying member with a dot in between.
00527          */
00528         public final JsFunction.Member<java.lang.Boolean> isNaN    = new JsFunction.Member<java.lang.Boolean>(this, Members.isNaN   );
00529         /**
00530          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00531          * name of this field, qualified by the current member instance of the field, and 
00532          * to access the property of the name on an object.</p>
00533          * @since 1.0
00534          * @see JsGlobal#parseFloat(Object)
00535          * @javascript Re-compilers must resolve the member of this instance field to the 
00536          * identifier of the field name appending to the identifier resolved from its 
00537          * qualifying member with a dot in between.
00538          */
00539         public final JsFunction.Member<java.lang.Number> parseFloat = new JsFunction.Member<java.lang.Number>(this, Members.parseFloat);
00540         /**
00541          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00542          * name of this field, qualified by the current member instance of the field, and 
00543          * to access the property of the name on an object.</p>
00544          * @since 1.0
00545          * @see JsGlobal#parseInt(Object)
00546          * @javascript Re-compilers must resolve the member of this instance field to the 
00547          * identifier of the field name appending to the identifier resolved from its 
00548          * qualifying member with a dot in between.
00549          */
00550         public final JsFunction.Member<java.lang.Number> parseInt   = new JsFunction.Member<java.lang.Number>(this, Members.parseInt  );
00551         /**
00552          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00553          * name of this field, qualified by the current member instance of the field, and 
00554          * to access the property of the name on an object.</p>
00555          * @since 1.0
00556          * @see JsGlobal.Array
00557          * @javascript Re-compilers must resolve the member of this instance field to the 
00558          * identifier of the field name appending to the identifier resolved from its 
00559          * qualifying member with a dot in between.
00560          */
00561         public final JsGlobal.Array         .Member Array          = new JsGlobal.Array         .Member(this, Members.Array         );
00562         /**
00563          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00564          * name of this field, qualified by the current member instance of the field, and 
00565          * to access the property of the name on an object.</p>
00566          * @since 1.0
00567          * @see JsGlobal.Function
00568          * @javascript Re-compilers must resolve the member of this instance field to the 
00569          * identifier of the field name appending to the identifier resolved from its 
00570          * qualifying member with a dot in between.
00571          */
00572         public final JsGlobal.Function.Member<JsObject> Function = new JsGlobal.Function.Member<JsObject>(this, Members.Function    );
00573         /**
00574          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00575          * name of this field, qualified by the current member instance of the field, and 
00576          * to access the property of the name on an object.</p>
00577          * @since 1.0
00578          * @see JsGlobal.Boolean
00579          * @javascript Re-compilers must resolve the member of this instance field to the 
00580          * identifier of the field name appending to the identifier resolved from its 
00581          * qualifying member with a dot in between.
00582          */
00583         public final JsGlobal.Boolean       .Member Boolean        = new JsGlobal.Boolean       .Member(this, Members.Boolean       );
00584         /**
00585          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00586          * name of this field, qualified by the current member instance of the field, and 
00587          * to access the property of the name on an object.</p>
00588          * @since 1.0
00589          * @see JsGlobal.Date
00590          * @javascript Re-compilers must resolve the member of this instance field to the 
00591          * identifier of the field name appending to the identifier resolved from its 
00592          * qualifying member with a dot in between.
00593          */
00594         public final JsGlobal.Date          .Member Date           = new JsGlobal.Date          .Member(this, Members.Date          );
00595         /**
00596          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00597          * name of this field, qualified by the current member instance of the field, and 
00598          * to access the property of the name on an object.</p>
00599          * @since 1.0
00600          * @see JsGlobal.Error
00601          * @javascript Re-compilers must resolve the member of this instance field to the 
00602          * identifier of the field name appending to the identifier resolved from its 
00603          * qualifying member with a dot in between.
00604          */
00605         public final JsGlobal.Error         .Member Error          = new JsGlobal.Error         .Member(this, Members.Error         );
00606         /**
00607          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00608          * name of this field, qualified by the current member instance of the field, and 
00609          * to access the property of the name on an object.</p>
00610          * @since 1.0
00611          * @see JsGlobal.EvalError
00612          * @javascript Re-compilers must resolve the member of this instance field to the 
00613          * identifier of the field name appending to the identifier resolved from its 
00614          * qualifying member with a dot in between.
00615          */
00616         public final JsGlobal.EvalError     .Member EvalError      = new JsGlobal.EvalError     .Member(this, Members.EvalError     );
00617         /**
00618          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00619          * name of this field, qualified by the current member instance of the field, and 
00620          * to access the property of the name on an object.</p>
00621          * @since 1.0
00622          * @see JsGlobal.Math
00623          * @javascript Re-compilers must resolve the member of this instance field to the 
00624          * identifier of the field name appending to the identifier resolved from its 
00625          * qualifying member with a dot in between.
00626          */
00627         public final JsGlobal.Math          .Member Math           = new JsGlobal.Math          .Member(this, Members.Math          );
00628         /**
00629          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00630          * name of this field, qualified by the current member instance of the field, and 
00631          * to access the property of the name on an object.</p>
00632          * @since 1.0
00633          * @see JsGlobal.Number
00634          * @javascript Re-compilers must resolve the member of this instance field to the 
00635          * identifier of the field name appending to the identifier resolved from its 
00636          * qualifying member with a dot in between.
00637          */
00638         public final JsGlobal.Number        .Member Number         = new JsGlobal.Number        .Member(this, Members.Number        );
00639         /**
00640          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00641          * name of this field, qualified by the current member instance of the field, and 
00642          * to access the property of the name on an object.</p>
00643          * @since 1.0
00644          * @see JsGlobal.Object
00645          * @javascript Re-compilers must resolve the member of this instance field to the 
00646          * identifier of the field name appending to the identifier resolved from its 
00647          * qualifying member with a dot in between.
00648          */
00649         public final JsGlobal.Object        .Member Object         = new JsGlobal.Object        .Member(this, Members.Object        );
00650         /**
00651          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00652          * name of this field, qualified by the current member instance of the field, and 
00653          * to access the property of the name on an object.</p>
00654          * @since 1.0
00655          * @see JsGlobal.RangeError
00656          * @javascript Re-compilers must resolve the member of this instance field to the 
00657          * identifier of the field name appending to the identifier resolved from its 
00658          * qualifying member with a dot in between.
00659          */
00660         public final JsGlobal.RangeError    .Member RangeError     = new JsGlobal.RangeError    .Member(this, Members.RangeError    );;
00661         /**
00662          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00663          * name of this field, qualified by the current member instance of the field, and 
00664          * to access the property of the name on an object.</p>
00665          * @since 1.0
00666          * @see JsGlobal.ReferenceError
00667          * @javascript Re-compilers must resolve the member of this instance field to the 
00668          * identifier of the field name appending to the identifier resolved from its 
00669          * qualifying member with a dot in between.
00670          */
00671         public final JsGlobal.ReferenceError.Member ReferenceError = new JsGlobal.ReferenceError.Member(this, Members.ReferenceError);
00672         /**
00673          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00674          * name of this field, qualified by the current member instance of the field, and 
00675          * to access the property of the name on an object.</p>
00676          * @since 1.0
00677          * @see JsGlobal.RegExp
00678          * @javascript Re-compilers must resolve the member of this instance field to the 
00679          * identifier of the field name appending to the identifier resolved from its 
00680          * qualifying member with a dot in between.
00681          */
00682         public final JsGlobal.RegExp        .Member RegExp         = new JsGlobal.RegExp        .Member(this, Members.RegExp        );
00683         /**
00684          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00685          * name of this field, qualified by the current member instance of the field, and 
00686          * to access the property of the name on an object.</p>
00687          * @since 1.0
00688          * @see JsGlobal.String
00689          * @javascript Re-compilers must resolve the member of this instance field to the 
00690          * identifier of the field name appending to the identifier resolved from its 
00691          * qualifying member with a dot in between.
00692          */
00693         public final JsGlobal.String        .Member String         = new JsGlobal.String        .Member(this, Members.String        );
00694         /**
00695          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00696          * name of this field, qualified by the current member instance of the field, and 
00697          * to access the property of the name on an object.</p>
00698          * @since 1.0
00699          * @see JsGlobal.SyntaxError
00700          * @javascript Re-compilers must resolve the member of this instance field to the 
00701          * identifier of the field name appending to the identifier resolved from its 
00702          * qualifying member with a dot in between.
00703          */
00704         public final JsGlobal.SyntaxError   .Member SyntaxError    = new JsGlobal.SyntaxError   .Member(this, Members.SyntaxError   );
00705         /**
00706          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00707          * name of this field, qualified by the current member instance of the field, and 
00708          * to access the property of the name on an object.</p>
00709          * @since 1.0
00710          * @see JsGlobal.TypeError
00711          * @javascript Re-compilers must resolve the member of this instance field to the 
00712          * identifier of the field name appending to the identifier resolved from its 
00713          * qualifying member with a dot in between.
00714          */
00715         public final JsGlobal.TypeError     .Member TypeError      = new JsGlobal.TypeError     .Member(this, Members.TypeError     );
00716         /**
00717          * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
00718          * name of this field, qualified by the current member instance of the field, and 
00719          * to access the property of the name on an object.</p>
00720          * @since 1.0
00721          * @see JsGlobal.URIError
00722          * @javascript Re-compilers must resolve the member of this instance field to the 
00723          * identifier of the field name appending to the identifier resolved from its 
00724          * qualifying member with a dot in between.
00725          */
00726         public final JsGlobal.URIError      .Member URIError       = new JsGlobal.URIError      .Member(this, Members.URIError      );
00727     }
00728 
00729     /**
00730      * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
00731      * with the wrapping constructor.</p>
00732      * @param var The argument of an <b>opaque</b> object.
00733      * @since 1.0
00734      * @javascript Re-compilers must ignore the construction operation of this constructor, 
00735      * that is, replacing it with its only argument.
00736      */
00737     public JsGlobal(JsObject var) {
00738         super(var);
00739     }
00740 
00741     /**
00742      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00743      * without a qualifying member and to access the property of the name on an object.</p>
00744      * <p>The global <tt>Infinity</tt> property contains the special numeric value 
00745      * representing positive infinity.</p>
00746      * <p>Note that <tt>Infinity</tt> is not a constant and can be set to any other value, 
00747      * something that you should take care not to do. {@link JsGlobal.Number#POSITIVE_INFINITY} is 
00748      * a constant, however.</p>
00749      * <p>In JavaScript, the <tt>Infinity</tt> property is not enumerated by <tt>for/in</tt> 
00750      * loops and cannot be deleted with the <tt>delete</tt> operator.</p>
00751      * @since 1.0
00752      * @javascript Re-compilers must resolve the member of this static field to the 
00753      * identifier of the field name.
00754      */
00755     public static final Value.Number.Member Infinity = new Value.Number.Member(Members.Infinity);
00756     /**
00757      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00758      * without a qualifying member and to access the property of the name on an object.</p>
00759      * <p>The global <tt>NaN</tt> property is a reference to the special numeric 
00760      * not-a-number value.</p>
00761      * <p>Note that <tt>NaN</tt> is not a constant and can be set to any other value, 
00762      * something that you should take care not to do.</p>
00763      * <p>In JavaScript, the <tt>NaN</tt> property is not enumerated by <tt>for/in</tt> 
00764      * loops and cannot be deleted with the <tt>delete</tt> operator.</p>
00765      * @since 1.0
00766      * @javascript Re-compilers must resolve the member of this static field to the 
00767      * identifier of the field name.
00768      */
00769     public static final Value.Number.Member NaN      = new Value.Number.Member(Members.NaN     );
00770     /**
00771      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00772      * without a qualifying member and to access the property of the name on an object.</p>
00773      * @since 1.0
00774      * @see JsGlobal#decodeURI(Object)
00775      * @javascript Re-compilers must resolve the member of this static field to the 
00776      * identifier of the field name.
00777      */
00778     public static final JsFunction.Member<java.lang.String> decodeURI          = new JsFunction.Member<java.lang.String>(Members.decodeURI         );
00779     /**
00780      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00781      * without a qualifying member and to access the property of the name on an object.</p>
00782      * @since 1.0
00783      * @see JsGlobal#decodeURIComponent(Object)
00784      * @javascript Re-compilers must resolve the member of this static field to the 
00785      * identifier of the field name.
00786      */
00787     public static final JsFunction.Member<java.lang.String> decodeURIComponent = new JsFunction.Member<java.lang.String>(Members.decodeURIComponent);
00788     /**
00789      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00790      * without a qualifying member and to access the property of the name on an object.</p>
00791      * @since 1.0
00792      * @see JsGlobal#encodeURI(Object)
00793      * @javascript Re-compilers must resolve the member of this static field to the 
00794      * identifier of the field name.
00795      */
00796     public static final JsFunction.Member<java.lang.String> encodeURI          = new JsFunction.Member<java.lang.String>(Members.encodeURI         );
00797     /**
00798      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00799      * without a qualifying member and to access the property of the name on an object.</p>
00800      * @since 1.0
00801      * @see JsGlobal#encodeURIComponent(Object)
00802      * @javascript Re-compilers must resolve the member of this static field to the 
00803      * identifier of the field name.
00804      */
00805     public static final JsFunction.Member<java.lang.String> encodeURIComponent = new JsFunction.Member<java.lang.String>(Members.encodeURIComponent);
00806     /**
00807      * <p>Decodes a string escaped with {@link #encodeURI(Object)}.</p>
00808      * @param s A string that contains an encoded URI or other text to be decoded.
00809      * @return A copy of <tt>s</tt>, with any hexadecimal escape sequences replaced with 
00810      * the characters they represent.
00811      * @throws RuntimeException JavaScript throws a <tt>URIError</tt> if one or more of the 
00812      * escape sequences in <tt>s</tt> is malformed and cannot be correctly decoded. See 
00813      * {@link Js#err(Object)} and {@link js.core.JsURIError} for JS Simulation.
00814      * @see #encodeURI(Object)
00815      * @see js.Js#decodeURI(Object)
00816      * @see jsx.client.Global#decodeURI(Object)
00817      * @see jsx.client.Client#decodeURI(Object)
00818      * @since 1.0
00819      * @javascript Re-compilers must convert the instance invocation of this method directly 
00820      * into a JavaScript invocation on its current object instance without changing the 
00821      * method name, but expanding variable arguments, if any, into comma-separated values. 
00822      */
00823     public final java.lang.String decodeURI(java.lang.Object s) {
00824         return call(decodeURI, s);
00825     }
00826     /**
00827      * <p>Decodes a string escaped with {@link #encodeURIComponent(Object)}.</p>
00828      * @param s A string that contains an encoded URI component or other text to be decoded.
00829      * @return A copy of <tt>s</tt>, with any hexadecimal escape sequences replaced 
00830      * with the characters they represent.
00831      * @throws RuntimeException JavaScript throws a <tt>URIError</tt> if one or more of the 
00832      * escape sequences in <tt>s</tt> is malformed and cannot be correctly decoded. See 
00833      * {@link Js#err(Object)} and {@link js.core.JsURIError} for JS Simulation.
00834      * @see #encodeURIComponent(Object)
00835      * @see js.Js#decodeURIComponent(Object)
00836      * @see jsx.client.Global#decodeURIComponent(Object)
00837      * @see jsx.client.Client#decodeURIComponent(Object)
00838      * @since 1.0
00839      * @javascript Re-compilers must convert the instance invocation of this method directly 
00840      * into a JavaScript invocation on its current object instance without changing the 
00841      * method name, but expanding variable arguments, if any, into comma-separated values. 
00842      */
00843     public final java.lang.String decodeURIComponent(java.lang.Object s) {
00844         return call(decodeURIComponent, s);
00845     }
00846     /**
00847      * <p>Encodes a URI by escaping certain characters.</p>
00848      * @param uri A string that contains the URI or other text to be encoded.
00849      * @return A copy of <tt>uri</tt>, with any hexadecimal escape sequences replaced 
00850      * with the characters they represent..
00851      * @throws RuntimeException JavaScript throws a <tt>URIError</tt> if <tt>s</tt> 
00852      * contains malformed unicode surrogate pairs and cannot be encoded. See 
00853      * {@link Js#err(Object)} and {@link js.core.JsURIError} for JS Simulation.
00854      * @see #decodeURI(Object)
00855      * @see js.Js#encodeURI(Object)
00856      * @see jsx.client.Global#encodeURI(Object)
00857      * @see jsx.client.Client#encodeURI(Object)
00858      * @since 1.0
00859      * @javascript Re-compilers must convert the instance invocation of this method directly 
00860      * into a JavaScript invocation on its current object instance without changing the 
00861      * method name, but expanding variable arguments, if any, into comma-separated values. 
00862      */
00863     public final java.lang.String encodeURI(java.lang.Object uri) {
00864         return call(encodeURI, uri);
00865     }
00866     /**
00867      * <p>Encodes a URI component by escaping certain characters.</p>
00868      * @param uri A string that contains a portion of a URI or other text to be encoded.
00869      * @return A copy of <tt>uri</tt>, with certain characters replaced by hexadecimal escape sequences.
00870      * @throws RuntimeException JavaScript throws a <tt>URIError</tt> if <tt>s</tt> 
00871      * contains malformed unicode surrogate pairs and cannot be encoded. See 
00872      * {@link Js#err(Object)} and {@link js.core.JsURIError} for JS Simulation.
00873      * @see #decodeURIComponent(Object)
00874      * @see js.Js#encodeURIComponent(Object)
00875      * @see jsx.client.Global#encodeURIComponent(Object)
00876      * @see jsx.client.Client#encodeURIComponent(Object)
00877      * @since 1.0
00878      * @javascript Re-compilers must convert the instance invocation of this method directly 
00879      * into a JavaScript invocation on its current object instance without changing the 
00880      * method name, but expanding variable arguments, if any, into comma-separated values. 
00881      */
00882     public final java.lang.String encodeURIComponent(java.lang.Object uri) {
00883         return call(encodeURIComponent, uri);
00884     }
00885     /**
00886      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00887      * without a qualifying member and to access the property of the name on an object.</p>
00888      * @since 1.0
00889      * @see JsGlobal#escape(Object)
00890      * @javascript Re-compilers must resolve the member of this static field to the 
00891      * identifier of the field name.
00892      */
00893     public static final JsFunction.Member<java.lang.String> escape   = new JsFunction.Member<java.lang.String>(Members.escape  );
00894     /**
00895      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00896      * without a qualifying member and to access the property of the name on an object.</p>
00897      * @since 1.0
00898      * @see JsGlobal#unescape(Object)
00899      * @javascript Re-compilers must resolve the member of this static field to the 
00900      * identifier of the field name.
00901      */
00902     public static final JsFunction.Member<java.lang.String> unescape = new JsFunction.Member<java.lang.String>(Members.unescape);
00903     /**
00904      * <p>Encodes a string by replacing certain characters with escape sequences.</p>
00905      * @param s The string that is to be "escaped" or encoded.
00906      * @return An encoded copy of <tt>s</tt> in which certain characters have been 
00907      * replaced by hexadecimal escape sequences.
00908      * @see #unescape(Object)
00909      * @see js.Js#escape(Object)
00910      * @see jsx.client.Global#escape(Object)
00911      * @see jsx.client.Client#escape(Object)
00912      * @since 1.0
00913      * @javascript Re-compilers must convert the instance invocation of this method directly 
00914      * into a JavaScript invocation on its current object instance without changing the 
00915      * method name, but expanding variable arguments, if any, into comma-separated values. 
00916      */
00917     public final java.lang.String escape(java.lang.Object s) {
00918         return call(escape, s);
00919     }
00920     /**
00921      * <p>Decodes a string encoded with {@link #escape(Object)}.</p>
00922      * @param s The string that is to be decoded or "unescaped".
00923      * @return A decoded copy of <tt>s</tt>.
00924      * @see #escape(Object)
00925      * @see js.Js#unescape(Object)
00926      * @see jsx.client.Global#unescape(Object)
00927      * @see jsx.client.Client#unescape(Object)
00928      * @since 1.0
00929      * @javascript Re-compilers must convert the instance invocation of this method directly 
00930      * into a JavaScript invocation on its current object instance without changing the 
00931      * method name, but expanding variable arguments, if any, into comma-separated values. 
00932      */
00933     public final java.lang.String unescape(java.lang.Object s) {
00934         return call(unescape, s);
00935     }
00936     /**
00937      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00938      * without a qualifying member and to access the property of the name on an object.</p>
00939      * @since 1.0
00940      * @see JsGlobal#eval(Object)
00941      * @javascript Re-compilers must resolve the member of this static field to the 
00942      * identifier of the field name.
00943      */
00944     public static final JsFunction.Member<?> eval = new JsFunction.Member<java.lang.Object>(Members.eval);
00945     /**
00946      * <p>Evaluates the argument string as JavaScript code and returns the result.</p>
00947      * <p>In JavaScript, <tt>eval()</tt> is a global method that evaluates a string of 
00948      * JavaScript code in the current lexical scope. If the code contains an expression, 
00949      * eval evaluates the expression and returns its value. If the code contains a 
00950      * JavaScript statement or statements, it executes those statements and returns the 
00951      * value, if any, returned by the last statement. If the code does not return any 
00952      * value, <tt>eval()</tt> returns undefined. Finally, if code throws an exception, 
00953      * <tt>eval()</tt> passes that exception on to the caller.</p>
00954      * <p>The global function <tt>eval()</tt> provides a very powerful capability to 
00955      * the JavaScript language, but its use is infrequent in real-world programs. 
00956      * Obvious uses are to write programs that act as recursive JavaScript interpreters 
00957      * and to write programs that dynamically generate and evaluate JavaScript code.</p>
00958      * <p>Most JavaScript functions and methods that expect string arguments accept 
00959      * arguments of other types as well and simply convert those argument values to 
00960      * strings before proceeding. <tt>eval()</tt> does not behave like this. If the 
00961      * code argument is not a primitive string, it is simply returned unchanged. Be 
00962      * careful, therefore, that you do not inadvertently pass a String object to 
00963      * <tt>eval()</tt> when you intended to pass a primitive string value.</p>
00964      * <p>For purposes of implementation efficiency, the ECMAScript v3 standard places 
00965      * an unusual restriction on the use of <tt>eval()</tt>. An ECMAScript implementation 
00966      * is allowed to throw an <tt>EvalError</tt> exception if you attempt to overwrite 
00967      * the <tt>eval</tt> property or if you assign the <tt>eval()</tt> method to another 
00968      * property and attempt to invoke it through that property.</p>
00969      * @param s A string of JavaScript code.
00970      * @return The return value of the evaluated code, if any.
00971      * @throws RuntimeException JavaScript throws a <tt>SyntaxError</tt> if the argument string 
00972      * does not contain legal JavaScript, a <tt>EvalError</tt> if the <tt>eval</tt> function 
00973      * was called illegally, through an identifier other than "eval", or other JavaScript error 
00974      * generated by the code passed. See {@link Js#err(Object)}, {@link js.core.JsSyntaxError}, 
00975      * {@link js.core.JsEvalError}, and {@link js.core.JsError} for JS Simulation.
00976      * @since 1.0
00977      * @javascript Re-compilers must convert the instance invocation of this method directly 
00978      * into a JavaScript invocation on its current object instance without changing the 
00979      * method name, but expanding variable arguments, if any, into comma-separated values. 
00980      */
00981     public final java.lang.Object eval(java.lang.Object s) {
00982         return call(eval, s);
00983     }
00984     /**
00985      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00986      * without a qualifying member and to access the property of the name on an object.</p>
00987      * @since 1.0
00988      * @see JsGlobal#isFinite(Object)
00989      * @javascript Re-compilers must resolve the member of this static field to the 
00990      * identifier of the field name.
00991      */
00992     public static final JsFunction.Member<java.lang.Boolean> isFinite = new JsFunction.Member<java.lang.Boolean>(Members.isFinite);
00993     /**
00994      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
00995      * without a qualifying member and to access the property of the name on an object.</p>
00996      * @since 1.0
00997      * @see JsGlobal#isNaN(Object)
00998      * @javascript Re-compilers must resolve the member of this static field to the 
00999      * identifier of the field name.
01000      */
01001     public static final JsFunction.Member<java.lang.Boolean> isNaN    = new JsFunction.Member<java.lang.Boolean>(Members.isNaN   );
01002     /**
01003      * <p>Tests whether a value is a finite number.</p>
01004      * @param v The number to be tested.
01005      * @return <tt>true</tt> if <tt>v</tt> is (or can be converted to) a finite 
01006      * number, or <tt>false</tt> if <tt>v</tt> is <tt>NaN</tt> (not a number) 
01007      * or positive or negative infinity.
01008      * @see js.Js#isFinite(Object)
01009      * @see jsx.client.Global#isFinite(Object)
01010      * @see jsx.client.Client#isFinite(Object)
01011      * @since 1.0
01012      * @javascript Re-compilers must convert the instance invocation of this method directly 
01013      * into a JavaScript invocation on its current object instance without changing the 
01014      * method name, but expanding variable arguments, if any, into comma-separated values. 
01015      */
01016     public final boolean isFinite(java.lang.Object v) {
01017         return call(isFinite, v);
01018     }
01019     /**
01020      * <p>Tests whether a value is the not-a-number value.</p>
01021      * <p>In JavaScript, This function tests its argument to determine whether it is the 
01022      * value <tt>NaN</tt>, which represents an illegal number (such as the result of 
01023      * division by zero). This function is required because comparing a <tt>NaN</tt> 
01024      * with any value, including itself, always returns <tt>false</tt>, so it is not 
01025      * possible to test for <tt>NaN</tt> with the == or === operators.</p>
01026      * <p>A common use in JavaScript of this function is to test the results of {@link #parseFloat(Object)} 
01027      * and {@link #parseInt(Object)} to determine if they represent legal numbers. You can 
01028      * also use {@link #isNaN(Object)} to check for arithmetic errors, such as division by 
01029      * zero</p>
01030      * @param v The value to be tested.
01031      * @return <tt>true</tt> if <tt>v</tt> is (or can be converted to) the special 
01032      * not-a-number value; <tt>false</tt> if <tt>v</tt> is any other value.
01033      * @see js.Js#isNaN(Object)
01034      * @see jsx.client.Global#isNaN(Object)
01035      * @see jsx.client.Client#isNaN(Object)
01036      * @since 1.0
01037      * @javascript Re-compilers must convert the instance invocation of this method directly 
01038      * into a JavaScript invocation on its current object instance without changing the 
01039      * method name, but expanding variable arguments, if any, into comma-separated values. 
01040      */
01041     public final boolean isNaN(java.lang.Object v) {
01042         return call(isNaN, v);
01043     }
01044     /**
01045      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01046      * without a qualifying member and to access the property of the name on an object.</p>
01047      * @since 1.0
01048      * @see JsGlobal#parseFloat(Object)
01049      * @javascript Re-compilers must resolve the member of this static field to the 
01050      * identifier of the field name.
01051      */
01052     public static final JsFunction.Member<java.lang.Number> parseFloat = new JsFunction.Member<java.lang.Number>(Members.parseFloat);
01053     /**
01054      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01055      * without a qualifying member and to access the property of the name on an object.</p>
01056      * @since 1.0
01057      * @see JsGlobal#parseInt(Object)
01058      * @javascript Re-compilers must resolve the member of this static field to the 
01059      * identifier of the field name.
01060      */
01061     public static final JsFunction.Member<java.lang.Number> parseInt   = new JsFunction.Member<java.lang.Number>(Members.parseInt  );
01062     /**
01063      * <p>Parses a number from a string.</p>
01064      * <p>In JavaScript, this function parses and returns the first number that occurs in 
01065      * <tt>value</tt>. Parsing stops, and the value is returned, when it encounters a 
01066      * character in <tt>value</tt> that is not a valid part of the number. If <tt>value</tt> 
01067      * does not begin with a number that it can parse, the function returns the not-a-number 
01068      * value <tt>NaN</tt>. Test for this return value with the {@link #isNaN(Object)} 
01069      * function. If you want to parse only the integer portion of a number, use {@link #parseInt(Object)} 
01070      * or {@link #parseInt(Object, Object)} instead of this one.</p>
01071      * @param value The string to be parsed and converted to a number.
01072      * @return The parsed number, or <tt>NaN</tt> if <tt>value</tt> does not begin 
01073      * with a valid number. In JavaScript 1.0, this function returns 0 instead of <tt>NaN</tt> 
01074      * when <tt>value</tt> cannot be parsed as a number.
01075      * @see #parseInt(Object)
01076      * @see js.Js#parseFloat(Object)
01077      * @see jsx.client.Global#parseFloat(Object)
01078      * @see jsx.client.Client#parseFloat(Object)
01079      * @since 1.0
01080      * @javascript Re-compilers must convert the instance invocation of this method directly 
01081      * into a JavaScript invocation on its current object instance without changing the 
01082      * method name, but expanding variable arguments, if any, into comma-separated values. 
01083      */
01084     public final java.lang.Number parseFloat(java.lang.Object value) {
01085         return call(parseFloat, value);
01086     }
01087     /**
01088      * <p>Parses an integer from a string.</p>
01089      * <p>In JavaScript, this function parses and returns the first number (with an 
01090      * optional leading minus sign) that occurs in <tt>value</tt>. Parsing stops, and 
01091      * the value is returned, when it encounters a character in <tt>value</tt> that is 
01092      * not a valid digit for the specified radix. If <tt>value</tt> does not begin with 
01093      * a number that it can parse, the function returns the not-a-number value <tt>NaN</tt>. 
01094      * Use the {@link #isNaN(Object)} function to test for this return value.</p>
01095      * @param value The string to be parsed.
01096      * @return The parsed number, or <tt>NaN</tt> if <tt>value</tt> does not begin with 
01097      * a valid integer. In JavaScript 1.0, this function returns 0 instead of <tt>NaN</tt> 
01098      * when it cannot parse <tt>value</tt>.
01099      * @see #parseFloat(Object)
01100      * @see #parseInt(Object, Object)
01101      * @see js.Js#parseInt(Object)
01102      * @see jsx.client.Global#parseInt(Object)
01103      * @see jsx.client.Client#parseInt(Object)
01104      * @since 1.0
01105      * @javascript Re-compilers must convert the instance invocation of this method directly 
01106      * into a JavaScript invocation on its current object instance without changing the 
01107      * method name, but expanding variable arguments, if any, into comma-separated values. 
01108      */
01109     public final java.lang.Number parseInt(java.lang.Object value) {
01110         return call(parseInt, value);
01111     }
01112     /**
01113      * <p>Parses an integer from a string in a base specified.</p>
01114      * <p>In JavaScript, this function parses and returns the first number (with an 
01115      * optional leading minus sign) that occurs in <tt>value</tt>. Parsing stops, and 
01116      * the value is returned, when it encounters a character in <tt>value</tt> that is 
01117      * not a valid digit for the specified radix. If <tt>value</tt> does not begin with 
01118      * a number that it can parse, the function returns the not-a-number value <tt>NaN</tt>. 
01119      * Use the {@link #isNaN(Object)} function to test for this return value.</p>
01120      * <p>The <tt>radix</tt> argument specifies the base of the number to be parsed. 
01121      * Specifying 10 makes this function parse a decimal number. The value 8 specifies that 
01122      * an octal number (using digits 0 through 7) is to be parsed. The value 16 specifies 
01123      * a hexadecimal value, using digits 0 through 9 and letters A through F. <tt>radix</tt> 
01124      * can be any value between 2 and 36.</p>
01125      * <p>If <tt>radix</tt> is 0 or is undefined, this function tries to determine the 
01126      * radix of the number from <tt>value</tt>. If <tt>value</tt> begins (after an 
01127      * optional minus sign) with 0x, it parses the remainder of <tt>value</tt> as a 
01128      * hexadecimal number. If <tt>value</tt> begins with a 0, the ECMAScript v3 standard 
01129      * allows an implementation of this function to interpret the following characters as 
01130      * an octal number or as a decimal number. Otherwise, if <tt>value</tt> begins with 
01131      * a digit from 1 through 9, it parses it as a decimal number</p>
01132      * @param value The string to be parsed.
01133      * @param radix An optional integer argument that represents the radix (or base) of the 
01134      * number to be parsed. If this argument is undefined or is 0, the number is parsed in 
01135      * base 10 or in base 16 if it begins with 0x or 0X. If this argument is less than 2 or 
01136      * greater than 36, <tt>NaN</tt> is returned.
01137      * @return The parsed number, or <tt>NaN</tt> if <tt>value</tt> does not begin with 
01138      * a valid integer. In JavaScript 1.0, this function returns 0 instead of <tt>NaN</tt> 
01139      * when it cannot parse <tt>value</tt>.
01140      * @see #parseInt(Object)
01141      * @see js.Js#parseInt(Object, int)
01142      * @see jsx.client.Global#parseInt(Object, int)
01143      * @see jsx.client.Client#parseInt(Object, int)
01144      * @since 1.0
01145      * @javascript Re-compilers must convert the instance invocation of this method directly 
01146      * into a JavaScript invocation on its current object instance without changing the 
01147      * method name, but expanding variable arguments, if any, into comma-separated values. 
01148      */
01149     public final java.lang.Number parseInt(java.lang.Object value, java.lang.Object radix) {
01150         return call(parseInt, new Vars<java.lang.Object>().add(value).add(radix));
01151     }
01152 
01153     /**
01154      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01155      * without a qualifying member and to access the property of the name on an object.</p>
01156      * @since 1.0
01157      * @see JsGlobal.Array
01158      * @javascript Re-compilers must resolve the member of this static field to the 
01159      * identifier of the field name.
01160      */
01161     public static final JsGlobal.Array.Member Array = new JsGlobal.Array.Member(Members.Array);
01162     /**
01163      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01164      * without a qualifying member and to access the property of the name on an object.</p>
01165      * @since 1.0
01166      * @see JsGlobal.Function
01167      * @javascript Re-compilers must resolve the member of this static field to the 
01168      * identifier of the field name.
01169      */
01170     public static final JsGlobal.Function.Member<JsObject> Function = new JsGlobal.Function.Member<JsObject>(Members.Function      );
01171     /**
01172      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01173      * without a qualifying member and to access the property of the name on an object.</p>
01174      * @since 1.0
01175      * @see JsGlobal.Boolean
01176      * @javascript Re-compilers must resolve the member of this static field to the 
01177      * identifier of the field name.
01178      */
01179     public static final JsGlobal.Boolean       .Member Boolean        = new JsGlobal.Boolean       .Member(Members.Boolean       );
01180     /**
01181      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01182      * without a qualifying member and to access the property of the name on an object.</p>
01183      * @since 1.0
01184      * @see JsGlobal.Date
01185      * @javascript Re-compilers must resolve the member of this static field to the 
01186      * identifier of the field name.
01187      */
01188     public static final JsGlobal.Date          .Member Date           = new JsGlobal.Date          .Member(Members.Date          );
01189     /**
01190      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01191      * without a qualifying member and to access the property of the name on an object.</p>
01192      * @since 1.0
01193      * @see JsGlobal.Error
01194      * @javascript Re-compilers must resolve the member of this static field to the 
01195      * identifier of the field name.
01196      */
01197     public static final JsGlobal.Error         .Member Error          = new JsGlobal.Error         .Member(Members.Error         );
01198     /**
01199      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01200      * without a qualifying member and to access the property of the name on an object.</p>
01201      * @since 1.0
01202      * @see JsGlobal.EvalError
01203      * @javascript Re-compilers must resolve the member of this static field to the 
01204      * identifier of the field name.
01205      */
01206     public static final JsGlobal.EvalError     .Member EvalError      = new JsGlobal.EvalError     .Member(Members.EvalError     );
01207     /**
01208      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01209      * without a qualifying member and to access the property of the name on an object.</p>
01210      * @since 1.0
01211      * @see JsGlobal.Math
01212      * @javascript Re-compilers must resolve the member of this static field to the 
01213      * identifier of the field name.
01214      */
01215     public static final JsGlobal.Math          .Member Math           = new JsGlobal.Math          .Member(Members.Math          );
01216     /**
01217      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01218      * without a qualifying member and to access the property of the name on an object.</p>
01219      * @since 1.0
01220      * @see JsGlobal.Number
01221      * @javascript Re-compilers must resolve the member of this static field to the 
01222      * identifier of the field name.
01223      */
01224     public static final JsGlobal.Number        .Member Number         = new JsGlobal.Number        .Member(Members.Number        );
01225     /**
01226      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01227      * without a qualifying member and to access the property of the name on an object.</p>
01228      * @since 1.0
01229      * @see JsGlobal.Object
01230      * @javascript Re-compilers must resolve the member of this static field to the 
01231      * identifier of the field name.
01232      */
01233     public static final JsGlobal.Object        .Member Object         = new JsGlobal.Object        .Member(Members.Object        );
01234     /**
01235      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01236      * without a qualifying member and to access the property of the name on an object.</p>
01237      * @since 1.0
01238      * @see JsGlobal.RangeError
01239      * @javascript Re-compilers must resolve the member of this static field to the 
01240      * identifier of the field name.
01241      */
01242     public static final JsGlobal.RangeError    .Member RangeError     = new JsGlobal.RangeError    .Member(Members.RangeError    );;
01243     /**
01244      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01245      * without a qualifying member and to access the property of the name on an object.</p>
01246      * @since 1.0
01247      * @see JsGlobal.ReferenceError
01248      * @javascript Re-compilers must resolve the member of this static field to the 
01249      * identifier of the field name.
01250      */
01251     public static final JsGlobal.ReferenceError.Member ReferenceError = new JsGlobal.ReferenceError.Member(Members.ReferenceError);
01252     /**
01253      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01254      * without a qualifying member and to access the property of the name on an object.</p>
01255      * @since 1.0
01256      * @see JsGlobal.RegExp
01257      * @javascript Re-compilers must resolve the member of this static field to the 
01258      * identifier of the field name.
01259      */
01260     public static final JsGlobal.RegExp        .Member RegExp         = new JsGlobal.RegExp        .Member(Members.RegExp        );
01261     /**
01262      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01263      * without a qualifying member and to access the property of the name on an object.</p>
01264      * @since 1.0
01265      * @see JsGlobal.String
01266      * @javascript Re-compilers must resolve the member of this static field to the 
01267      * identifier of the field name.
01268      */
01269     public static final JsGlobal.String        .Member String         = new JsGlobal.String        .Member(Members.String        );
01270     /**
01271      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01272      * without a qualifying member and to access the property of the name on an object.</p>
01273      * @since 1.0
01274      * @see JsGlobal.SyntaxError
01275      * @javascript Re-compilers must resolve the member of this static field to the 
01276      * identifier of the field name.
01277      */
01278     public static final JsGlobal.SyntaxError   .Member SyntaxError    = new JsGlobal.SyntaxError   .Member(Members.SyntaxError   );
01279     /**
01280      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01281      * without a qualifying member and to access the property of the name on an object.</p>
01282      * @since 1.0
01283      * @see JsGlobal.TypeError
01284      * @javascript Re-compilers must resolve the member of this static field to the 
01285      * identifier of the field name.
01286      */
01287     public static final JsGlobal.TypeError     .Member TypeError      = new JsGlobal.TypeError     .Member(Members.TypeError     );
01288     /**
01289      * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01290      * without a qualifying member and to access the property of the name on an object.</p>
01291      * @since 1.0
01292      * @see JsGlobal.URIError
01293      * @javascript Re-compilers must resolve the member of this static field to the 
01294      * identifier of the field name.
01295      */
01296     public static final JsGlobal.URIError      .Member URIError       = new JsGlobal.URIError      .Member(Members.URIError      );
01297 
01298     /**
01299      * <p>An <b>opaque</b> class representing the global Array class of JavaScript.</p>
01300      *
01301      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
01302      * 
01303      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
01304      * generated into the target codes. Re-compilers must exit with error on the operations of 
01305      * accessing that kind of class objects.
01306      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
01307      * and <tt>instanceof</tt> to it always <tt>true</tt>.
01308      */
01309     public static class Array extends JsFunction<JsArray>
01310     {
01311         /**
01312          * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
01313          * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
01314          * This class and the subclasses of this class are used to declare either <b>opaque</b> 
01315          * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
01316          * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
01317          * constructors are used to define the fields inside <b>opaque</b> classes. Under 
01318          * either circumstance, the field names must be exactly same as the member names, as 
01319          * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
01320          * based on the field names.</p>
01321          *
01322          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
01323          * 
01324          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
01325          * in the target codes. Re-compilers must exit with error on operations accessing that kind 
01326          * of class objects.
01327          * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
01328          * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
01329          * <pre>q.m</pre>
01330          * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
01331          * resolved from the instance of the enclosing member. Re-compilers must resolve an 
01332          * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
01333          * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
01334          * <pre>m</pre>
01335          * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
01336          * error on the access to <b>opaque</b> fields declared by this class under any other 
01337          * circumstances.
01338          */
01339         public static class Member extends JsFunction.Member<JsArray>
01340         {
01341             private Member(JsObject.Member q, Mid mid) {
01342                 super(q, mid);
01343             }
01344             private Member(Mid mid) {
01345                 super(mid);
01346             }
01347             /**
01348              * <p>Evaluates the property, represented by the current member instance, of the 
01349              * argument object.</p>
01350              * @param o The argument object
01351              * @return The value of the current member based on the object argument.
01352              * @since 1.0
01353              * @javascript Re-compilers must convert the instance invocation of this method into 
01354              * the JavaScript expression: 
01355              * <pre>o.m</pre>
01356              * where <tt>m</tt> is the identifier name resolved from the current member 
01357              * instance of the invocation.
01358              */
01359             @Override
01360             public Array with(ObjectLike o) {
01361                 return new Array(super.with(o));
01362             }
01363             /**
01364              * <p>Evaluates a property, represented by the current member instance, of the 
01365              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
01366              * @return The value of the current member based on the JavaScript global object.
01367              * @since 1.0
01368              * @javascript Re-compilers must convert the instance invocation of this method into 
01369              * the JavaScript expression: 
01370              * <pre>m</pre>
01371              * where <tt>m</tt> is the identifier name resolved from the current member 
01372              * instance of the invocation.
01373              */
01374             @Override
01375             public Array with() {
01376                 return with(Js.core());
01377             }
01378 
01379             /**
01380              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01381              * name of this field, qualified by the current member instance of the field, and 
01382              * to access the property of the name on an object.</p>
01383              * <p>The <tt>prototype</tt> property is used when a function is used as a 
01384              * constructor. It refers to an object that serves as the prototype for an entire 
01385              * class of objects. Any object created by the constructor inherits all properties 
01386              * of the object referred to by the <tt>prototype</tt> property.</p>
01387              * @since 1.0
01388              * @javascript Re-compilers must resolve the member of this instance field to the 
01389              * identifier of the field name appending to the identifier resolved from its 
01390              * qualifying member with a dot in between.
01391              */
01392             public final Prototype.Member prototype = new Prototype.Member(this, Members.prototype);
01393         }
01394 
01395         /**
01396          * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
01397          * with the wrapping constructor.</p>
01398          * @param var The argument of an <b>opaque</b> object.
01399          * @since 1.0
01400          * @javascript Re-compilers must ignore the construction operation of this constructor, 
01401          * that is, replacing it with its only argument.
01402          */
01403         public Array(JsObject var) {
01404             super(var);
01405         }
01406 
01407         /**
01408          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01409          * without a qualifying member and to access the property of the name on an object.</p>
01410          * <p>The <tt>prototype</tt> property is used when a function is used as a 
01411          * constructor. It refers to an object that serves as the prototype for an entire 
01412          * class of objects. Any object created by the constructor inherits all properties 
01413          * of the object referred to by the <tt>prototype</tt> property.</p>
01414          * @since 1.0
01415          * @javascript Re-compilers must resolve the member of this static field to the 
01416          * identifier of the field name.
01417          */
01418         public static final Prototype.Member prototype = new Prototype.Member(Members.prototype);
01419 
01420         /**
01421          * <p>Creates an empty array.</p>
01422          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01423          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01424          * the <tt>new</tt> operator.</p>
01425          * @return The empty array.
01426          * @see #invoke()
01427          * @see JsArray#JsArray()
01428          * @see Vars#var()
01429          * @see js.Js#array()
01430          * @since 1.0
01431          * @javascript Re-compilers must replace the instance invocation of this method with the 
01432          * JavaScript invocation:
01433          * <pre>new Array()</pre>
01434          */
01435         @Override
01436         public final JsArray create() {
01437             return new JsArray(super.create());
01438         }
01439         /**
01440          * <p>Creates an empty array.</p>
01441          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01442          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01443          * the <tt>new</tt> operator.</p>
01444          * @return The empty array.
01445          * @see #create()
01446          * @see JsArray#JsArray()
01447          * @see Vars#var()
01448          * @see js.Js#array()
01449          * @since 1.0
01450          * @javascript Re-compilers must replace the instance invocation of this method with the 
01451          * JavaScript invocation:
01452          * <pre>Array()</pre>
01453          */
01454         @Override
01455         public final JsArray invoke() {
01456             return new JsArray(super.create());
01457         }
01458         /**
01459          * <p>Constructs a JavaScript array object with its <tt>length</tt> field set to the 
01460          * number value of the argument.</p>
01461          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01462          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01463          * the <tt>new</tt> operator.</p>
01464          * @param size The desired number of elements in the array. The constructed array has its 
01465          * <tt>length</tt> field set to number value of this argument.
01466          * @since 1.0
01467          * @javascript Re-compilers must convert the instance invocation of this method into 
01468          * the JavaScript expression: 
01469          * <pre>new Array(size)</pre>
01470          */
01471         @Override
01472         public final JsArray create(java.lang.Object size) {
01473             return new JsArray(super.create(size));
01474         }
01475         /**
01476          * <p>Constructs a JavaScript array object with its <tt>length</tt> field set to the 
01477          * number value of the argument.</p>
01478          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01479          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01480          * the <tt>new</tt> operator.</p>
01481          * @param size The desired number of elements in the array. The constructed array has its 
01482          * <tt>length</tt> field set to number value of this argument.
01483          * @since 1.0
01484          * @javascript Re-compilers must convert the instance invocation of this method into 
01485          * the JavaScript expression: 
01486          * <pre>Array(size)</pre>
01487          */
01488         @Override
01489         public final JsArray invoke(java.lang.Object size) {
01490             return new JsArray(super.create(size));
01491         }
01492         /**
01493          * <p>Constructs a JavaScript array object with its <tt>length</tt> field set to the 
01494          * number value of the argument, with the specified argument values as its elements and 
01495          * its <tt>length</tt> field set to the number of arguments.</p>
01496          * <p>When this constructor is invoked with a single argument value, the newly created 
01497          * array is initialized with its <tt>length</tt> field set to the number value of the 
01498          * argument.</p>
01499          * <p>When this constructor is invoked with an argument list of two or more arbitrary 
01500          * values, the newly created array is initialized with the specified argument values as 
01501          * its elements and its <tt>length</tt> field set to the number of arguments.</p>
01502          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01503          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01504          * the <tt>new</tt> operator.</p>
01505          * @param args The variable argument.
01506          * @since 1.0
01507          * @javascript Re-compilers must convert the instance invocation of this method into 
01508          * the JavaScript expression: 
01509          * <pre>new Array(args)</pre>
01510          * where <tt>args</tt> must be expanded to comma-separated argument values at 
01511          * re-compile time.
01512          */
01513         @Override
01514         public final JsArray create(Vars<?> args) {
01515             return new JsArray(super.create(args));
01516         }
01517         /**
01518          * <p>Constructs a JavaScript array object with its <tt>length</tt> field set to the 
01519          * number value of the argument, with the specified argument values as its elements and 
01520          * its <tt>length</tt> field set to the number of arguments.</p>
01521          * <p>When this constructor is invoked with a single argument value, the newly created 
01522          * array is initialized with its <tt>length</tt> field set to the number value of the 
01523          * argument.</p>
01524          * <p>When this constructor is invoked with an argument list of two or more arbitrary 
01525          * values, the newly created array is initialized with the specified argument values as 
01526          * its elements and its <tt>length</tt> field set to the number of arguments.</p>
01527          * <p>In JavaScript, When the <tt>Array()</tt> constructor is called as a function, 
01528          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
01529          * the <tt>new</tt> operator.</p>
01530          * @param args The variable argument.
01531          * @since 1.0
01532          * @javascript Re-compilers must convert the instance invocation of this method into 
01533          * the JavaScript expression: 
01534          * <pre>Array(args)</pre>
01535          * where <tt>args</tt> must be expanded to comma-separated argument values at 
01536          * re-compile time.
01537          */
01538         @Override
01539         public final JsArray invoke(Vars<?> args) {
01540             return new JsArray(super.create(args));
01541         }
01542 
01543         /**
01544          * <p>An <b>opaque</b> class representing the prototype of the enclosing global 
01545          * class of JavaScript.</p>
01546          *
01547          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
01548          * 
01549          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
01550          * generated into the target codes. Re-compilers must exit with error on the operations of 
01551          * accessing that kind of class objects.
01552          * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
01553          * and <tt>instanceof</tt> to it always <tt>true</tt>.
01554          */
01555         public static class Prototype extends JsObject
01556         {
01557             /**
01558              * <p>An <b>internal</b> class containing membership data for its enclosing 
01559              * opaque class.</p>
01560              * <p>This class is only used inside of <b>opaque</b> or <b>internal</b> classes or 
01561              * class members.</p>
01562              *
01563              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
01564              * 
01565              * @javascript Re-compilers must report error on resolving an <b>internal</b> class. 
01566              */
01567             protected static abstract class Members extends JsObject.Members
01568             {
01569                 /**
01570                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01571                  * used internally to define a member of the same name.</p>
01572                  * @since 1.0
01573                  * @see JsGlobal.Array.Prototype#concat
01574                  * @see JsGlobal.Array.Prototype.Member#concat
01575                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01576                  */
01577                 public final static Mid concat  = id("concat" );
01578                 /**
01579                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01580                  * used internally to define a member of the same name.</p>
01581                  * @since 1.0
01582                  * @see JsGlobal.Array.Prototype#join
01583                  * @see JsGlobal.Array.Prototype.Member#join
01584                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01585                  */
01586                 public final static Mid join    = id("join"   );
01587                 /**
01588                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01589                  * used internally to define a member of the same name.</p>
01590                  * @since 1.0
01591                  * @see JsGlobal.Array.Prototype#pop
01592                  * @see JsGlobal.Array.Prototype.Member#pop
01593                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01594                  */
01595                 public final static Mid pop     = id("pop"    );
01596                 /**
01597                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01598                  * used internally to define a member of the same name.</p>
01599                  * @since 1.0
01600                  * @see JsGlobal.Array.Prototype#push
01601                  * @see JsGlobal.Array.Prototype.Member#push
01602                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01603                  */
01604                 public final static Mid push    = id("push"   );
01605                 /**
01606                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01607                  * used internally to define a member of the same name.</p>
01608                  * @since 1.0
01609                  * @see JsGlobal.Array.Prototype#reverse
01610                  * @see JsGlobal.Array.Prototype.Member#reverse
01611                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01612                  */
01613                 public final static Mid reverse = id("reverse");
01614                 /**
01615                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01616                  * used internally to define a member of the same name.</p>
01617                  * @since 1.0
01618                  * @see JsGlobal.Array.Prototype#shift
01619                  * @see JsGlobal.Array.Prototype.Member#shift
01620                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01621                  */
01622                 public final static Mid shift   = id("shift"  );
01623                 /**
01624                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01625                  * used internally to define a member of the same name.</p>
01626                  * @since 1.0
01627                  * @see JsGlobal.Array.Prototype#slice
01628                  * @see JsGlobal.Array.Prototype.Member#slice
01629                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01630                  */
01631                 public final static Mid slice   = id("slice"  );
01632                 /**
01633                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01634                  * used internally to define a member of the same name.</p>
01635                  * @since 1.0
01636                  * @see JsGlobal.Array.Prototype#sort
01637                  * @see JsGlobal.Array.Prototype.Member#sort
01638                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01639                  */
01640                 public final static Mid sort    = id("sort"   );
01641                 /**
01642                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01643                  * used internally to define a member of the same name.</p>
01644                  * @since 1.0
01645                  * @see JsGlobal.Array.Prototype#splice
01646                  * @see JsGlobal.Array.Prototype.Member#splice
01647                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01648                  */
01649                 public final static Mid splice  = id("splice" );
01650                 /**
01651                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
01652                  * used internally to define a member of the same name.</p>
01653                  * @since 1.0
01654                  * @see JsGlobal.Array.Prototype#unshift
01655                  * @see JsGlobal.Array.Prototype.Member#unshift
01656                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
01657                  */
01658                 public final static Mid unshift = id("unshift");
01659             }
01660             /**
01661              * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
01662              * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
01663              * This class and the subclasses of this class are used to declare either <b>opaque</b> 
01664              * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
01665              * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
01666              * constructors are used to define the fields inside <b>opaque</b> classes. Under 
01667              * either circumstance, the field names must be exactly same as the member names, as 
01668              * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
01669              * based on the field names.</p>
01670              *
01671              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
01672              * 
01673              * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
01674              * in the target codes. Re-compilers must exit with error on operations accessing that kind 
01675              * of class objects.
01676              * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
01677              * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
01678              * <pre>q.m</pre>
01679              * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
01680              * resolved from the instance of the enclosing member. Re-compilers must resolve an 
01681              * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
01682              * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
01683              * <pre>m</pre>
01684              * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
01685              * error on the access to <b>opaque</b> fields declared by this class under any other 
01686              * circumstances.
01687              */
01688             public static class Member extends JsObject.Member
01689             {
01690                 /**
01691                  * <p>Internally constructs a member based on a qualifying member.</p>
01692                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
01693                  * or <b>internal</b> classes or class members.</p>
01694                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
01695                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
01696                  * declared in the declaring class of this constructor itself or its subclasses. 
01697                  * Under this circumstance, the field names must be exactly same as the member 
01698                  * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
01699                  * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
01700                  * to their names appending to the name resolved from the specified qualifying 
01701                  * member with a dot in between.</p>
01702                  * @param q A qualifying member
01703                  * @param mid The ID of the member to construct
01704                  * @since 1.0
01705                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
01706                  */
01707                 protected Member(JsObject.Member q, Mid mid) {
01708                     super(q, mid);
01709                 }
01710                 /**
01711                  * <p>Internally constructs a member without a qualifying member.</p>
01712                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
01713                  * or <b>internal</b> classes or class members.</p>
01714                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
01715                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
01716                  * declared in <b>opaque</b> types other than the declaring class of this constructor 
01717                  * itself and its subclasses. Under this circumstance, the field names must be 
01718                  * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
01719                  * types are generally resolved by re-compilers directly to identifiers of their names.</p>
01720                  * @param mid The ID of the member to construct
01721                  * @since 1.0
01722                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
01723                  */
01724                 protected Member(Mid mid) {
01725                     super(mid);
01726                 }
01727                 /**
01728                  * <p>Evaluates the property, represented by the current member instance, of the 
01729                  * argument object.</p>
01730                  * @param o The argument object
01731                  * @return The value of the current member based on the object argument.
01732                  * @since 1.0
01733                  * @javascript Re-compilers must convert the instance invocation of this method into 
01734                  * the JavaScript expression: 
01735                  * <pre>o.m</pre>
01736                  * where <tt>m</tt> is the identifier name resolved from the current member 
01737                  * instance of the invocation.
01738                  */
01739                 @Override
01740                 public Prototype with(ObjectLike o) {
01741                     return new Prototype(super.with(o));
01742                 }
01743 
01744                 /**
01745                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01746                  * name of this field, qualified by the current member instance of the field, and 
01747                  * to access the property of the name on an object.</p>
01748                  * @since 1.0
01749                  * @see JsArray#valueOf()
01750                  * @javascript Re-compilers must resolve the member of this instance field to the 
01751                  * identifier of the field name appending to the identifier resolved from its 
01752                  * qualifying member with a dot in between.
01753                  */
01754                 public final JsFunction.Member<JsArray>          valueOf = new JsFunction.Member<JsArray>         (this, Members.valueOf, Generic.get(JsArray.class));
01755                 /**
01756                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01757                  * name of this field, qualified by the current member instance of the field, and 
01758                  * to access the property of the name on an object.</p>
01759                  * @since 1.0
01760                  * @see JsArray#concat(Object)
01761                  * @see JsArray#concat(Vars)
01762                  * @javascript Re-compilers must resolve the member of this instance field to the 
01763                  * identifier of the field name appending to the identifier resolved from its 
01764                  * qualifying member with a dot in between.
01765                  */
01766                 public final JsFunction.Member<JsArray>          concat  = new JsFunction.Member<JsArray>         (this, Members.concat , Generic.get(JsArray.class));
01767                 /**
01768                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01769                  * name of this field, qualified by the current member instance of the field, and 
01770                  * to access the property of the name on an object.</p>
01771                  * @since 1.0
01772                  * @see JsArray#join()
01773                  * @see JsArray#join(Object)
01774                  * @javascript Re-compilers must resolve the member of this instance field to the 
01775                  * identifier of the field name appending to the identifier resolved from its 
01776                  * qualifying member with a dot in between.
01777                  */
01778                 public final JsFunction.Member<java.lang.String> join    = new JsFunction.Member<java.lang.String>(this, Members.join   );
01779                 /**
01780                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01781                  * name of this field, qualified by the current member instance of the field, and 
01782                  * to access the property of the name on an object.</p>
01783                  * @since 1.0
01784                  * @see JsArray#pop()
01785                  * @javascript Re-compilers must resolve the member of this instance field to the 
01786                  * identifier of the field name appending to the identifier resolved from its 
01787                  * qualifying member with a dot in between.
01788                  */
01789                 public final JsFunction.Member<?>                pop     = new JsFunction.Member<java.lang.Object>(this, Members.pop    );
01790                 /**
01791                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01792                  * name of this field, qualified by the current member instance of the field, and 
01793                  * to access the property of the name on an object.</p>
01794                  * @since 1.0
01795                  * @see JsArray#push(Object)
01796                  * @see JsArray#push(Vars)
01797                  * @javascript Re-compilers must resolve the member of this instance field to the 
01798                  * identifier of the field name appending to the identifier resolved from its 
01799                  * qualifying member with a dot in between.
01800                  */
01801                 public final JsFunction.Member<java.lang.Number> push    = new JsFunction.Member<java.lang.Number>(this, Members.push   );
01802                 /**
01803                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01804                  * name of this field, qualified by the current member instance of the field, and 
01805                  * to access the property of the name on an object.</p>
01806                  * @since 1.0
01807                  * @see JsArray#reverse()
01808                  * @javascript Re-compilers must resolve the member of this instance field to the 
01809                  * identifier of the field name appending to the identifier resolved from its 
01810                  * qualifying member with a dot in between.
01811                  */
01812                 public final JsFunction.Member<Void>             reverse = new JsFunction.Member<Void>            (this, Members.reverse);
01813                 /**
01814                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01815                  * name of this field, qualified by the current member instance of the field, and 
01816                  * to access the property of the name on an object.</p>
01817                  * @since 1.0
01818                  * @see JsArray#shift()
01819                  * @javascript Re-compilers must resolve the member of this instance field to the 
01820                  * identifier of the field name appending to the identifier resolved from its 
01821                  * qualifying member with a dot in between.
01822                  */
01823                 public final JsFunction.Member<?>                shift   = new JsFunction.Member<java.lang.Object>(this, Members.shift  );
01824                 /**
01825                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01826                  * name of this field, qualified by the current member instance of the field, and 
01827                  * to access the property of the name on an object.</p>
01828                  * @since 1.0
01829                  * @see JsArray#slice(Object)
01830                  * @see JsArray#slice(Object, Object)
01831                  * @see JsArray#slice(Vars)
01832                  * @javascript Re-compilers must resolve the member of this instance field to the 
01833                  * identifier of the field name appending to the identifier resolved from its 
01834                  * qualifying member with a dot in between.
01835                  */
01836                 public final JsFunction.Member<JsArray>          slice   = new JsFunction.Member<JsArray>         (this, Members.slice  , Generic.get(JsArray.class));
01837                 /**
01838                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01839                  * name of this field, qualified by the current member instance of the field, and 
01840                  * to access the property of the name on an object.</p>
01841                  * @since 1.0
01842                  * @see JsArray#sort()
01843                  * @see JsArray#sort(JsFunction)
01844                  * @javascript Re-compilers must resolve the member of this instance field to the 
01845                  * identifier of the field name appending to the identifier resolved from its 
01846                  * qualifying member with a dot in between.
01847                  */
01848                 public final JsFunction.Member<JsArray>          sort    = new JsFunction.Member<JsArray>         (this, Members.sort   , Generic.get(JsArray.class));
01849                 /**
01850                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01851                  * name of this field, qualified by the current member instance of the field, and 
01852                  * to access the property of the name on an object.</p>
01853                  * @since 1.0
01854                  * @see JsArray#splice(Object)
01855                  * @see JsArray#splice(Object, Object)
01856                  * @see JsArray#splice(Object, Object, Object)
01857                  * @see JsArray#splice(Object, Object, Vars)
01858                  * @see JsArray#splice(Vars)
01859                  * @javascript Re-compilers must resolve the member of this instance field to the 
01860                  * identifier of the field name appending to the identifier resolved from its 
01861                  * qualifying member with a dot in between.
01862                  */
01863                 public final JsFunction.Member<JsArray>          splice  = new JsFunction.Member<JsArray>         (this, Members.splice , Generic.get(JsArray.class));
01864                 /**
01865                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
01866                  * name of this field, qualified by the current member instance of the field, and 
01867                  * to access the property of the name on an object.</p>
01868                  * @since 1.0
01869                  * @see JsArray#unshift(Object)
01870                  * @see JsArray#unshift(Vars)
01871                  * @javascript Re-compilers must resolve the member of this instance field to the 
01872                  * identifier of the field name appending to the identifier resolved from its 
01873                  * qualifying member with a dot in between.
01874                  */
01875                 public final JsFunction.Member<java.lang.Number> unshift = new JsFunction.Member<java.lang.Number>(this, Members.unshift);
01876             }
01877 
01878             /**
01879              * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
01880              * with the wrapping constructor.</p>
01881              * @param var The argument of an <b>opaque</b> object.
01882              * @since 1.0
01883              * @javascript Re-compilers must ignore the construction operation of this constructor, 
01884              * that is, replacing it with its only argument.
01885              */
01886             public Prototype(JsObject var) {
01887                 super(var);
01888             }
01889 
01890             /**
01891              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01892              * without a qualifying member and to access the property of the name on an object.</p>
01893              * @since 1.0
01894              * @see JsArray#valueOf()
01895              * @javascript Re-compilers must resolve the member of this static field to the 
01896              * identifier of the field name.
01897              */
01898             public static final JsFunction.Member<JsArray>          valueOf = new JsFunction.Member<JsArray>         (Members.valueOf, Generic.get(JsArray.class));
01899             /**
01900              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01901              * without a qualifying member and to access the property of the name on an object.</p>
01902              * @since 1.0
01903              * @see JsArray#concat(Object)
01904              * @see JsArray#concat(Vars)
01905              * @javascript Re-compilers must resolve the member of this static field to the 
01906              * identifier of the field name.
01907              */
01908             public static final JsFunction.Member<JsArray>          concat  = new JsFunction.Member<JsArray>         (Members.concat , Generic.get(JsArray.class));
01909             /**
01910              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01911              * without a qualifying member and to access the property of the name on an object.</p>
01912              * @since 1.0
01913              * @see JsArray#join()
01914              * @see JsArray#join(Object)
01915              * @javascript Re-compilers must resolve the member of this static field to the 
01916              * identifier of the field name.
01917              */
01918             public static final JsFunction.Member<java.lang.String> join    = new JsFunction.Member<java.lang.String>(Members.join   );
01919             /**
01920              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01921              * without a qualifying member and to access the property of the name on an object.</p>
01922              * @since 1.0
01923              * @see JsArray#pop()
01924              * @javascript Re-compilers must resolve the member of this static field to the 
01925              * identifier of the field name.
01926              */
01927             public static final JsFunction.Member<?>                pop     = new JsFunction.Member<java.lang.Object>(Members.pop    );;
01928             /**
01929              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01930              * without a qualifying member and to access the property of the name on an object.</p>
01931              * @since 1.0
01932              * @see JsArray#push(Object)
01933              * @see JsArray#push(Vars)
01934              * @javascript Re-compilers must resolve the member of this static field to the 
01935              * identifier of the field name.
01936              */
01937             public static final JsFunction.Member<java.lang.Number> push    = new JsFunction.Member<java.lang.Number>(Members.push   );
01938             /**
01939              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01940              * without a qualifying member and to access the property of the name on an object.</p>
01941              * @since 1.0
01942              * @see JsArray#reverse()
01943              * @javascript Re-compilers must resolve the member of this static field to the 
01944              * identifier of the field name.
01945              */
01946             public static final JsFunction.Member<Void>             reverse = new JsFunction.Member<Void>            (Members.reverse);
01947             /**
01948              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01949              * without a qualifying member and to access the property of the name on an object.</p>
01950              * @since 1.0
01951              * @see JsArray#shift()
01952              * @javascript Re-compilers must resolve the member of this static field to the 
01953              * identifier of the field name.
01954              */
01955             public static final JsFunction.Member<?>                shift   = new JsFunction.Member<java.lang.Object>(Members.shift  );
01956             /**
01957              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01958              * without a qualifying member and to access the property of the name on an object.</p>
01959              * @since 1.0
01960              * @see JsArray#slice(Object)
01961              * @see JsArray#slice(Object, Object)
01962              * @see JsArray#slice(Vars)
01963              * @javascript Re-compilers must resolve the member of this static field to the 
01964              * identifier of the field name.
01965              */
01966             public static final JsFunction.Member<JsArray>          slice   = new JsFunction.Member<JsArray>         (Members.slice  , Generic.get(JsArray.class));
01967             /**
01968              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01969              * without a qualifying member and to access the property of the name on an object.</p>
01970              * @since 1.0
01971              * @see JsArray#sort()
01972              * @see JsArray#sort(JsFunction)
01973              * @javascript Re-compilers must resolve the member of this static field to the 
01974              * identifier of the field name.
01975              */
01976             public static final JsFunction.Member<JsArray>          sort    = new JsFunction.Member<JsArray>         (Members.sort   , Generic.get(JsArray.class));
01977             /**
01978              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01979              * without a qualifying member and to access the property of the name on an object.</p>
01980              * @since 1.0
01981              * @see JsArray#splice(Object)
01982              * @see JsArray#splice(Object, Object)
01983              * @see JsArray#splice(Object, Object, Object)
01984              * @see JsArray#splice(Object, Object, Vars)
01985              * @see JsArray#splice(Vars)
01986              * @javascript Re-compilers must resolve the member of this static field to the 
01987              * identifier of the field name.
01988              */
01989             public static final JsFunction.Member<JsArray>          splice  = new JsFunction.Member<JsArray>         (Members.splice , Generic.get(JsArray.class));
01990             /**
01991              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
01992              * without a qualifying member and to access the property of the name on an object.</p>
01993              * @since 1.0
01994              * @see JsArray#unshift(Object)
01995              * @see JsArray#unshift(Vars)
01996              * @javascript Re-compilers must resolve the member of this static field to the 
01997              * identifier of the field name.
01998              */
01999             public static final JsFunction.Member<java.lang.Number> unshift = new JsFunction.Member<java.lang.Number>(Members.unshift);
02000         }
02001     }
02002 
02003     /**
02004      * <p>An <b>opaque</b> class representing the global Boolean class of JavaScript.</p>
02005      *
02006      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02007      * 
02008      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
02009      * generated into the target codes. Re-compilers must exit with error on the operations of 
02010      * accessing that kind of class objects.
02011      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
02012      * and <tt>instanceof</tt> to it always <tt>true</tt>.
02013      */
02014     public static class Boolean extends JsFunction<java.lang.Boolean>
02015     {
02016         /**
02017          * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
02018          * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
02019          * This class and the subclasses of this class are used to declare either <b>opaque</b> 
02020          * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
02021          * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
02022          * constructors are used to define the fields inside <b>opaque</b> classes. Under 
02023          * either circumstance, the field names must be exactly same as the member names, as 
02024          * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
02025          * based on the field names.</p>
02026          *
02027          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02028          * 
02029          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
02030          * in the target codes. Re-compilers must exit with error on operations accessing that kind 
02031          * of class objects.
02032          * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
02033          * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
02034          * <pre>q.m</pre>
02035          * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
02036          * resolved from the instance of the enclosing member. Re-compilers must resolve an 
02037          * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
02038          * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
02039          * <pre>m</pre>
02040          * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
02041          * error on the access to <b>opaque</b> fields declared by this class under any other 
02042          * circumstances.
02043          */
02044         public static class Member extends JsFunction.Member<java.lang.Boolean>
02045         {
02046             private Member(JsObject.Member q, Mid mid) {
02047                 super(q, mid);
02048             }
02049             private Member(Mid mid) {
02050                 super(mid);
02051             }
02052             /**
02053              * <p>Evaluates the property, represented by the current member instance, of the 
02054              * argument object.</p>
02055              * @param o The argument object
02056              * @return The value of the current member based on the object argument.
02057              * @since 1.0
02058              * @javascript Re-compilers must convert the instance invocation of this method into 
02059              * the JavaScript expression: 
02060              * <pre>o.m</pre>
02061              * where <tt>m</tt> is the identifier name resolved from the current member 
02062              * instance of the invocation.
02063              */
02064             @Override
02065             public Boolean with(ObjectLike o) {
02066                 return new Boolean(super.with(o));
02067             }
02068             /**
02069              * <p>Evaluates a property, represented by the current member instance, of the 
02070              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
02071              * @return The value of the current member based on the JavaScript global object.
02072              * @since 1.0
02073              * @javascript Re-compilers must convert the instance invocation of this method into 
02074              * the JavaScript expression: 
02075              * <pre>m</pre>
02076              * where <tt>m</tt> is the identifier name resolved from the current member 
02077              * instance of the invocation.
02078              */
02079             @Override
02080             public Boolean with() {
02081                 return with(Js.core());
02082             }
02083 
02084             /**
02085              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
02086              * name of this field, qualified by the current member instance of the field, and 
02087              * to access the property of the name on an object.</p>
02088              * <p>The <tt>prototype</tt> property is used when a function is used as a 
02089              * constructor. It refers to an object that serves as the prototype for an entire 
02090              * class of objects. Any object created by the constructor inherits all properties 
02091              * of the object referred to by the <tt>prototype</tt> property.</p>
02092              * @since 1.0
02093              * @javascript Re-compilers must resolve the member of this instance field to the 
02094              * identifier of the field name appending to the identifier resolved from its 
02095              * qualifying member with a dot in between.
02096              */
02097             public final Prototype.Member prototype = new Prototype.Member(this, Members.prototype);
02098         }
02099 
02100         /**
02101          * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
02102          * with the wrapping constructor.</p>
02103          * @param var The argument of an <b>opaque</b> object.
02104          * @since 1.0
02105          * @javascript Re-compilers must ignore the construction operation of this constructor, 
02106          * that is, replacing it with its only argument.
02107          */
02108         public Boolean(JsObject var) {
02109             super(var);
02110         }
02111 
02112         /**
02113          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
02114          * without a qualifying member and to access the property of the name on an object.</p>
02115          * <p>The <tt>prototype</tt> property is used when a function is used as a 
02116          * constructor. It refers to an object that serves as the prototype for an entire 
02117          * class of objects. Any object created by the constructor inherits all properties 
02118          * of the object referred to by the <tt>prototype</tt> property.</p>
02119          * @since 1.0
02120          * @javascript Re-compilers must resolve the member of this static field to the 
02121          * identifier of the field name.
02122          */
02123         public static final Prototype.Member prototype = new Prototype.Member(Members.prototype);
02124 
02125         /**
02126          * <p>Constructs a JavaScript boolean object with the boolean value <tt>false</tt>.</p>
02127          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02128          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02129          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02130          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02131          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02132          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02133          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02134          * value are all converted to <tt>false</tt>. All other primitive values, except 
02135          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02136          * converted to <tt>true</tt>.</p>
02137          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02138          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02139          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02140          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02141          * value and returns that value.</p>
02142          * @since 1.0
02143          * @javascript Re-compilers must convert the instance invocation of this method into 
02144          * the JavaScript expression: 
02145          * <pre>new Boolean()</pre>
02146          */
02147         @Override
02148         public final JsBoolean create() {
02149             return new JsBoolean(super.create());
02150         }
02151         /**
02152          * <p>Simply returns the boolean value <tt>false</tt>.</p>
02153          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02154          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02155          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02156          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02157          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02158          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02159          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02160          * value are all converted to <tt>false</tt>. All other primitive values, except 
02161          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02162          * converted to <tt>true</tt>.</p>
02163          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02164          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02165          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02166          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02167          * value and returns that value.</p>
02168          * @since 1.0
02169          * @javascript Re-compilers must convert the instance invocation of this method into 
02170          * the JavaScript expression: 
02171          * <pre>Boolean()</pre>
02172          */
02173         @Override
02174         public final java.lang.Boolean invoke() {
02175             return false;
02176         }
02177         /**
02178          * <p>Constructs a JavaScript boolean object with the specified argument converted to a 
02179          * boolean value.</p>
02180          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02181          * value are all converted to <tt>false</tt>. All other primitive values, except 
02182          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02183          * converted to <tt>true</tt>.</p>
02184          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02185          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02186          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02187          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02188          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02189          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02190          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02191          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02192          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02193          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02194          * value and returns that value.</p>
02195          * @param arg The value argument.
02196          * @since 1.0
02197          * @javascript Re-compilers must convert the instance invocation of this method into 
02198          * the JavaScript expression: 
02199          * <pre>new Boolean(arg)</pre>
02200          */
02201         @Override
02202         public final JsBoolean create(java.lang.Object arg) {
02203             return new JsBoolean(super.create(arg));
02204         }
02205         /**
02206          * <p>Converts the specified argument to a boolean value.</p>
02207          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02208          * value are all converted to <tt>false</tt>. All other primitive values, except 
02209          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02210          * converted to <tt>true</tt>.</p>
02211          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02212          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02213          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02214          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02215          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02216          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02217          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02218          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02219          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02220          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02221          * value and returns that value.</p>
02222          * @param arg The value argument.
02223          * @since 1.0
02224          * @javascript Re-compilers must convert the instance invocation of this method into 
02225          * the JavaScript expression: 
02226          * <pre>Boolean(arg)</pre>
02227          */
02228         @Override
02229         public final java.lang.Boolean invoke(java.lang.Object arg) {
02230             return Js.be(arg);
02231         }
02232         /**
02233          * <p>Constructs a JavaScript boolean object with the specified argument converted to a 
02234          * boolean value.</p>
02235          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02236          * value are all converted to <tt>false</tt>. All other primitive values, except 
02237          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02238          * converted to <tt>true</tt>.</p>
02239          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02240          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02241          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02242          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02243          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02244          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02245          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02246          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02247          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02248          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02249          * value and returns that value.</p>
02250          * @param args The variable argument.
02251          * @since 1.0
02252          * @javascript Re-compilers must convert the instance invocation of this method into 
02253          * the JavaScript expression: 
02254          * <pre>new Boolean(args)</pre>
02255          * where <tt>args</tt> must be expanded to comma-separated argument values at 
02256          * re-compile time.
02257          */
02258         @Override
02259         public final JsBoolean create(Vars<?> args) {
02260             return new JsBoolean(super.create(args));
02261         }
02262         /**
02263          * <p>Constructs a JavaScript boolean object with the specified argument converted to a 
02264          * boolean value.</p>
02265          * <p>The values 0, <tt>NaN</tt>, <tt>null</tt>, the empty string "", and the undefined 
02266          * value are all converted to <tt>false</tt>. All other primitive values, except 
02267          * <tt>false</tt> (but including the string "false"), and all objects and arrays are 
02268          * converted to <tt>true</tt>.</p>
02269          * <p>Boolean values are a fundamental data type in JavaScript. The Boolean object is 
02270          * an object wrapper around the boolean value. This Boolean object type exists primarily 
02271          * to provide a <tt>toString()</tt> method to convert boolean values to strings. When the 
02272          * <tt>toString()</tt> method is invoked to convert a boolean value to a string (and it 
02273          * is often invoked implicitly by JavaScript), JavaScript internally converts the 
02274          * boolean value to a transient Boolean object, on which the method can be invoked.</p>
02275          * <p>In JavaScript, when invoked as a constructor with the <tt>new</tt> operator, 
02276          * <tt>Boolean()</tt> converts its argument to a boolean value and returns a Boolean 
02277          * object that contains that value. When invoked as a function, without the <tt>new</tt> 
02278          * operator, <tt>Boolean()</tt> simply converts its argument to a primitive boolean 
02279          * value and returns that value.</p>
02280          * @param args The variable argument.
02281          * @since 1.0
02282          * @javascript Re-compilers must convert the instance invocation of this method into 
02283          * the JavaScript expression: 
02284          * <pre>Boolean(args)</pre>
02285          * where <tt>args</tt> must be expanded to comma-separated argument values at 
02286          * re-compile time.
02287          */
02288         @Override
02289         public final java.lang.Boolean invoke(Vars<?> args) {
02290             return Js.be(args.var().get(0));
02291         }
02292 
02293         /**
02294          * <p>An <b>opaque</b> class representing the prototype of the enclosing global 
02295          * class of JavaScript.</p>
02296          *
02297          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02298          * 
02299          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
02300          * generated into the target codes. Re-compilers must exit with error on the operations of 
02301          * accessing that kind of class objects.
02302          * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
02303          * and <tt>instanceof</tt> to it always <tt>true</tt>.
02304          */
02305         public static class Prototype extends JsObject
02306         {
02307             /**
02308              * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
02309              * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
02310              * This class and the subclasses of this class are used to declare either <b>opaque</b> 
02311              * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
02312              * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
02313              * constructors are used to define the fields inside <b>opaque</b> classes. Under 
02314              * either circumstance, the field names must be exactly same as the member names, as 
02315              * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
02316              * based on the field names.</p>
02317              *
02318              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02319              * 
02320              * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
02321              * in the target codes. Re-compilers must exit with error on operations accessing that kind 
02322              * of class objects.
02323              * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
02324              * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
02325              * <pre>q.m</pre>
02326              * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
02327              * resolved from the instance of the enclosing member. Re-compilers must resolve an 
02328              * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
02329              * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
02330              * <pre>m</pre>
02331              * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
02332              * error on the access to <b>opaque</b> fields declared by this class under any other 
02333              * circumstances.
02334              */
02335             public static class Member extends JsObject.Member
02336             {
02337                 /**
02338                  * <p>Internally constructs a member based on a qualifying member.</p>
02339                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
02340                  * or <b>internal</b> classes or class members.</p>
02341                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
02342                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
02343                  * declared in the declaring class of this constructor itself or its subclasses. 
02344                  * Under this circumstance, the field names must be exactly same as the member 
02345                  * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
02346                  * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
02347                  * to their names appending to the name resolved from the specified qualifying 
02348                  * member with a dot in between.</p>
02349                  * @param q A qualifying member
02350                  * @param mid The ID of the member to construct
02351                  * @since 1.0
02352                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
02353                  */
02354                 protected Member(JsObject.Member q, Mid mid) {
02355                     super(q, mid);
02356                 }
02357                 /**
02358                  * <p>Internally constructs a member without a qualifying member.</p>
02359                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
02360                  * or <b>internal</b> classes or class members.</p>
02361                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
02362                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
02363                  * declared in <b>opaque</b> types other than the declaring class of this constructor 
02364                  * itself and its subclasses. Under this circumstance, the field names must be 
02365                  * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
02366                  * types are generally resolved by re-compilers directly to identifiers of their names.</p>
02367                  * @param mid The ID of the member to construct
02368                  * @since 1.0
02369                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
02370                  */
02371                 protected Member(Mid mid) {
02372                     super(mid);
02373                 }
02374                 /**
02375                  * <p>Evaluates the property, represented by the current member instance, of the 
02376                  * argument object.</p>
02377                  * @param o The argument object
02378                  * @return The value of the current member based on the object argument.
02379                  * @since 1.0
02380                  * @javascript Re-compilers must convert the instance invocation of this method into 
02381                  * the JavaScript expression: 
02382                  * <pre>o.m</pre>
02383                  * where <tt>m</tt> is the identifier name resolved from the current member 
02384                  * instance of the invocation.
02385                  */
02386                 @Override
02387                 public Prototype with(ObjectLike o) {
02388                     return new Prototype(super.with(o));
02389                 }
02390 
02391                 /**
02392                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
02393                  * name of this field, qualified by the current member instance of the field, and 
02394                  * to access the property of the name on an object.</p>
02395                  * @since 1.0
02396                  * @see JsBoolean#valueOf()
02397                  * @javascript Re-compilers must resolve the member of this instance field to the 
02398                  * identifier of the field name appending to the identifier resolved from its 
02399                  * qualifying member with a dot in between.
02400                  */
02401                 public final JsFunction.Member<java.lang.Boolean> valueOf = new JsFunction.Member<java.lang.Boolean>(this, Members.valueOf);
02402             }
02403 
02404             /**
02405              * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
02406              * with the wrapping constructor.</p>
02407              * @param var The argument of an <b>opaque</b> object.
02408              * @since 1.0
02409              * @javascript Re-compilers must ignore the construction operation of this constructor, 
02410              * that is, replacing it with its only argument.
02411              */
02412             public Prototype(JsObject var) {
02413                 super(var);
02414             }
02415 
02416             /**
02417              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
02418              * without a qualifying member and to access the property of the name on an object.</p>
02419              * @since 1.0
02420              * @see JsBoolean#valueOf()
02421              * @javascript Re-compilers must resolve the member of this static field to the 
02422              * identifier of the field name.
02423              */
02424             public static final JsFunction.Member<java.lang.Boolean> valueOf = new JsFunction.Member<java.lang.Boolean>(Members.valueOf);
02425         }
02426     }
02427 
02428     /**
02429      * <p>An <b>opaque</b> class representing the global Date class of JavaScript.</p>
02430      *
02431      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02432      * 
02433      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
02434      * generated into the target codes. Re-compilers must exit with error on the operations of 
02435      * accessing that kind of class objects.
02436      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
02437      * and <tt>instanceof</tt> to it always <tt>true</tt>.
02438      */
02439     public static class Date extends JsFunction<java.lang.String>
02440     {
02441         /**
02442          * <p>An <b>internal</b> class containing membership data for its enclosing 
02443          * opaque class.</p>
02444          * <p>This class is only used inside of <b>opaque</b> or <b>internal</b> classes or 
02445          * class members.</p>
02446          *
02447          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02448          * 
02449          * @javascript Re-compilers must report error on resolving an <b>internal</b> class. 
02450          */
02451         protected static abstract class Members extends JsFunction.Members
02452         {
02453             /**
02454              * <p>An <b>internal</b> static field defining a member ID of the field name and 
02455              * used internally to define a member of the same name.</p>
02456              * @since 1.0
02457              * @see Date#parse
02458              * @see Date.Member#parse
02459              * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
02460              */
02461             public final static Mid parse = id("parse");
02462             /**
02463              * <p>An <b>internal</b> static field defining a member ID of the field name and 
02464              * used internally to define a member of the same name.</p>
02465              * @since 1.0
02466              * @see Date#UTC
02467              * @see Date.Member#UTC
02468              * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
02469              */
02470             public final static Mid UTC   = id("UTC"  );
02471         }
02472 
02473         /**
02474          * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
02475          * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
02476          * This class and the subclasses of this class are used to declare either <b>opaque</b> 
02477          * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
02478          * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
02479          * constructors are used to define the fields inside <b>opaque</b> classes. Under 
02480          * either circumstance, the field names must be exactly same as the member names, as 
02481          * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
02482          * based on the field names.</p>
02483          *
02484          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
02485          * 
02486          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
02487          * in the target codes. Re-compilers must exit with error on operations accessing that kind 
02488          * of class objects.
02489          * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
02490          * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
02491          * <pre>q.m</pre>
02492          * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
02493          * resolved from the instance of the enclosing member. Re-compilers must resolve an 
02494          * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
02495          * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
02496          * <pre>m</pre>
02497          * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
02498          * error on the access to <b>opaque</b> fields declared by this class under any other 
02499          * circumstances.
02500          */
02501         public static class Member extends JsFunction.Member<java.lang.String>
02502         {
02503             private Member(JsObject.Member q, Mid mid) {
02504                 super(q, mid);
02505             }
02506             private Member(Mid mid) {
02507                 super(mid);
02508             }
02509             /**
02510              * <p>Evaluates the property, represented by the current member instance, of the 
02511              * argument object.</p>
02512              * @param o The argument object
02513              * @return The value of the current member based on the object argument.
02514              * @since 1.0
02515              * @javascript Re-compilers must convert the instance invocation of this method into 
02516              * the JavaScript expression: 
02517              * <pre>o.m</pre>
02518              * where <tt>m</tt> is the identifier name resolved from the current member 
02519              * instance of the invocation.
02520              */
02521             @Override
02522             public Date with(ObjectLike o) {
02523                 return new Date(super.with(o));
02524             }
02525             /**
02526              * <p>Evaluates a property, represented by the current member instance, of the 
02527              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
02528              * @return The value of the current member based on the JavaScript global object.
02529              * @since 1.0
02530              * @javascript Re-compilers must convert the instance invocation of this method into 
02531              * the JavaScript expression: 
02532              * <pre>m</pre>
02533              * where <tt>m</tt> is the identifier name resolved from the current member 
02534              * instance of the invocation.
02535              */
02536             @Override
02537             public Date with() {
02538                 return with(Js.core());
02539             }
02540 
02541             /**
02542              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
02543              * name of this field, qualified by the current member instance of the field, and 
02544              * to access the property of the name on an object.</p>
02545              * @since 1.0
02546              * @see Date#parse(Object)
02547              * @javascript Re-compilers must resolve the member of this instance field to the 
02548              * identifier of the field name appending to the identifier resolved from its 
02549              * qualifying member with a dot in between.
02550              */
02551             public final JsFunction.Member<java.lang.Number> parse = new JsFunction.Member<java.lang.Number>(this, Members.parse);
02552             /**
02553              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
02554              * name of this field, qualified by the current member instance of the field, and 
02555              * to access the property of the name on an object.</p>
02556              * @since 1.0
02557              * @see Date#UTC(Object, Object)
02558              * @see Date#UTC(Object, Object, Object)
02559              * @see Date#UTC(Object, Object, Object, Object)
02560              * @see Date#UTC(Object, Object, Object, Object, Object)
02561              * @see Date#UTC(Object, Object, Object, Object, Object, Object)
02562              * @see Date#UTC(Object, Object, Object, Object, Object, Object, Object)
02563              * @javascript Re-compilers must resolve the member of this instance field to the 
02564              * identifier of the field name appending to the identifier resolved from its 
02565              * qualifying member with a dot in between.
02566              */
02567             public final JsFunction.Member<java.lang.Number> UTC = new JsFunction.Member<java.lang.Number>(this, Members.UTC);
02568             /**
02569              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
02570              * name of this field, qualified by the current member instance of the field, and 
02571              * to access the property of the name on an object.</p>
02572              * <p>The <tt>prototype</tt> property is used when a function is used as a 
02573              * constructor. It refers to an object that serves as the prototype for an entire 
02574              * class of objects. Any object created by the constructor inherits all properties 
02575              * of the object referred to by the <tt>prototype</tt> property.</p>
02576              * @since 1.0
02577              * @javascript Re-compilers must resolve the member of this instance field to the 
02578              * identifier of the field name appending to the identifier resolved from its 
02579              * qualifying member with a dot in between.
02580              */
02581             public final Prototype.Member prototype = new Prototype.Member(this, Members.prototype);
02582         }
02583 
02584         /**
02585          * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
02586          * with the wrapping constructor.</p>
02587          * @param var The argument of an <b>opaque</b> object.
02588          * @since 1.0
02589          * @javascript Re-compilers must ignore the construction operation of this constructor, 
02590          * that is, replacing it with its only argument.
02591          */
02592         public Date(JsObject var) {
02593             super(var);
02594         }
02595 
02596         /**
02597          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
02598          * without a qualifying member and to access the property of the name on an object.</p>
02599          * @since 1.0
02600          * @javascript Re-compilers must resolve the member of this static field to the 
02601          * identifier of the field name.
02602          */
02603         public static final JsFunction.Member<java.lang.Number> parse = new JsFunction.Member<java.lang.Number>(Members.parse);
02604 
02605         /**
02606          * <p>Parses a string representation of a date and time and returns the internal 
02607          * millisecond representation of that date.</p>
02608          * <p>Note that, in JavaScript <tt>Date.parse()</tt> is "static" method of the 
02609          * global class <tt>Date</tt>, but in JS this method is of an instance.</p>
02610          * <p><tt>Date.parse()</tt> is a static method of <tt>Date</tt>. It is always invoked 
02611          * through the <tt>Date</tt> constructor as <tt>Date.parse()</tt>, not through a 
02612          * <tt>Date</tt> object as <tt>date.parse()</tt>. <tt>Date.parse()</tt> takes a 
02613          * single string argument. It parses the date contained in this string and returns it 
02614          * in millisecond format, which can be used directly, used to create a new <tt>Date</tt> 
02615          * object, or used to set the date in an existing <tt>Date</tt> object with 
02616          * {@link JsDate#setTime(Object)}.</p>
02617          * <p>The ECMAScript standard does not specify the format of the strings that can be 
02618          * parsed by this method except to say that this method can parse the strings returned 
02619          * by the {@link JsDate#toString()} and {@link JsDate#toUTCString()} methods. 
02620          * Unfortunately, these functions format dates in an implementation-dependent way, 
02621          * so it is not, in general, possible to write dates in a way that is guaranteed to 
02622          * be understood by all JavaScript implementations.</p>
02623          * @param v A string containing the date and time to be parsed.
02624          * @return The number of milliseconds between the specified date and time and 
02625          * midnight GMT on January 1, 1970.
02626          * @since 1.0
02627          * @see Date#parse(Object)
02628          * @javascript Re-compilers must replace the instance invocation of this method with the 
02629          * JavaScript expression:
02630          * <pre>Date.parse(v)</pre>
02631          */
02632         public final java.lang.Number parse(java.lang.Object v) {
02633             return call(parse, v);
02634         }
02635 
02636         /**
02637          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
02638          * without a qualifying member and to access the property of the name on an object.</p>
02639          * @since 1.0
02640          * @see Date#UTC(Object, Object)
02641          * @see Date#UTC(Object, Object, Object)
02642          * @see Date#UTC(Object, Object, Object, Object)
02643          * @see Date#UTC(Object, Object, Object, Object, Object)
02644          * @see Date#UTC(Object, Object, Object, Object, Object, Object)
02645          * @see Date#UTC(Object, Object, Object, Object, Object, Object, Object)
02646          * @javascript Re-compilers must resolve the member of this static field to the 
02647          * identifier of the field name.
02648          */
02649         public static final JsFunction.Member<java.lang.Number> UTC = new JsFunction.Member<java.lang.Number>(Members.UTC);
02650 
02651         /**
02652          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02653          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02654          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02655          * not through an individual Date object. However, in JS this method is of an 
02656          * instance.</p>
02657          * <p>The arguments to this method specify a date and time and are understood 
02658          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02659          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02660          * methods and by the {@link JsDate#setTime(Object)} method.</p
02661          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02662          * identical to those that this method accepts. The difference is that {@link JsDate} 
02663          * constructors assume local time, while this method assumes universal time (GMT).</p
02664          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02665          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02666          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02667          * @return The millisecond representation of the specified universal time. That is, 
02668          * this method returns the number of milliseconds between midnight GMT on January 1, 
02669          * 1970 and the specified time.
02670          * @since 1.0
02671          * @javascript Re-compilers must replace the instance invocation of this method with the 
02672          * JavaScript expression:
02673          * <pre>Date.UTC(yr, mo)</pre>
02674          */
02675         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo) {
02676             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo));
02677         }
02678         /**
02679          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02680          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02681          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02682          * not through an individual Date object. However, in JS this method is of an 
02683          * instance.</p>
02684          * <p>The arguments to this method specify a date and time and are understood 
02685          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02686          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02687          * methods and by the {@link JsDate#setTime(Object)} method.</p
02688          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02689          * identical to those that this method accepts. The difference is that {@link JsDate} 
02690          * constructors assume local time, while this method assumes universal time (GMT).</p
02691          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02692          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02693          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02694          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
02695          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
02696          * lowest value. This argument is optional.
02697          * @return The millisecond representation of the specified universal time. That is, 
02698          * this method returns the number of milliseconds between midnight GMT on January 1, 
02699          * 1970 and the specified time.
02700          * @since 1.0
02701          * @javascript Re-compilers must replace the instance invocation of this method with the 
02702          * JavaScript expression:
02703          * <pre>Date.UTC(yr, mo, day)</pre>
02704          */
02705         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo, java.lang.Object day) {
02706             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo).add(day));
02707         }
02708         /**
02709          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02710          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02711          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02712          * not through an individual Date object. However, in JS this method is of an 
02713          * instance.</p>
02714          * <p>The arguments to this method specify a date and time and are understood 
02715          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02716          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02717          * methods and by the {@link JsDate#setTime(Object)} method.</p
02718          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02719          * identical to those that this method accepts. The difference is that {@link JsDate} 
02720          * constructors assume local time, while this method assumes universal time (GMT).</p
02721          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02722          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02723          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02724          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
02725          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
02726          * lowest value. This argument is optional.
02727          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
02728          * This argument is optional.
02729          * @return The millisecond representation of the specified universal time. That is, 
02730          * this method returns the number of milliseconds between midnight GMT on January 1, 
02731          * 1970 and the specified time.
02732          * @since 1.0
02733          * @javascript Re-compilers must replace the instance invocation of this method with the 
02734          * JavaScript expression:
02735          * <pre>Date.UTC(yr, mo, day, hr)</pre>
02736          */
02737         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr) {
02738             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr));
02739         }
02740         /**
02741          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02742          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02743          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02744          * not through an individual Date object. However, in JS this method is of an 
02745          * instance.</p>
02746          * <p>The arguments to this method specify a date and time and are understood 
02747          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02748          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02749          * methods and by the {@link JsDate#setTime(Object)} method.</p
02750          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02751          * identical to those that this method accepts. The difference is that {@link JsDate} 
02752          * constructors assume local time, while this method assumes universal time (GMT).</p
02753          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02754          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02755          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02756          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
02757          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
02758          * lowest value. This argument is optional.
02759          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
02760          * This argument is optional.
02761          * @param min The minutes in the hour, specified as an integer from 0 to 59. 
02762          * This argument is optional.
02763          * @return The millisecond representation of the specified universal time. That is, 
02764          * this method returns the number of milliseconds between midnight GMT on January 1, 
02765          * 1970 and the specified time.
02766          * @since 1.0
02767          * @javascript Re-compilers must replace the instance invocation of this method with the 
02768          * JavaScript expression:
02769          * <pre>Date.UTC(yr, mo, day, hr, min)</pre>
02770          */
02771         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min) {
02772             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min));
02773         }
02774         /**
02775          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02776          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02777          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02778          * not through an individual Date object. However, in JS this method is of an 
02779          * instance.</p>
02780          * <p>The arguments to this method specify a date and time and are understood 
02781          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02782          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02783          * methods and by the {@link JsDate#setTime(Object)} method.</p
02784          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02785          * identical to those that this method accepts. The difference is that {@link JsDate} 
02786          * constructors assume local time, while this method assumes universal time (GMT).</p
02787          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02788          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02789          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02790          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
02791          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
02792          * lowest value. This argument is optional.
02793          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
02794          * This argument is optional.
02795          * @param min The minutes in the hour, specified as an integer from 0 to 59. 
02796          * This argument is optional.
02797          * @param sec The seconds in the minute, specified as an integer from 0 to 59. 
02798          * This argument is optional.
02799          * @return The millisecond representation of the specified universal time. That is, 
02800          * this method returns the number of milliseconds between midnight GMT on January 1, 
02801          * 1970 and the specified time.
02802          * @since 1.0
02803          * @javascript Re-compilers must replace the instance invocation of this method with the 
02804          * JavaScript expression:
02805          * <pre>Date.UTC(yr, mo, day, hr, min, sec)</pre>
02806          */
02807         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min, java.lang.Object sec) {
02808             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min).add(sec));
02809         }
02810         /**
02811          * <p>Returns the millisecond representation of the specified UTC date and time.</p>
02812          * <p>Note that, in JavaScript <tt>Date.UTC()</tt> is "static" method of the 
02813          * global class <tt>Date</tt>;  it is invoked through the <tt>Date()</tt> constructor, 
02814          * not through an individual Date object. However, in JS this method is of an 
02815          * instance.</p>
02816          * <p>The arguments to this method specify a date and time and are understood 
02817          * to be in UTC; they are in the GMT time zone. The specified UTC time is converted 
02818          * to the millisecond format, which can be used by the {@link JsDate} constructor 
02819          * methods and by the {@link JsDate#setTime(Object)} method.</p
02820          * <p>The {@link JsDate} constructor methods can accept date and time arguments 
02821          * identical to those that this method accepts. The difference is that {@link JsDate} 
02822          * constructors assume local time, while this method assumes universal time (GMT).</p
02823          * @param yr The year in four-digit format. If this argument is between 0 and 99, 
02824          * inclusive, 1900 is added to it and it is treated as a year between 1900 and 1999.
02825          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02826          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
02827          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
02828          * lowest value. This argument is optional.
02829          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
02830          * This argument is optional.
02831          * @param min The minutes in the hour, specified as an integer from 0 to 59. 
02832          * This argument is optional.
02833          * @param sec The seconds in the minute, specified as an integer from 0 to 59. 
02834          * This argument is optional.
02835          * @param ms The number of milliseconds, specified as an integer from 0 to 999. 
02836          * This argument is optional and is ignored prior to ECMAScript standardization.
02837          * @return The millisecond representation of the specified universal time. That is, 
02838          * this method returns the number of milliseconds between midnight GMT on January 1, 
02839          * 1970 and the specified time.
02840          * @since 1.0
02841          * @javascript Re-compilers must replace the instance invocation of this method with the 
02842          * JavaScript expression:
02843          * <pre>Date.UTC(yr, mo, day, hr, min, sec, ms)</pre>
02844          */
02845         public final java.lang.Number UTC(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min, java.lang.Object sec, java.lang.Object ms) {
02846             return call(UTC, new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min).add(sec).add(ms));
02847         }
02848 
02849         /**
02850          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
02851          * without a qualifying member and to access the property of the name on an object.</p>
02852          * <p>The <tt>prototype</tt> property is used when a function is used as a 
02853          * constructor. It refers to an object that serves as the prototype for an entire 
02854          * class of objects. Any object created by the constructor inherits all properties 
02855          * of the object referred to by the <tt>prototype</tt> property.</p>
02856          * @since 1.0
02857          * @javascript Re-compilers must resolve the member of this static field to the 
02858          * identifier of the field name.
02859          */
02860         public static final Prototype.Member prototype = new Prototype.Member(Members.prototype);
02861 
02862         /**
02863          * <p>Returns the string representation of the current date and time.</p>
02864          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02865          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02866          * arguments passed to it and returns a string representation of the current date 
02867          * and time.</p>
02868          * @return The string representation of the current date and time.
02869          * @since 1.0
02870          * @see #create()
02871          * @see Js#date()
02872          * @javascript Re-compilers must replace the instance invocation of this method with the 
02873          * JavaScript expression:
02874          * <pre>Date()</pre>
02875          */
02876         @Override
02877         public final java.lang.String invoke() {return Js.date().toString();}
02878         /**
02879          * <p>Returns the string representation of the current date and time.</p>
02880          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02881          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02882          * arguments passed to it and returns a string representation of the current date 
02883          * and time.</p>
02884          * @param arg The argument being ignored.
02885          * @return The string representation of the current date and time.
02886          * @since 1.0
02887          * @see #create()
02888          * @see Js#date()
02889          * @javascript Re-compilers must replace the instance invocation of this method with the 
02890          * JavaScript expression:
02891          * <pre>Date()</pre>
02892          */
02893         @Override
02894         public final java.lang.String invoke(java.lang.Object arg) {return Js.date().toString();}
02895         /**
02896          * <p>Returns the string representation of the current date and time.</p>
02897          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02898          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02899          * arguments passed to it and returns a string representation of the current date 
02900          * and time.</p>
02901          * @param args The arguments being ignored.
02902          * @return The string representation of the current date and time.
02903          * @since 1.0
02904          * @see #create()
02905          * @see Js#date()
02906          * @javascript Re-compilers must replace the instance invocation of this method with the 
02907          * JavaScript expression:
02908          * <pre>Date()</pre>
02909          */
02910         @Override
02911         public final java.lang.String invoke(Vars<?> args) {return Js.date().toString();}
02912         /**
02913          * <p>Constructs a date object set to the current date and time.</p>
02914          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02915          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02916          * arguments passed to it and returns a string representation of the current date 
02917          * and time.</p>
02918          * @return The newly constructed date object.
02919          * @since 1.0
02920          * @see #invoke()
02921          * @see Js#date()
02922          * @javascript Re-compilers must replace the instance invocation of this method with the 
02923          * JavaScript expression:
02924          * <pre>new Date()</pre>
02925          */
02926         @Override
02927         public final JsDate create() {return new JsDate(super.create());}
02928         /**
02929          * <p>Constructs a date object taking <tt>milliseconds</tt> as the internal numeric 
02930          * representation as returned by {@link JsDate#getTime()}.</p>
02931          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02932          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02933          * arguments passed to it and returns a string representation of the current date 
02934          * and time.</p>
02935          * @param milliseconds The numeric representation of the date in milliseconds.
02936          * @return The newly constructed date object.
02937          * @since 1.0
02938          * @see Js#date(Number)
02939          * @see JsDate#JsDate(Number)
02940          * @javascript Re-compilers must replace the instance invocation of this method with the 
02941          * JavaScript expression:
02942          * <pre>new Date(milliseconds)</pre>
02943          */
02944         public final JsDate create(java.lang.Number milliseconds) {return new JsDate(super.create(milliseconds));}
02945         /**
02946          * <p>Constructs a date object taking <tt>milliseconds</tt> as the internal numeric 
02947          * representation as returned by {@link JsDate#getTime()}.</p>
02948          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02949          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02950          * arguments passed to it and returns a string representation of the current date 
02951          * and time.</p>
02952          * @param milliseconds The numeric representation of the date in milliseconds.
02953          * @return The newly constructed date object.
02954          * @since 1.0
02955          * @see Js#date(Number)
02956          * @see JsDate#JsDate(NumberLike)
02957          * @javascript Re-compilers must replace the instance invocation of this method with the 
02958          * JavaScript expression:
02959          * <pre>new Date(milliseconds)</pre>
02960          */
02961         public final JsDate create(NumberLike<?> milliseconds) {return new JsDate(super.create(milliseconds));}
02962         /**
02963          * <p>Constructs a date object taking <tt>datestring</tt> as the string representation, 
02964          * in the format accepted by the {@link #parse(Object)} method.</p>
02965          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02966          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02967          * arguments passed to it and returns a string representation of the current date 
02968          * and time.</p>
02969          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02970          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02971          * arguments passed to it and returns a string representation of the current date 
02972          * and time.</p>
02973          * @param datestring The string representation of the date to construct.
02974          * @return The newly constructed date object.
02975          * @since 1.0
02976          * @see Js#date(String)
02977          * @see JsDate#JsDate(String)
02978          * @javascript Re-compilers must replace the instance invocation of this method with the 
02979          * JavaScript expression:
02980          * <pre>new Date(datestring)</pre>
02981          */
02982         @Override
02983         public final JsDate create(java.lang.Object datestring) {return new JsDate(super.create(datestring));}
02984         /**
02985          * <p>Constructs a date object with two to seven numeric arguments that specify the 
02986          * individual fields of the date and time. All but the first two arguments, the year 
02987          * and month fields, are optional.</p>
02988          * <p>Note that these date and time fields are specified using local time, not 
02989          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
02990          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
02991          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
02992          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
02993          * arguments passed to it and returns a string representation of the current date 
02994          * and time.</p>
02995          * @param yr The year, in four-digit format. For compatibility with early implementations 
02996          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
02997          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
02998          * @return The newly constructed date object.
02999          * @since 1.0
03000          * @see JsDate#JsDate(Object, Object)
03001          * @javascript Re-compilers must replace the instance invocation of this method with the 
03002          * JavaScript expression:
03003          * <pre>new Date(yr, mo)</pre>
03004          */
03005         public final JsDate create(java.lang.Object yr, java.lang.Object mo) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo)));}
03006         /**
03007          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03008          * individual fields of the date and time. All but the first two arguments, the year 
03009          * and month fields, are optional.</p>
03010          * <p>Note that these date and time fields are specified using local time, not 
03011          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03012          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03013          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03014          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03015          * arguments passed to it and returns a string representation of the current date 
03016          * and time.</p>
03017          * @param yr The year, in four-digit format. For compatibility with early implementations 
03018          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
03019          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
03020          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
03021          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
03022          * lowest value. Optional.
03023          * @return The newly constructed date object.
03024          * @since 1.0
03025          * @see JsDate#JsDate(Object, Object, Object)
03026          * @javascript Re-compilers must replace the instance invocation of this method with the 
03027          * JavaScript expression:
03028          * <pre>new Date(yr, mo, day)</pre>
03029          */
03030         public final JsDate create(java.lang.Object yr, java.lang.Object mo, java.lang.Object day) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo).add(day)));}
03031         /**
03032          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03033          * individual fields of the date and time. All but the first two arguments, the year 
03034          * and month fields, are optional.</p>
03035          * <p>Note that these date and time fields are specified using local time, not 
03036          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03037          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03038          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03039          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03040          * arguments passed to it and returns a string representation of the current date 
03041          * and time.</p>
03042          * @param yr The year, in four-digit format. For compatibility with early implementations 
03043          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
03044          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
03045          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
03046          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
03047          * lowest value. Optional.
03048          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
03049          * Optional.
03050          * @return The newly constructed date object.
03051          * @since 1.0
03052          * @see JsDate#JsDate(Object, Object, Object, Object)
03053          * @javascript Re-compilers must replace the instance invocation of this method with the 
03054          * JavaScript expression:
03055          * <pre>new Date(yr, mo, day, hr)</pre>
03056          */
03057         public final JsDate create(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr)));}
03058         /**
03059          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03060          * individual fields of the date and time. All but the first two arguments, the year 
03061          * and month fields, are optional.</p>
03062          * <p>Note that these date and time fields are specified using local time, not 
03063          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03064          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03065          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03066          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03067          * arguments passed to it and returns a string representation of the current date 
03068          * and time.</p>
03069          * @param yr The year, in four-digit format. For compatibility with early implementations 
03070          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
03071          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
03072          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
03073          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
03074          * lowest value. Optional.
03075          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
03076          * Optional.
03077          * @param min The minutes in the hour, specified as an integer from 0 to 59. Optional.
03078          * @return The newly constructed date object.
03079          * @since 1.0
03080          * @see JsDate#JsDate(Object, Object, Object, Object, Object)
03081          * @javascript Re-compilers must replace the instance invocation of this method with the 
03082          * JavaScript expression:
03083          * <pre>new Date(yr, mo, day, hr, min)</pre>
03084          */
03085         public final JsDate create(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min)));}
03086         /**
03087          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03088          * individual fields of the date and time. All but the first two arguments, the year 
03089          * and month fields, are optional.</p>
03090          * <p>Note that these date and time fields are specified using local time, not 
03091          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03092          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03093          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03094          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03095          * arguments passed to it and returns a string representation of the current date 
03096          * and time.</p>
03097          * @param yr The year, in four-digit format. For compatibility with early implementations 
03098          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
03099          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
03100          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
03101          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
03102          * lowest value. Optional.
03103          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
03104          * Optional.
03105          * @param min The minutes in the hour, specified as an integer from 0 to 59. Optional.
03106          * @param sec The seconds in the minute, specified as an integer from 0 to 59. Optional.
03107          * @return The newly constructed date object.
03108          * @since 1.0
03109          * @see JsDate#JsDate(Object, Object, Object, Object, Object, Object)
03110          * @javascript Re-compilers must replace the instance invocation of this method with the 
03111          * JavaScript expression:
03112          * <pre>new Date(yr, mo, day, hr, min, sec)</pre>
03113          */
03114         public final JsDate create(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min, java.lang.Object sec) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min).add(sec)));}
03115         /**
03116          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03117          * individual fields of the date and time. All but the first two arguments, the year 
03118          * and month fields, are optional.</p>
03119          * <p>Note that these date and time fields are specified using local time, not 
03120          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03121          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03122          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03123          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03124          * arguments passed to it and returns a string representation of the current date 
03125          * and time.</p>
03126          * @param yr The year, in four-digit format. For compatibility with early implementations 
03127          * of JavaScript, if this argument is between 0 and 99, 1900 is added to it.
03128          * @param mo The month, specified as an integer from 0 (January) to 11 (December).
03129          * @param day The day of the month, specified as an integer from 1 to 31. Note that 
03130          * this argument uses 1 as its lowest value, while other arguments use 0 as their 
03131          * lowest value. Optional.
03132          * @param hr The hour, specified as an integer from 0 (midnight) to 23 (11 p.m.). 
03133          * Optional.
03134          * @param min The minutes in the hour, specified as an integer from 0 to 59. Optional.
03135          * @param sec The seconds in the minute, specified as an integer from 0 to 59. Optional.
03136          * @param ms The milliseconds in the second, specified as an integer from 0 to 999. 
03137          * Optional.
03138          * @return The newly constructed date object.
03139          * @since 1.0
03140          * @see JsDate#JsDate(Object, Object, Object, Object, Object, Object, Object)
03141          * @javascript Re-compilers must replace the instance invocation of this method with the 
03142          * JavaScript expression:
03143          * <pre>new Date(yr, mo, day, hr, min, sec, ms)</pre>
03144          */
03145         public final JsDate create(java.lang.Object yr, java.lang.Object mo, java.lang.Object day, java.lang.Object hr, java.lang.Object min, java.lang.Object sec, java.lang.Object ms) {return new JsDate(super.create(new Vars<java.lang.Object>().add(yr).add(mo).add(day).add(hr).add(min).add(sec).add(ms)));}
03146         /**
03147          * <p>Constructs a date object with two to seven numeric arguments that specify the 
03148          * individual fields of the date and time. All but the first two arguments, the year 
03149          * and month fields, are optional.</p>
03150          * <p>Note that these date and time fields are specified using local time, not 
03151          * Coordinated Universal Time (UTC) (which is similar to Greenwich Mean Time [GMT]). 
03152          * See the static {@link #UTC(Object, Object)}method for an alternative.</p>
03153          * <p>In JavaScript, <tt>Date()</tt> may also be called as a function, without the 
03154          * <tt>new</tt> operator. When invoked in this way, <tt>Date()</tt> ignores any 
03155          * arguments passed to it and returns a string representation of the current date 
03156          * and time.</p>
03157          * @param args The variable argument with two to seven numeric values that specify the 
03158          * individual fields of the date and time.
03159          * @return The newly constructed date object.
03160          * @since 1.0
03161          * @javascript Re-compilers must replace the instance invocation of this method with the 
03162          * JavaScript expression:
03163          * <pre>new Date(args)</pre>
03164          * where <tt>args</tt> must be expanded to comma-separated argument values.
03165          */
03166         @Override
03167         public final JsDate create(Vars<?> args) {return new JsDate(super.create(args));}
03168 
03169         /**
03170          * <p>An <b>opaque</b> class representing the prototype of the enclosing global 
03171          * class of JavaScript.</p>
03172          *
03173          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
03174          * 
03175          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
03176          * generated into the target codes. Re-compilers must exit with error on the operations of 
03177          * accessing that kind of class objects.
03178          * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
03179          * and <tt>instanceof</tt> to it always <tt>true</tt>.
03180          */
03181         public static class Prototype extends JsObject
03182         {
03183             /**
03184              * <p>An <b>internal</b> class containing membership data for its enclosing 
03185              * opaque class.</p>
03186              * <p>This class is only used inside of <b>opaque</b> or <b>internal</b> classes or 
03187              * class members.</p>
03188              *
03189              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
03190              * 
03191              * @javascript Re-compilers must report error on resolving an <b>internal</b> class. 
03192              */
03193             protected static abstract class Members extends JsObject.Members
03194             {
03195                 /**
03196                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03197                  * used internally to define a member of the same name.</p>
03198                  * @since 1.0
03199                  * @see JsGlobal.Date.Prototype#getTime
03200                  * @see JsGlobal.Date.Prototype.Member#getTime
03201                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03202                  */
03203                 public final static Mid getTime            = id("getTime"           );
03204                 /**
03205                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03206                  * used internally to define a member of the same name.</p>
03207                  * @since 1.0
03208                  * @see JsGlobal.Date.Prototype#getFullYear
03209                  * @see JsGlobal.Date.Prototype.Member#getFullYear
03210                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03211                  */
03212                 public final static Mid getFullYear        = id("getFullYear"       );
03213                 /**
03214                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03215                  * used internally to define a member of the same name.</p>
03216                  * @since 1.0
03217                  * @see JsGlobal.Date.Prototype#getUTCFullYear
03218                  * @see JsGlobal.Date.Prototype.Member#getUTCFullYear
03219                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03220                  */
03221                 public final static Mid getUTCFullYear     = id("getUTCFullYear"    );
03222                 /**
03223                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03224                  * used internally to define a member of the same name.</p>
03225                  * @since 1.0
03226                  * @see JsGlobal.Date.Prototype#getMonth
03227                  * @see JsGlobal.Date.Prototype.Member#getMonth
03228                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03229                  */
03230                 public final static Mid getMonth           = id("getMonth"          );
03231                 /**
03232                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03233                  * used internally to define a member of the same name.</p>
03234                  * @since 1.0
03235                  * @see JsGlobal.Date.Prototype#getUTCMonth
03236                  * @see JsGlobal.Date.Prototype.Member#getUTCMonth
03237                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03238                  */
03239                 public final static Mid getUTCMonth        = id("getUTCMonth"       );
03240                 /**
03241                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03242                  * used internally to define a member of the same name.</p>
03243                  * @since 1.0
03244                  * @see JsGlobal.Date.Prototype#getDate
03245                  * @see JsGlobal.Date.Prototype.Member#getDate
03246                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03247                  */
03248                 public final static Mid getDate            = id("getDate"           );
03249                 /**
03250                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03251                  * used internally to define a member of the same name.</p>
03252                  * @since 1.0
03253                  * @see JsGlobal.Date.Prototype#getUTCDate
03254                  * @see JsGlobal.Date.Prototype.Member#getUTCDate
03255                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03256                  */
03257                 public final static Mid getUTCDate         = id("getUTCDate"        );
03258                 /**
03259                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03260                  * used internally to define a member of the same name.</p>
03261                  * @since 1.0
03262                  * @see JsGlobal.Date.Prototype#getDay
03263                  * @see JsGlobal.Date.Prototype.Member#getDay
03264                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03265                  */
03266                 public final static Mid getDay             = id("getDay"            );
03267                 /**
03268                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03269                  * used internally to define a member of the same name.</p>
03270                  * @since 1.0
03271                  * @see JsGlobal.Date.Prototype#getUTCDay
03272                  * @see JsGlobal.Date.Prototype.Member#getUTCDay
03273                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03274                  */
03275                 public final static Mid getUTCDay          = id("getUTCDay"         );
03276                 /**
03277                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03278                  * used internally to define a member of the same name.</p>
03279                  * @since 1.0
03280                  * @see JsGlobal.Date.Prototype#getHours
03281                  * @see JsGlobal.Date.Prototype.Member#getHours
03282                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03283                  */
03284                 public final static Mid getHours           = id("getHours"          );
03285                 /**
03286                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03287                  * used internally to define a member of the same name.</p>
03288                  * @since 1.0
03289                  * @see JsGlobal.Date.Prototype#getUTCHours
03290                  * @see JsGlobal.Date.Prototype.Member#getUTCHours
03291                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03292                  */
03293                 public final static Mid getUTCHours        = id("getUTCHours"       );
03294                 /**
03295                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03296                  * used internally to define a member of the same name.</p>
03297                  * @since 1.0
03298                  * @see JsGlobal.Date.Prototype#getMinutes
03299                  * @see JsGlobal.Date.Prototype.Member#getMinutes
03300                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03301                  */
03302                 public final static Mid getMinutes         = id("getMinutes"        );
03303                 /**
03304                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03305                  * used internally to define a member of the same name.</p>
03306                  * @since 1.0
03307                  * @see JsGlobal.Date.Prototype#getUTCMinutes
03308                  * @see JsGlobal.Date.Prototype.Member#getUTCMinutes
03309                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03310                  */
03311                 public final static Mid getUTCMinutes      = id("getUTCMinutes"     );
03312                 /**
03313                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03314                  * used internally to define a member of the same name.</p>
03315                  * @since 1.0
03316                  * @see JsGlobal.Date.Prototype#getSeconds
03317                  * @see JsGlobal.Date.Prototype.Member#getSeconds
03318                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03319                  */
03320                 public final static Mid getSeconds         = id("getSeconds"        );
03321                 /**
03322                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03323                  * used internally to define a member of the same name.</p>
03324                  * @since 1.0
03325                  * @see JsGlobal.Date.Prototype#getUTCSeconds
03326                  * @see JsGlobal.Date.Prototype.Member#getUTCSeconds
03327                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03328                  */
03329                 public final static Mid getUTCSeconds      = id("getUTCSeconds"     );
03330                 /**
03331                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03332                  * used internally to define a member of the same name.</p>
03333                  * @since 1.0
03334                  * @see JsGlobal.Date.Prototype#getMilliseconds
03335                  * @see JsGlobal.Date.Prototype.Member#getMilliseconds
03336                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03337                  */
03338                 public final static Mid getMilliseconds    = id("getMilliseconds"   );
03339                 /**
03340                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03341                  * used internally to define a member of the same name.</p>
03342                  * @since 1.0
03343                  * @see JsGlobal.Date.Prototype#getUTCMilliseconds
03344                  * @see JsGlobal.Date.Prototype.Member#getUTCMilliseconds
03345                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03346                  */
03347                 public final static Mid getUTCMilliseconds = id("getUTCMilliseconds");
03348                 /**
03349                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03350                  * used internally to define a member of the same name.</p>
03351                  * @since 1.0
03352                  * @see JsGlobal.Date.Prototype#getTimezoneOffset
03353                  * @see JsGlobal.Date.Prototype.Member#getTimezoneOffset
03354                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03355                  */
03356                 public final static Mid getTimezoneOffset  = id("getTimezoneOffset" );
03357                 /**
03358                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03359                  * used internally to define a member of the same name.</p>
03360                  * @since 1.0
03361                  * @see JsGlobal.Date.Prototype#setTime
03362                  * @see JsGlobal.Date.Prototype.Member#setTime
03363                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03364                  */
03365                 public final static Mid setTime            = id("setTime"           );
03366                 /**
03367                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03368                  * used internally to define a member of the same name.</p>
03369                  * @since 1.0
03370                  * @see JsGlobal.Date.Prototype#setMilliseconds
03371                  * @see JsGlobal.Date.Prototype.Member#setMilliseconds
03372                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03373                  */
03374                 public final static Mid setMilliseconds    = id("setMilliseconds"   );
03375                 /**
03376                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03377                  * used internally to define a member of the same name.</p>
03378                  * @since 1.0
03379                  * @see JsGlobal.Date.Prototype#setUTCMilliseconds
03380                  * @see JsGlobal.Date.Prototype.Member#setUTCMilliseconds
03381                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03382                  */
03383                 public final static Mid setUTCMilliseconds = id("setUTCMilliseconds");
03384                 /**
03385                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03386                  * used internally to define a member of the same name.</p>
03387                  * @since 1.0
03388                  * @see JsGlobal.Date.Prototype#setSeconds
03389                  * @see JsGlobal.Date.Prototype.Member#setSeconds
03390                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03391                  */
03392                 public final static Mid setSeconds         = id("setSeconds"        );
03393                 /**
03394                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03395                  * used internally to define a member of the same name.</p>
03396                  * @since 1.0
03397                  * @see JsGlobal.Date.Prototype#setUTCSeconds
03398                  * @see JsGlobal.Date.Prototype.Member#setUTCSeconds
03399                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03400                  */
03401                 public final static Mid setUTCSeconds      = id("setUTCSeconds"     );
03402                 /**
03403                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03404                  * used internally to define a member of the same name.</p>
03405                  * @since 1.0
03406                  * @see JsGlobal.Date.Prototype#setMinutes
03407                  * @see JsGlobal.Date.Prototype.Member#setMinutes
03408                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03409                  */
03410                 public final static Mid setMinutes         = id("setMinutes"        );
03411                 /**
03412                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03413                  * used internally to define a member of the same name.</p>
03414                  * @since 1.0
03415                  * @see JsGlobal.Date.Prototype#setUTCMinutes
03416                  * @see JsGlobal.Date.Prototype.Member#setUTCMinutes
03417                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03418                  */
03419                 public final static Mid setUTCMinutes      = id("setUTCMinutes"     );
03420                 /**
03421                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03422                  * used internally to define a member of the same name.</p>
03423                  * @since 1.0
03424                  * @see JsGlobal.Date.Prototype#setHours
03425                  * @see JsGlobal.Date.Prototype.Member#setHours
03426                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03427                  */
03428                 public final static Mid setHours           = id("setHours"          );
03429                 /**
03430                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03431                  * used internally to define a member of the same name.</p>
03432                  * @since 1.0
03433                  * @see JsGlobal.Date.Prototype#setUTCHours
03434                  * @see JsGlobal.Date.Prototype.Member#setUTCHours
03435                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03436                  */
03437                 public final static Mid setUTCHours        = id("setUTCHours"       );
03438                 /**
03439                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03440                  * used internally to define a member of the same name.</p>
03441                  * @since 1.0
03442                  * @see JsGlobal.Date.Prototype#setDate
03443                  * @see JsGlobal.Date.Prototype.Member#setDate
03444                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03445                  */
03446                 public final static Mid setDate            = id("setDate"           );
03447                 /**
03448                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03449                  * used internally to define a member of the same name.</p>
03450                  * @since 1.0
03451                  * @see JsGlobal.Date.Prototype#setUTCDate
03452                  * @see JsGlobal.Date.Prototype.Member#setUTCDate
03453                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03454                  */
03455                 public final static Mid setUTCDate         = id("setUTCDate"        );
03456                 /**
03457                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03458                  * used internally to define a member of the same name.</p>
03459                  * @since 1.0
03460                  * @see JsGlobal.Date.Prototype#setMonth
03461                  * @see JsGlobal.Date.Prototype.Member#setMonth
03462                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03463                  */
03464                 public final static Mid setMonth           = id("setMonth"          );
03465                 /**
03466                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03467                  * used internally to define a member of the same name.</p>
03468                  * @since 1.0
03469                  * @see JsGlobal.Date.Prototype#setUTCMonth
03470                  * @see JsGlobal.Date.Prototype.Member#setUTCMonth
03471                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03472                  */
03473                 public final static Mid setUTCMonth        = id("setUTCMonth"       );
03474                 /**
03475                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03476                  * used internally to define a member of the same name.</p>
03477                  * @since 1.0
03478                  * @see JsGlobal.Date.Prototype#setFullYear
03479                  * @see JsGlobal.Date.Prototype.Member#setFullYear
03480                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03481                  */
03482                 public final static Mid setFullYear        = id("setFullYear"       );
03483                 /**
03484                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03485                  * used internally to define a member of the same name.</p>
03486                  * @since 1.0
03487                  * @see JsGlobal.Date.Prototype#setUTCFullYear
03488                  * @see JsGlobal.Date.Prototype.Member#setUTCFullYear
03489                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03490                  */
03491                 public final static Mid setUTCFullYear     = id("setUTCFullYear"    );
03492                 /**
03493                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03494                  * used internally to define a member of the same name.</p>
03495                  * @since 1.0
03496                  * @see JsGlobal.Date.Prototype#toDateString
03497                  * @see JsGlobal.Date.Prototype.Member#toDateString
03498                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03499                  */
03500                 public final static Mid toDateString       = id("toDateString"      );
03501                 /**
03502                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03503                  * used internally to define a member of the same name.</p>
03504                  * @since 1.0
03505                  * @see JsGlobal.Date.Prototype#toTimeString
03506                  * @see JsGlobal.Date.Prototype.Member#toTimeString
03507                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03508                  */
03509                 public final static Mid toTimeString       = id("toTimeString"      );
03510                 /**
03511                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03512                  * used internally to define a member of the same name.</p>
03513                  * @since 1.0
03514                  * @see JsGlobal.Date.Prototype#toLocaleDateString
03515                  * @see JsGlobal.Date.Prototype.Member#toLocaleDateString
03516                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03517                  */
03518                 public final static Mid toLocaleDateString = id("toLocaleDateString");
03519                 /**
03520                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03521                  * used internally to define a member of the same name.</p>
03522                  * @since 1.0
03523                  * @see JsGlobal.Date.Prototype#toLocaleTimeString
03524                  * @see JsGlobal.Date.Prototype.Member#toLocaleTimeString
03525                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03526                  */
03527                 public final static Mid toLocaleTimeString = id("toLocaleTimeString");
03528                 /**
03529                  * <p>An <b>internal</b> static field defining a member ID of the field name and 
03530                  * used internally to define a member of the same name.</p>
03531                  * @since 1.0
03532                  * @see JsGlobal.Date.Prototype#toUTCString
03533                  * @see JsGlobal.Date.Prototype.Member#toUTCString
03534                  * @javascript Re-compilers must report error on accessing an <b>internal</b> field. 
03535                  */
03536                 public final static Mid toUTCString        = id("toUTCString"       );
03537             }
03538 
03539             /**
03540              * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
03541              * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
03542              * This class and the subclasses of this class are used to declare either <b>opaque</b> 
03543              * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
03544              * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
03545              * constructors are used to define the fields inside <b>opaque</b> classes. Under 
03546              * either circumstance, the field names must be exactly same as the member names, as 
03547              * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
03548              * based on the field names.</p>
03549              *
03550              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
03551              * 
03552              * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
03553              * in the target codes. Re-compilers must exit with error on operations accessing that kind 
03554              * of class objects.
03555              * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
03556              * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
03557              * <pre>q.m</pre>
03558              * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
03559              * resolved from the instance of the enclosing member. Re-compilers must resolve an 
03560              * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
03561              * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
03562              * <pre>m</pre>
03563              * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
03564              * error on the access to <b>opaque</b> fields declared by this class under any other 
03565              * circumstances.
03566              */
03567             public static class Member extends JsObject.Member
03568             {
03569                 /**
03570                  * <p>Internally constructs a member based on a qualifying member.</p>
03571                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
03572                  * or <b>internal</b> classes or class members.</p>
03573                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
03574                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
03575                  * declared in the declaring class of this constructor itself or its subclasses. 
03576                  * Under this circumstance, the field names must be exactly same as the member 
03577                  * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
03578                  * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
03579                  * to their names appending to the name resolved from the specified qualifying 
03580                  * member with a dot in between.</p>
03581                  * @param q A qualifying member
03582                  * @param mid The ID of the member to construct
03583                  * @since 1.0
03584                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
03585                  */
03586                 protected Member(JsObject.Member q, Mid mid) {
03587                     super(q, mid);
03588                 }
03589                 /**
03590                  * <p>Internally constructs a member without a qualifying member.</p>
03591                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
03592                  * or <b>internal</b> classes or class members.</p>
03593                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
03594                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
03595                  * declared in <b>opaque</b> types other than the declaring class of this constructor 
03596                  * itself and its subclasses. Under this circumstance, the field names must be 
03597                  * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
03598                  * types are generally resolved by re-compilers directly to identifiers of their names.</p>
03599                  * @param mid The ID of the member to construct
03600                  * @since 1.0
03601                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
03602                  */
03603                 protected Member(Mid mid) {
03604                     super(mid);
03605                 }
03606                 /**
03607                  * <p>Evaluates the property, represented by the current member instance, of the 
03608                  * argument object.</p>
03609                  * @param o The argument object
03610                  * @return The value of the current member based on the object argument.
03611                  * @since 1.0
03612                  * @javascript Re-compilers must convert the instance invocation of this method into 
03613                  * the JavaScript expression: 
03614                  * <pre>o.m</pre>
03615                  * where <tt>m</tt> is the identifier name resolved from the current member 
03616                  * instance of the invocation.
03617                  */
03618                 @Override
03619                 public Prototype with(ObjectLike o) {
03620                     return new Prototype(super.with(o));
03621                 }
03622 
03623                 /**
03624                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03625                  * name of this field, qualified by the current member instance of the field, and 
03626                  * to access the property of the name on an object.</p>
03627                  * @since 1.0
03628                  * @see JsDate#valueOf()
03629                  * @javascript Re-compilers must resolve the member of this instance field to the 
03630                  * identifier of the field name appending to the identifier resolved from its 
03631                  * qualifying member with a dot in between.
03632                  */
03633                 public final JsFunction.Member<java.lang.Number> valueOf            = new JsFunction.Member<java.lang.Number>(this, Members.valueOf           );
03634                 /**
03635                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03636                  * name of this field, qualified by the current member instance of the field, and 
03637                  * to access the property of the name on an object.</p>
03638                  * @since 1.0
03639                  * @see JsDate#getTime()
03640                  * @javascript Re-compilers must resolve the member of this instance field to the 
03641                  * identifier of the field name appending to the identifier resolved from its 
03642                  * qualifying member with a dot in between.
03643                  */
03644                 public final JsFunction.Member<java.lang.Number> getTime            = new JsFunction.Member<java.lang.Number>(this, Members.getTime           );
03645                 /**
03646                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03647                  * name of this field, qualified by the current member instance of the field, and 
03648                  * to access the property of the name on an object.</p>
03649                  * @since 1.0
03650                  * @see JsDate#getFullYear()
03651                  * @javascript Re-compilers must resolve the member of this instance field to the 
03652                  * identifier of the field name appending to the identifier resolved from its 
03653                  * qualifying member with a dot in between.
03654                  */
03655                 public final JsFunction.Member<java.lang.Number> getFullYear        = new JsFunction.Member<java.lang.Number>(this, Members.getFullYear       );
03656                 /**
03657                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03658                  * name of this field, qualified by the current member instance of the field, and 
03659                  * to access the property of the name on an object.</p>
03660                  * @since 1.0
03661                  * @see JsDate#getUTCFullYear()
03662                  * @javascript Re-compilers must resolve the member of this instance field to the 
03663                  * identifier of the field name appending to the identifier resolved from its 
03664                  * qualifying member with a dot in between.
03665                  */
03666                 public final JsFunction.Member<java.lang.Number> getUTCFullYear     = new JsFunction.Member<java.lang.Number>(this, Members.getUTCFullYear    );
03667                 /**
03668                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03669                  * name of this field, qualified by the current member instance of the field, and 
03670                  * to access the property of the name on an object.</p>
03671                  * @since 1.0
03672                  * @see JsDate#getMonth()
03673                  * @javascript Re-compilers must resolve the member of this instance field to the 
03674                  * identifier of the field name appending to the identifier resolved from its 
03675                  * qualifying member with a dot in between.
03676                  */
03677                 public final JsFunction.Member<java.lang.Number> getMonth           = new JsFunction.Member<java.lang.Number>(this, Members.getMonth          );
03678                 /**
03679                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03680                  * name of this field, qualified by the current member instance of the field, and 
03681                  * to access the property of the name on an object.</p>
03682                  * @since 1.0
03683                  * @see JsDate#getUTCMonth()
03684                  * @javascript Re-compilers must resolve the member of this instance field to the 
03685                  * identifier of the field name appending to the identifier resolved from its 
03686                  * qualifying member with a dot in between.
03687                  */
03688                 public final JsFunction.Member<java.lang.Number> getUTCMonth        = new JsFunction.Member<java.lang.Number>(this, Members.getUTCMonth       );
03689                 /**
03690                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03691                  * name of this field, qualified by the current member instance of the field, and 
03692                  * to access the property of the name on an object.</p>
03693                  * @since 1.0
03694                  * @see JsDate#getDate()
03695                  * @javascript Re-compilers must resolve the member of this instance field to the 
03696                  * identifier of the field name appending to the identifier resolved from its 
03697                  * qualifying member with a dot in between.
03698                  */
03699                 public final JsFunction.Member<java.lang.Number> getDate            = new JsFunction.Member<java.lang.Number>(this, Members.getDate           );
03700                 /**
03701                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03702                  * name of this field, qualified by the current member instance of the field, and 
03703                  * to access the property of the name on an object.</p>
03704                  * @since 1.0
03705                  * @see JsDate#getUTCDate()
03706                  * @javascript Re-compilers must resolve the member of this instance field to the 
03707                  * identifier of the field name appending to the identifier resolved from its 
03708                  * qualifying member with a dot in between.
03709                  */
03710                 public final JsFunction.Member<java.lang.Number> getUTCDate         = new JsFunction.Member<java.lang.Number>(this, Members.getUTCDate        );
03711                 /**
03712                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03713                  * name of this field, qualified by the current member instance of the field, and 
03714                  * to access the property of the name on an object.</p>
03715                  * @since 1.0
03716                  * @see JsDate#getDay()
03717                  * @javascript Re-compilers must resolve the member of this instance field to the 
03718                  * identifier of the field name appending to the identifier resolved from its 
03719                  * qualifying member with a dot in between.
03720                  */
03721                 public final JsFunction.Member<java.lang.Number> getDay             = new JsFunction.Member<java.lang.Number>(this, Members.getDay            );
03722                 /**
03723                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03724                  * name of this field, qualified by the current member instance of the field, and 
03725                  * to access the property of the name on an object.</p>
03726                  * @since 1.0
03727                  * @see JsDate#getUTCDay()
03728                  * @javascript Re-compilers must resolve the member of this instance field to the 
03729                  * identifier of the field name appending to the identifier resolved from its 
03730                  * qualifying member with a dot in between.
03731                  */
03732                 public final JsFunction.Member<java.lang.Number> getUTCDay          = new JsFunction.Member<java.lang.Number>(this, Members.getUTCDay         );
03733                 /**
03734                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03735                  * name of this field, qualified by the current member instance of the field, and 
03736                  * to access the property of the name on an object.</p>
03737                  * @since 1.0
03738                  * @see JsDate#getHours()
03739                  * @javascript Re-compilers must resolve the member of this instance field to the 
03740                  * identifier of the field name appending to the identifier resolved from its 
03741                  * qualifying member with a dot in between.
03742                  */
03743                 public final JsFunction.Member<java.lang.Number> getHours           = new JsFunction.Member<java.lang.Number>(this, Members.getHours          );
03744                 /**
03745                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03746                  * name of this field, qualified by the current member instance of the field, and 
03747                  * to access the property of the name on an object.</p>
03748                  * @since 1.0
03749                  * @see JsDate#getUTCHours()
03750                  * @javascript Re-compilers must resolve the member of this instance field to the 
03751                  * identifier of the field name appending to the identifier resolved from its 
03752                  * qualifying member with a dot in between.
03753                  */
03754                 public final JsFunction.Member<java.lang.Number> getUTCHours        = new JsFunction.Member<java.lang.Number>(this, Members.getUTCHours       );
03755                 /**
03756                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03757                  * name of this field, qualified by the current member instance of the field, and 
03758                  * to access the property of the name on an object.</p>
03759                  * @since 1.0
03760                  * @see JsDate#getMinutes()
03761                  * @javascript Re-compilers must resolve the member of this instance field to the 
03762                  * identifier of the field name appending to the identifier resolved from its 
03763                  * qualifying member with a dot in between.
03764                  */
03765                 public final JsFunction.Member<java.lang.Number> getMinutes         = new JsFunction.Member<java.lang.Number>(this, Members.getMinutes        );
03766                 /**
03767                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03768                  * name of this field, qualified by the current member instance of the field, and 
03769                  * to access the property of the name on an object.</p>
03770                  * @since 1.0
03771                  * @see JsDate#getUTCMinutes()
03772                  * @javascript Re-compilers must resolve the member of this instance field to the 
03773                  * identifier of the field name appending to the identifier resolved from its 
03774                  * qualifying member with a dot in between.
03775                  */
03776                 public final JsFunction.Member<java.lang.Number> getUTCMinutes      = new JsFunction.Member<java.lang.Number>(this, Members.getUTCMinutes     );
03777                 /**
03778                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03779                  * name of this field, qualified by the current member instance of the field, and 
03780                  * to access the property of the name on an object.</p>
03781                  * @since 1.0
03782                  * @see JsDate#getSeconds()
03783                  * @javascript Re-compilers must resolve the member of this instance field to the 
03784                  * identifier of the field name appending to the identifier resolved from its 
03785                  * qualifying member with a dot in between.
03786                  */
03787                 public final JsFunction.Member<java.lang.Number> getSeconds         = new JsFunction.Member<java.lang.Number>(this, Members.getSeconds        );
03788                 /**
03789                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03790                  * name of this field, qualified by the current member instance of the field, and 
03791                  * to access the property of the name on an object.</p>
03792                  * @since 1.0
03793                  * @see JsDate#getUTCSeconds()
03794                  * @javascript Re-compilers must resolve the member of this instance field to the 
03795                  * identifier of the field name appending to the identifier resolved from its 
03796                  * qualifying member with a dot in between.
03797                  */
03798                 public final JsFunction.Member<java.lang.Number> getUTCSeconds      = new JsFunction.Member<java.lang.Number>(this, Members.getUTCSeconds     );
03799                 /**
03800                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03801                  * name of this field, qualified by the current member instance of the field, and 
03802                  * to access the property of the name on an object.</p>
03803                  * @since 1.0
03804                  * @see JsDate#getMilliseconds()
03805                  * @javascript Re-compilers must resolve the member of this instance field to the 
03806                  * identifier of the field name appending to the identifier resolved from its 
03807                  * qualifying member with a dot in between.
03808                  */
03809                 public final JsFunction.Member<java.lang.Number> getMilliseconds    = new JsFunction.Member<java.lang.Number>(this, Members.getMilliseconds   );
03810                 /**
03811                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03812                  * name of this field, qualified by the current member instance of the field, and 
03813                  * to access the property of the name on an object.</p>
03814                  * @since 1.0
03815                  * @see JsDate#getUTCMilliseconds()
03816                  * @javascript Re-compilers must resolve the member of this instance field to the 
03817                  * identifier of the field name appending to the identifier resolved from its 
03818                  * qualifying member with a dot in between.
03819                  */
03820                 public final JsFunction.Member<java.lang.Number> getUTCMilliseconds = new JsFunction.Member<java.lang.Number>(this, Members.getUTCMilliseconds);
03821                 /**
03822                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03823                  * name of this field, qualified by the current member instance of the field, and 
03824                  * to access the property of the name on an object.</p>
03825                  * @since 1.0
03826                  * @see JsDate#getTimezoneOffset()
03827                  * @javascript Re-compilers must resolve the member of this instance field to the 
03828                  * identifier of the field name appending to the identifier resolved from its 
03829                  * qualifying member with a dot in between.
03830                  */
03831                 public final JsFunction.Member<java.lang.Number> getTimezoneOffset  = new JsFunction.Member<java.lang.Number>(this, Members.getTimezoneOffset );
03832                 /**
03833                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03834                  * name of this field, qualified by the current member instance of the field, and 
03835                  * to access the property of the name on an object.</p>
03836                  * @since 1.0
03837                  * @see JsDate#setTime(Object)
03838                  * @javascript Re-compilers must resolve the member of this instance field to the 
03839                  * identifier of the field name appending to the identifier resolved from its 
03840                  * qualifying member with a dot in between.
03841                  */
03842                 public final JsFunction.Member<java.lang.Number> setTime            = new JsFunction.Member<java.lang.Number>(this, Members.setTime           );
03843                 /**
03844                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03845                  * name of this field, qualified by the current member instance of the field, and 
03846                  * to access the property of the name on an object.</p>
03847                  * @since 1.0
03848                  * @see JsDate#setMilliseconds(Object)
03849                  * @javascript Re-compilers must resolve the member of this instance field to the 
03850                  * identifier of the field name appending to the identifier resolved from its 
03851                  * qualifying member with a dot in between.
03852                  */
03853                 public final JsFunction.Member<java.lang.Number> setMilliseconds    = new JsFunction.Member<java.lang.Number>(this, Members.setMilliseconds   );
03854                 /**
03855                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03856                  * name of this field, qualified by the current member instance of the field, and 
03857                  * to access the property of the name on an object.</p>
03858                  * @since 1.0
03859                  * @see JsDate#setUTCMilliseconds(Object)
03860                  * @javascript Re-compilers must resolve the member of this instance field to the 
03861                  * identifier of the field name appending to the identifier resolved from its 
03862                  * qualifying member with a dot in between.
03863                  */
03864                 public final JsFunction.Member<java.lang.Number> setUTCMilliseconds = new JsFunction.Member<java.lang.Number>(this, Members.setUTCMilliseconds);
03865                 /**
03866                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03867                  * name of this field, qualified by the current member instance of the field, and 
03868                  * to access the property of the name on an object.</p>
03869                  * @since 1.0
03870                  * @see JsDate#setSeconds(Object)
03871                  * @see JsDate#setSeconds(Object, Object)
03872                  * @javascript Re-compilers must resolve the member of this instance field to the 
03873                  * identifier of the field name appending to the identifier resolved from its 
03874                  * qualifying member with a dot in between.
03875                  */
03876                 public final JsFunction.Member<java.lang.Number> setSeconds         = new JsFunction.Member<java.lang.Number>(this, Members.setSeconds        );
03877                 /**
03878                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03879                  * name of this field, qualified by the current member instance of the field, and 
03880                  * to access the property of the name on an object.</p>
03881                  * @since 1.0
03882                  * @see JsDate#setUTCSeconds(Object)
03883                  * @see JsDate#setUTCSeconds(Object, Object)
03884                  * @javascript Re-compilers must resolve the member of this instance field to the 
03885                  * identifier of the field name appending to the identifier resolved from its 
03886                  * qualifying member with a dot in between.
03887                  */
03888                 public final JsFunction.Member<java.lang.Number> setUTCSeconds      = new JsFunction.Member<java.lang.Number>(this, Members.setUTCSeconds     );
03889                 /**
03890                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03891                  * name of this field, qualified by the current member instance of the field, and 
03892                  * to access the property of the name on an object.</p>
03893                  * @since 1.0
03894                  * @see JsDate#setMinutes(Object)
03895                  * @see JsDate#setMinutes(Object, Object)
03896                  * @see JsDate#setMinutes(Object, Object, Object)
03897                  * @javascript Re-compilers must resolve the member of this instance field to the 
03898                  * identifier of the field name appending to the identifier resolved from its 
03899                  * qualifying member with a dot in between.
03900                  */
03901                 public final JsFunction.Member<java.lang.Number> setMinutes         = new JsFunction.Member<java.lang.Number>(this, Members.setMinutes        );
03902                 /**
03903                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03904                  * name of this field, qualified by the current member instance of the field, and 
03905                  * to access the property of the name on an object.</p>
03906                  * @since 1.0
03907                  * @see JsDate#setUTCMinutes(Object)
03908                  * @see JsDate#setUTCMinutes(Object, Object)
03909                  * @see JsDate#setUTCMinutes(Object, Object, Object)
03910                  * @javascript Re-compilers must resolve the member of this instance field to the 
03911                  * identifier of the field name appending to the identifier resolved from its 
03912                  * qualifying member with a dot in between.
03913                  */
03914                 public final JsFunction.Member<java.lang.Number> setUTCMinutes      = new JsFunction.Member<java.lang.Number>(this, Members.setUTCMinutes     );
03915                 /**
03916                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03917                  * name of this field, qualified by the current member instance of the field, and 
03918                  * to access the property of the name on an object.</p>
03919                  * @since 1.0
03920                  * @see JsDate#setHours(Object)
03921                  * @see JsDate#setHours(Object, Object)
03922                  * @see JsDate#setHours(Object, Object, Object)
03923                  * @see JsDate#setHours(Object, Object, Object, Object)
03924                  * @javascript Re-compilers must resolve the member of this instance field to the 
03925                  * identifier of the field name appending to the identifier resolved from its 
03926                  * qualifying member with a dot in between.
03927                  */
03928                 public final JsFunction.Member<java.lang.Number> setHours           = new JsFunction.Member<java.lang.Number>(this, Members.setHours          );
03929                 /**
03930                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03931                  * name of this field, qualified by the current member instance of the field, and 
03932                  * to access the property of the name on an object.</p>
03933                  * @since 1.0
03934                  * @see JsDate#setUTCHours(Object)
03935                  * @see JsDate#setUTCHours(Object, Object)
03936                  * @see JsDate#setUTCHours(Object, Object, Object)
03937                  * @see JsDate#setUTCHours(Object, Object, Object, Object)
03938                  * @javascript Re-compilers must resolve the member of this instance field to the 
03939                  * identifier of the field name appending to the identifier resolved from its 
03940                  * qualifying member with a dot in between.
03941                  */
03942                 public final JsFunction.Member<java.lang.Number> setUTCHours        = new JsFunction.Member<java.lang.Number>(this, Members.setUTCHours       );
03943                 /**
03944                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03945                  * name of this field, qualified by the current member instance of the field, and 
03946                  * to access the property of the name on an object.</p>
03947                  * @since 1.0
03948                  * @see JsDate#setDate(Object)
03949                  * @javascript Re-compilers must resolve the member of this instance field to the 
03950                  * identifier of the field name appending to the identifier resolved from its 
03951                  * qualifying member with a dot in between.
03952                  */
03953                 public final JsFunction.Member<java.lang.Number> setDate            = new JsFunction.Member<java.lang.Number>(this, Members.setDate           );
03954                 /**
03955                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03956                  * name of this field, qualified by the current member instance of the field, and 
03957                  * to access the property of the name on an object.</p>
03958                  * @since 1.0
03959                  * @see JsDate#setUTCDate(Object)
03960                  * @javascript Re-compilers must resolve the member of this instance field to the 
03961                  * identifier of the field name appending to the identifier resolved from its 
03962                  * qualifying member with a dot in between.
03963                  */
03964                 public final JsFunction.Member<java.lang.Number> setUTCDate         = new JsFunction.Member<java.lang.Number>(this, Members.setUTCDate        );
03965                 /**
03966                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03967                  * name of this field, qualified by the current member instance of the field, and 
03968                  * to access the property of the name on an object.</p>
03969                  * @since 1.0
03970                  * @see JsDate#setMonth(Object)
03971                  * @see JsDate#setMonth(Object, Object)
03972                  * @javascript Re-compilers must resolve the member of this instance field to the 
03973                  * identifier of the field name appending to the identifier resolved from its 
03974                  * qualifying member with a dot in between.
03975                  */
03976                 public final JsFunction.Member<java.lang.Number> setMonth           = new JsFunction.Member<java.lang.Number>(this, Members.setMonth          );
03977                 /**
03978                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03979                  * name of this field, qualified by the current member instance of the field, and 
03980                  * to access the property of the name on an object.</p>
03981                  * @since 1.0
03982                  * @see JsDate#setUTCMonth(Object)
03983                  * @see JsDate#setUTCMonth(Object, Object)
03984                  * @javascript Re-compilers must resolve the member of this instance field to the 
03985                  * identifier of the field name appending to the identifier resolved from its 
03986                  * qualifying member with a dot in between.
03987                  */
03988                 public final JsFunction.Member<java.lang.Number> setUTCMonth        = new JsFunction.Member<java.lang.Number>(this, Members.setUTCMonth       );
03989                 /**
03990                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
03991                  * name of this field, qualified by the current member instance of the field, and 
03992                  * to access the property of the name on an object.</p>
03993                  * @since 1.0
03994                  * @see JsDate#setFullYear(Object)
03995                  * @see JsDate#setFullYear(Object, Object)
03996                  * @see JsDate#setFullYear(Object, Object, Object)
03997                  * @javascript Re-compilers must resolve the member of this instance field to the 
03998                  * identifier of the field name appending to the identifier resolved from its 
03999                  * qualifying member with a dot in between.
04000                  */
04001                 public final JsFunction.Member<java.lang.Number> setFullYear        = new JsFunction.Member<java.lang.Number>(this, Members.setFullYear       );
04002                 /**
04003                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04004                  * name of this field, qualified by the current member instance of the field, and 
04005                  * to access the property of the name on an object.</p>
04006                  * @since 1.0
04007                  * @see JsDate#setUTCFullYear(Object)
04008                  * @see JsDate#setUTCFullYear(Object, Object)
04009                  * @see JsDate#setUTCFullYear(Object, Object, Object)
04010                  * @javascript Re-compilers must resolve the member of this instance field to the 
04011                  * identifier of the field name appending to the identifier resolved from its 
04012                  * qualifying member with a dot in between.
04013                  */
04014                 public final JsFunction.Member<java.lang.Number> setUTCFullYear     = new JsFunction.Member<java.lang.Number>(this, Members.setUTCFullYear    );
04015                 /**
04016                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04017                  * name of this field, qualified by the current member instance of the field, and 
04018                  * to access the property of the name on an object.</p>
04019                  * @since 1.0
04020                  * @see JsDate#toDateString()
04021                  * @javascript Re-compilers must resolve the member of this instance field to the 
04022                  * identifier of the field name appending to the identifier resolved from its 
04023                  * qualifying member with a dot in between.
04024                  */
04025                 public final JsFunction.Member<java.lang.String> toDateString       = new JsFunction.Member<java.lang.String>(this, Members.toDateString      );
04026                 /**
04027                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04028                  * name of this field, qualified by the current member instance of the field, and 
04029                  * to access the property of the name on an object.</p>
04030                  * @since 1.0
04031                  * @see JsDate#toTimeString()
04032                  * @javascript Re-compilers must resolve the member of this instance field to the 
04033                  * identifier of the field name appending to the identifier resolved from its 
04034                  * qualifying member with a dot in between.
04035                  */
04036                 public final JsFunction.Member<java.lang.String> toTimeString       = new JsFunction.Member<java.lang.String>(this, Members.toTimeString      );
04037                 /**
04038                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04039                  * name of this field, qualified by the current member instance of the field, and 
04040                  * to access the property of the name on an object.</p>
04041                  * @since 1.0
04042                  * @see JsDate#toLocaleDateString()
04043                  * @javascript Re-compilers must resolve the member of this instance field to the 
04044                  * identifier of the field name appending to the identifier resolved from its 
04045                  * qualifying member with a dot in between.
04046                  */
04047                 public final JsFunction.Member<java.lang.String> toLocaleDateString = new JsFunction.Member<java.lang.String>(this, Members.toLocaleDateString);
04048                 /**
04049                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04050                  * name of this field, qualified by the current member instance of the field, and 
04051                  * to access the property of the name on an object.</p>
04052                  * @since 1.0
04053                  * @see JsDate#toLocaleTimeString()
04054                  * @javascript Re-compilers must resolve the member of this instance field to the 
04055                  * identifier of the field name appending to the identifier resolved from its 
04056                  * qualifying member with a dot in between.
04057                  */
04058                 public final JsFunction.Member<java.lang.String> toLocaleString     = new JsFunction.Member<java.lang.String>(this, Members.toLocaleString    );
04059                 /**
04060                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04061                  * name of this field, qualified by the current member instance of the field, and 
04062                  * to access the property of the name on an object.</p>
04063                  * @since 1.0
04064                  * @see JsDate#toUTCString()
04065                  * @javascript Re-compilers must resolve the member of this instance field to the 
04066                  * identifier of the field name appending to the identifier resolved from its 
04067                  * qualifying member with a dot in between.
04068                  */
04069                 public final JsFunction.Member<java.lang.String> toLocaleTimeString = new JsFunction.Member<java.lang.String>(this, Members.toLocaleTimeString);
04070                 /**
04071                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04072                  * name of this field, qualified by the current member instance of the field, and 
04073                  * to access the property of the name on an object.</p>
04074                  * @since 1.0
04075                  * @javascript Re-compilers must resolve the member of this instance field to the 
04076                  * identifier of the field name appending to the identifier resolved from its 
04077                  * qualifying member with a dot in between.
04078                  */
04079                 public final JsFunction.Member<java.lang.String> toUTCString        = new JsFunction.Member<java.lang.String>(this, Members.toUTCString       );
04080             }
04081 
04082             /**
04083              * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
04084              * with the wrapping constructor.</p>
04085              * @param var The argument of an <b>opaque</b> object.
04086              * @since 1.0
04087              * @javascript Re-compilers must ignore the construction operation of this constructor, 
04088              * that is, replacing it with its only argument.
04089              */
04090             public Prototype(JsObject var) {
04091                 super(var);
04092             }
04093 
04094             /**
04095              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04096              * without a qualifying member and to access the property of the name on an object.</p>
04097              * @since 1.0
04098              * @see JsDate#valueOf()
04099              * @javascript Re-compilers must resolve the member of this static field to the 
04100              * identifier of the field name.
04101              */
04102             public static final JsFunction.Member<java.lang.Number> valueOf            = new JsFunction.Member<java.lang.Number>(Members.valueOf           );
04103             /**
04104              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04105              * without a qualifying member and to access the property of the name on an object.</p>
04106              * @since 1.0
04107              * @see JsDate#getTime()
04108              * @javascript Re-compilers must resolve the member of this static field to the 
04109              * identifier of the field name.
04110              */
04111             public static final JsFunction.Member<java.lang.Number> getTime            = new JsFunction.Member<java.lang.Number>(Members.getTime           );
04112             /**
04113              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04114              * without a qualifying member and to access the property of the name on an object.</p>
04115              * @since 1.0
04116              * @see JsDate#getFullYear()
04117              * @javascript Re-compilers must resolve the member of this static field to the 
04118              * identifier of the field name.
04119              */
04120             public static final JsFunction.Member<java.lang.Number> getFullYear        = new JsFunction.Member<java.lang.Number>(Members.getFullYear       );
04121             /**
04122              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04123              * without a qualifying member and to access the property of the name on an object.</p>
04124              * @since 1.0
04125              * @see JsDate#getUTCFullYear()
04126              * @javascript Re-compilers must resolve the member of this static field to the 
04127              * identifier of the field name.
04128              */
04129             public static final JsFunction.Member<java.lang.Number> getUTCFullYear     = new JsFunction.Member<java.lang.Number>(Members.getUTCFullYear    );
04130             /**
04131              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04132              * without a qualifying member and to access the property of the name on an object.</p>
04133              * @since 1.0
04134              * @see JsDate#getMonth()
04135              * @javascript Re-compilers must resolve the member of this static field to the 
04136              * identifier of the field name.
04137              */
04138             public static final JsFunction.Member<java.lang.Number> getMonth           = new JsFunction.Member<java.lang.Number>(Members.getMonth          );
04139             /**
04140              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04141              * without a qualifying member and to access the property of the name on an object.</p>
04142              * @since 1.0
04143              * @see JsDate#getUTCMonth()
04144              * @javascript Re-compilers must resolve the member of this static field to the 
04145              * identifier of the field name.
04146              */
04147             public static final JsFunction.Member<java.lang.Number> getUTCMonth        = new JsFunction.Member<java.lang.Number>(Members.getUTCMonth       );
04148             /**
04149              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04150              * without a qualifying member and to access the property of the name on an object.</p>
04151              * @since 1.0
04152              * @see JsDate#getDate()
04153              * @javascript Re-compilers must resolve the member of this static field to the 
04154              * identifier of the field name.
04155              */
04156             public static final JsFunction.Member<java.lang.Number> getDate            = new JsFunction.Member<java.lang.Number>(Members.getDate           );
04157             /**
04158              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04159              * without a qualifying member and to access the property of the name on an object.</p>
04160              * @since 1.0
04161              * @see JsDate#getUTCDate()
04162              * @javascript Re-compilers must resolve the member of this static field to the 
04163              * identifier of the field name.
04164              */
04165             public static final JsFunction.Member<java.lang.Number> getUTCDate         = new JsFunction.Member<java.lang.Number>(Members.getUTCDate        );
04166             /**
04167              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04168              * without a qualifying member and to access the property of the name on an object.</p>
04169              * @since 1.0
04170              * @see JsDate#getDay()
04171              * @javascript Re-compilers must resolve the member of this static field to the 
04172              * identifier of the field name.
04173              */
04174             public static final JsFunction.Member<java.lang.Number> getDay             = new JsFunction.Member<java.lang.Number>(Members.getDay            );
04175             /**
04176              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04177              * without a qualifying member and to access the property of the name on an object.</p>
04178              * @since 1.0
04179              * @see JsDate#getUTCDay()
04180              * @javascript Re-compilers must resolve the member of this static field to the 
04181              * identifier of the field name.
04182              */
04183             public static final JsFunction.Member<java.lang.Number> getUTCDay          = new JsFunction.Member<java.lang.Number>(Members.getUTCDay         );
04184             /**
04185              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04186              * without a qualifying member and to access the property of the name on an object.</p>
04187              * @since 1.0
04188              * @see JsDate#getHours()
04189              * @javascript Re-compilers must resolve the member of this static field to the 
04190              * identifier of the field name.
04191              */
04192             public static final JsFunction.Member<java.lang.Number> getHours           = new JsFunction.Member<java.lang.Number>(Members.getHours          );
04193             /**
04194              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04195              * without a qualifying member and to access the property of the name on an object.</p>
04196              * @since 1.0
04197              * @see JsDate#getUTCHours()
04198              * @javascript Re-compilers must resolve the member of this static field to the 
04199              * identifier of the field name.
04200              */
04201             public static final JsFunction.Member<java.lang.Number> getUTCHours        = new JsFunction.Member<java.lang.Number>(Members.getUTCHours       );
04202             /**
04203              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04204              * without a qualifying member and to access the property of the name on an object.</p>
04205              * @since 1.0
04206              * @see JsDate#getMinutes()
04207              * @javascript Re-compilers must resolve the member of this static field to the 
04208              * identifier of the field name.
04209              */
04210             public static final JsFunction.Member<java.lang.Number> getMinutes         = new JsFunction.Member<java.lang.Number>(Members.getMinutes        );
04211             /**
04212              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04213              * without a qualifying member and to access the property of the name on an object.</p>
04214              * @since 1.0
04215              * @see JsDate#getUTCMinutes()
04216              * @javascript Re-compilers must resolve the member of this static field to the 
04217              * identifier of the field name.
04218              */
04219             public static final JsFunction.Member<java.lang.Number> getUTCMinutes      = new JsFunction.Member<java.lang.Number>(Members.getUTCMinutes     );
04220             /**
04221              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04222              * without a qualifying member and to access the property of the name on an object.</p>
04223              * @since 1.0
04224              * @see JsDate#getSeconds()
04225              * @javascript Re-compilers must resolve the member of this static field to the 
04226              * identifier of the field name.
04227              */
04228             public static final JsFunction.Member<java.lang.Number> getSeconds         = new JsFunction.Member<java.lang.Number>(Members.getSeconds        );
04229             /**
04230              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04231              * without a qualifying member and to access the property of the name on an object.</p>
04232              * @since 1.0
04233              * @see JsDate#getUTCSeconds()
04234              * @javascript Re-compilers must resolve the member of this static field to the 
04235              * identifier of the field name.
04236              */
04237             public static final JsFunction.Member<java.lang.Number> getUTCSeconds      = new JsFunction.Member<java.lang.Number>(Members.getUTCSeconds     );
04238             /**
04239              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04240              * without a qualifying member and to access the property of the name on an object.</p>
04241              * @since 1.0
04242              * @see JsDate#getMilliseconds()
04243              * @javascript Re-compilers must resolve the member of this static field to the 
04244              * identifier of the field name.
04245              */
04246             public static final JsFunction.Member<java.lang.Number> getMilliseconds    = new JsFunction.Member<java.lang.Number>(Members.getMilliseconds   );
04247             /**
04248              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04249              * without a qualifying member and to access the property of the name on an object.</p>
04250              * @since 1.0
04251              * @see JsDate#getUTCMilliseconds()
04252              * @javascript Re-compilers must resolve the member of this static field to the 
04253              * identifier of the field name.
04254              */
04255             public static final JsFunction.Member<java.lang.Number> getUTCMilliseconds = new JsFunction.Member<java.lang.Number>(Members.getUTCMilliseconds);
04256             /**
04257              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04258              * without a qualifying member and to access the property of the name on an object.</p>
04259              * @since 1.0
04260              * @see JsDate#getTimezoneOffset()
04261              * @javascript Re-compilers must resolve the member of this static field to the 
04262              * identifier of the field name.
04263              */
04264             public static final JsFunction.Member<java.lang.Number> getTimezoneOffset  = new JsFunction.Member<java.lang.Number>(Members.getTimezoneOffset );
04265             /**
04266              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04267              * without a qualifying member and to access the property of the name on an object.</p>
04268              * @since 1.0
04269              * @see JsDate#setTime(Object)
04270              * @javascript Re-compilers must resolve the member of this static field to the 
04271              * identifier of the field name.
04272              */
04273             public static final JsFunction.Member<java.lang.Number> setTime            = new JsFunction.Member<java.lang.Number>(Members.setTime           );
04274             /**
04275              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04276              * without a qualifying member and to access the property of the name on an object.</p>
04277              * @since 1.0
04278              * @see JsDate#setMilliseconds(Object)
04279              * @javascript Re-compilers must resolve the member of this static field to the 
04280              * identifier of the field name.
04281              */
04282             public static final JsFunction.Member<java.lang.Number> setMilliseconds    = new JsFunction.Member<java.lang.Number>(Members.setMilliseconds   );
04283             /**
04284              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04285              * without a qualifying member and to access the property of the name on an object.</p>
04286              * @since 1.0
04287              * @see JsDate#setUTCMilliseconds(Object)
04288              * @javascript Re-compilers must resolve the member of this static field to the 
04289              * identifier of the field name.
04290              */
04291             public static final JsFunction.Member<java.lang.Number> setUTCMilliseconds = new JsFunction.Member<java.lang.Number>(Members.setUTCMilliseconds);
04292             /**
04293              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04294              * without a qualifying member and to access the property of the name on an object.</p>
04295              * @since 1.0
04296              * @see JsDate#setSeconds(Object)
04297              * @see JsDate#setSeconds(Object, Object)
04298              * @javascript Re-compilers must resolve the member of this static field to the 
04299              * identifier of the field name.
04300              */
04301             public static final JsFunction.Member<java.lang.Number> setSeconds         = new JsFunction.Member<java.lang.Number>(Members.setSeconds        );
04302             /**
04303              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04304              * without a qualifying member and to access the property of the name on an object.</p>
04305              * @since 1.0
04306              * @see JsDate#setUTCSeconds(Object)
04307              * @see JsDate#setUTCSeconds(Object, Object)
04308              * @javascript Re-compilers must resolve the member of this static field to the 
04309              * identifier of the field name.
04310              */
04311             public static final JsFunction.Member<java.lang.Number> setUTCSeconds      = new JsFunction.Member<java.lang.Number>(Members.setUTCSeconds     );
04312             /**
04313              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04314              * without a qualifying member and to access the property of the name on an object.</p>
04315              * @since 1.0
04316              * @see JsDate#setMinutes(Object)
04317              * @see JsDate#setMinutes(Object, Object)
04318              * @see JsDate#setMinutes(Object, Object, Object)
04319              * @javascript Re-compilers must resolve the member of this static field to the 
04320              * identifier of the field name.
04321              */
04322             public static final JsFunction.Member<java.lang.Number> setMinutes         = new JsFunction.Member<java.lang.Number>(Members.setMinutes        );
04323             /**
04324              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04325              * without a qualifying member and to access the property of the name on an object.</p>
04326              * @since 1.0
04327              * @see JsDate#setUTCMinutes(Object)
04328              * @see JsDate#setUTCMinutes(Object, Object)
04329              * @see JsDate#setUTCMinutes(Object, Object, Object)
04330              * @javascript Re-compilers must resolve the member of this static field to the 
04331              * identifier of the field name.
04332              */
04333             public static final JsFunction.Member<java.lang.Number> setUTCMinutes      = new JsFunction.Member<java.lang.Number>(Members.setUTCMinutes     );
04334             /**
04335              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04336              * without a qualifying member and to access the property of the name on an object.</p>
04337              * @since 1.0
04338              * @see JsDate#setHours(Object)
04339              * @see JsDate#setHours(Object, Object)
04340              * @see JsDate#setHours(Object, Object, Object)
04341              * @see JsDate#setHours(Object, Object, Object, Object)
04342              * @javascript Re-compilers must resolve the member of this static field to the 
04343              * identifier of the field name.
04344              */
04345             public static final JsFunction.Member<java.lang.Number> setHours           = new JsFunction.Member<java.lang.Number>(Members.setHours          );
04346             /**
04347              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04348              * without a qualifying member and to access the property of the name on an object.</p>
04349              * @since 1.0
04350              * @see JsDate#setUTCHours(Object)
04351              * @see JsDate#setUTCHours(Object, Object)
04352              * @see JsDate#setUTCHours(Object, Object, Object)
04353              * @see JsDate#setUTCHours(Object, Object, Object, Object)
04354              * @javascript Re-compilers must resolve the member of this static field to the 
04355              * identifier of the field name.
04356              */
04357             public static final JsFunction.Member<java.lang.Number> setUTCHours        = new JsFunction.Member<java.lang.Number>(Members.setUTCHours       );
04358             /**
04359              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04360              * without a qualifying member and to access the property of the name on an object.</p>
04361              * @since 1.0
04362              * @see JsDate#setDate(Object)
04363              * @javascript Re-compilers must resolve the member of this static field to the 
04364              * identifier of the field name.
04365              */
04366             public static final JsFunction.Member<java.lang.Number> setDate            = new JsFunction.Member<java.lang.Number>(Members.setDate           );
04367             /**
04368              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04369              * without a qualifying member and to access the property of the name on an object.</p>
04370              * @since 1.0
04371              * @see JsDate#setUTCDate(Object)
04372              * @javascript Re-compilers must resolve the member of this static field to the 
04373              * identifier of the field name.
04374              */
04375             public static final JsFunction.Member<java.lang.Number> setUTCDate         = new JsFunction.Member<java.lang.Number>(Members.setUTCDate        );
04376             /**
04377              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04378              * without a qualifying member and to access the property of the name on an object.</p>
04379              * @since 1.0
04380              * @see JsDate#setMonth(Object)
04381              * @see JsDate#setMonth(Object, Object)
04382              * @javascript Re-compilers must resolve the member of this static field to the 
04383              * identifier of the field name.
04384              */
04385             public static final JsFunction.Member<java.lang.Number> setMonth           = new JsFunction.Member<java.lang.Number>(Members.setMonth          );
04386             /**
04387              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04388              * without a qualifying member and to access the property of the name on an object.</p>
04389              * @since 1.0
04390              * @see JsDate#setUTCMonth(Object)
04391              * @see JsDate#setUTCMonth(Object, Object)
04392              * @javascript Re-compilers must resolve the member of this static field to the 
04393              * identifier of the field name.
04394              */
04395             public static final JsFunction.Member<java.lang.Number> setUTCMonth        = new JsFunction.Member<java.lang.Number>(Members.setUTCMonth       );
04396             /**
04397              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04398              * without a qualifying member and to access the property of the name on an object.</p>
04399              * @since 1.0
04400              * @see JsDate#setFullYear(Object)
04401              * @see JsDate#setFullYear(Object, Object)
04402              * @see JsDate#setFullYear(Object, Object, Object)
04403              * @javascript Re-compilers must resolve the member of this static field to the 
04404              * identifier of the field name.
04405              */
04406             public static final JsFunction.Member<java.lang.Number> setFullYear        = new JsFunction.Member<java.lang.Number>(Members.setFullYear       );
04407             /**
04408              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04409              * without a qualifying member and to access the property of the name on an object.</p>
04410              * @since 1.0
04411              * @see JsDate#setUTCFullYear(Object)
04412              * @see JsDate#setUTCFullYear(Object, Object)
04413              * @see JsDate#setUTCFullYear(Object, Object, Object)
04414              * @javascript Re-compilers must resolve the member of this static field to the 
04415              * identifier of the field name.
04416              */
04417             public static final JsFunction.Member<java.lang.Number> setUTCFullYear     = new JsFunction.Member<java.lang.Number>(Members.setUTCFullYear    );
04418             /**
04419              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04420              * without a qualifying member and to access the property of the name on an object.</p>
04421              * @since 1.0
04422              * @see JsDate#toDateString()
04423              * @javascript Re-compilers must resolve the member of this static field to the 
04424              * identifier of the field name.
04425              */
04426             public static final JsFunction.Member<java.lang.String> toDateString       = new JsFunction.Member<java.lang.String>(Members.toDateString      );
04427             /**
04428              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04429              * without a qualifying member and to access the property of the name on an object.</p>
04430              * @since 1.0
04431              * @see JsDate#toTimeString()
04432              * @javascript Re-compilers must resolve the member of this static field to the 
04433              * identifier of the field name.
04434              */
04435             public static final JsFunction.Member<java.lang.String> toTimeString       = new JsFunction.Member<java.lang.String>(Members.toTimeString      );
04436             /**
04437              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04438              * without a qualifying member and to access the property of the name on an object.</p>
04439              * @since 1.0
04440              * @see JsDate#toLocaleDateString()
04441              * @javascript Re-compilers must resolve the member of this static field to the 
04442              * identifier of the field name.
04443              */
04444             public static final JsFunction.Member<java.lang.String> toLocaleDateString = new JsFunction.Member<java.lang.String>(Members.toLocaleDateString);
04445             /**
04446              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04447              * without a qualifying member and to access the property of the name on an object.</p>
04448              * @since 1.0
04449              * @see JsDate#toLocaleString()
04450              * @javascript Re-compilers must resolve the member of this static field to the 
04451              * identifier of the field name.
04452              */
04453             public static final JsFunction.Member<java.lang.String> toLocaleString     = new JsFunction.Member<java.lang.String>(Members.toLocaleString    );
04454             /**
04455              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04456              * without a qualifying member and to access the property of the name on an object.</p>
04457              * @since 1.0
04458              * @see JsDate#toLocaleTimeString()
04459              * @javascript Re-compilers must resolve the member of this static field to the 
04460              * identifier of the field name.
04461              */
04462             public static final JsFunction.Member<java.lang.String> toLocaleTimeString = new JsFunction.Member<java.lang.String>(Members.toLocaleTimeString);
04463             /**
04464              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04465              * without a qualifying member and to access the property of the name on an object.</p>
04466              * @since 1.0
04467              * @see JsDate#toUTCString()
04468              * @javascript Re-compilers must resolve the member of this static field to the 
04469              * identifier of the field name.
04470              */
04471             public static final JsFunction.Member<java.lang.String> toUTCString        = new JsFunction.Member<java.lang.String>(Members.toUTCString       );
04472         }
04473     }
04474 
04475     /**
04476      * <p>An <b>opaque</b> class representing the global Function class of JavaScript.</p>
04477      *
04478      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
04479      * 
04480      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
04481      * generated into the target codes. Re-compilers must exit with error on the operations of 
04482      * accessing that kind of class objects.
04483      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
04484      * and <tt>instanceof</tt> to it always <tt>true</tt>.
04485      */
04486     public static class Function<T> extends JsFunction<JsFunction<T>>
04487     {
04488         public static class Member<T> extends JsFunction.Member<JsFunction<T>>
04489         {
04490             private Member(JsObject.Member q, Mid mid) {
04491                 super(q, mid);
04492             }
04493             private Member(Mid mid) {
04494                 super(mid);
04495             }
04496             /**
04497              * <p>Evaluates the property, represented by the current member instance, of the 
04498              * argument object.</p>
04499              * @param o The argument object
04500              * @return The value of the current member based on the object argument.
04501              * @since 1.0
04502              * @javascript Re-compilers must convert the instance invocation of this method into 
04503              * the JavaScript expression: 
04504              * <pre>o.m</pre>
04505              * where <tt>m</tt> is the identifier name resolved from the current member 
04506              * instance of the invocation.
04507              */
04508             @Override
04509             public Function<T> with(ObjectLike o) {
04510                 return new Function<T>(super.with(o));
04511             }
04512             /**
04513              * <p>Evaluates a property, represented by the current member instance, of the 
04514              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
04515              * @return The value of the current member based on the JavaScript global object.
04516              * @since 1.0
04517              * @javascript Re-compilers must convert the instance invocation of this method into 
04518              * the JavaScript expression: 
04519              * <pre>m</pre>
04520              * where <tt>m</tt> is the identifier name resolved from the current member 
04521              * instance of the invocation.
04522              */
04523             @Override
04524             public Function<T> with() {
04525                 return with(Js.core());
04526             }
04527 
04528             /**
04529              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04530              * name of this field, qualified by the current member instance of the field, and 
04531              * to access the property of the name on an object.</p>
04532              * <p>The <tt>prototype</tt> property is used when a function is used as a 
04533              * constructor. It refers to an object that serves as the prototype for an entire 
04534              * class of objects. Any object created by the constructor inherits all properties 
04535              * of the object referred to by the <tt>prototype</tt> property.</p>
04536              * @since 1.0
04537              * @javascript Re-compilers must resolve the member of this instance field to the 
04538              * identifier of the field name appending to the identifier resolved from its 
04539              * qualifying member with a dot in between.
04540              */
04541             public final Prototype.Member prototype = new Prototype.Member(this, Members.prototype);
04542         }
04543 
04544         /**
04545          * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
04546          * with the wrapping constructor.</p>
04547          * @param var The argument of an <b>opaque</b> object.
04548          * @since 1.0
04549          * @javascript Re-compilers must ignore the construction operation of this constructor, 
04550          * that is, replacing it with its only argument.
04551          */
04552         public Function(JsObject var) {
04553             super(var);
04554         }
04555 
04556         /**
04557          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04558          * without a qualifying member and to access the property of the name on an object.</p>
04559          * <p>The <tt>prototype</tt> property is used when a function is used as a 
04560          * constructor. It refers to an object that serves as the prototype for an entire 
04561          * class of objects. Any object created by the constructor inherits all properties 
04562          * of the object referred to by the <tt>prototype</tt> property.</p>
04563          * @since 1.0
04564          * @javascript Re-compilers must resolve the member of this static field to the 
04565          * identifier of the field name.
04566          */
04567         public static final Prototype.Member prototype = new Prototype.Member(Members.prototype);
04568 
04569         /**
04570          * <p>Creates an empty JavaScript function.</p>
04571          * <p>A function is a fundamental data-type in JavaScript. Note that although functions 
04572          * may be created with this method, this is not efficient, and the preferred way to 
04573          * define functions, in most cases, is to extend {@link js.Function}.</p>
04574          * @return A newly created empty function. 
04575          * @see #create(String)
04576          * @see #create(String, String)
04577          * @see #create(Vars, String)
04578          * @see js.Function
04579          * @see js.Js#function()
04580          * @since 1.0
04581          * @javascript Re-compilers must replace the instance invocation of this method with the 
04582          * JavaScript invocation:
04583          * <pre>new Function()</pre>
04584          */
04585         @Override
04586         public final JsFunction<T> create() {
04587             return new JsFunction<T>(Js.function());
04588         }
04589         /**
04590          * <p>Creates a JavaScript function that has no argument names.</p>
04591          * <p>A function is a fundamental data-type in JavaScript. Note that although functions 
04592          * may be created with this method, this is not efficient, and the preferred way to 
04593          * define functions, in most cases, is to extend {@link js.Function}.</p>
04594          * @param body A string that specifies the body of the function.
04595          * @return A newly created function. Invoking it executes the JavaScript code specified 
04596          * by <tt>body</tt>.
04597          * @throws RuntimeException JavaScript throws a <tt>SyntaxError</tt> if there was a 
04598          * JavaScript syntax error in one of the value of <tt>body</tt>. See {@link js.Js#err(Object)} 
04599          * and {@link js.core.JsSyntaxError} for JS Simulation.
04600          * @see #create()
04601          * @see #create(String)
04602          * @see #create(String, String)
04603          * @see js.Function
04604          * @see js.Js#function(String)
04605          * @see js.Js#function(Vars, String)
04606          * @since 1.0
04607          * @javascript Re-compilers must replace the instance invocation of this method with the 
04608          * JavaScript invocation:
04609          * <pre>new Function(body)</pre>
04610          */
04611         public final JsFunction<T> create(java.lang.String body) {
04612             return new JsFunction<T>(Js.function(body));
04613         }
04614         /**
04615          * <p>Creates a JavaScript function with an argument name.</p>
04616          * <p>A function is a fundamental data-type in JavaScript. Note that although functions 
04617          * may be created with this method, this is not efficient, and the preferred way to 
04618          * define functions, in most cases, is to extend {@link js.Function}.</p>
04619          * @param argname A string literal, naming an argument of the function being created.
04620          * @param body A string that specifies the body of the function.
04621          * @return A newly created function. Invoking it executes the JavaScript code specified 
04622          * by <tt>body</tt>.
04623          * @throws RuntimeException JavaScript throws a <tt>SyntaxError</tt> if there was a 
04624          * JavaScript syntax error in one of the value of the variable arguments or <tt>body</tt>. 
04625          * See {@link js.Js#err(Object)} and {@link js.core.JsSyntaxError} for JS Simulation.
04626          * @see #create()
04627          * @see #create(String)
04628          * @see #create(Vars, String)
04629          * @see js.Function
04630          * @see js.Js#function(String, String)
04631          * @see js.Js#function(Vars, String)
04632          * @since 1.0
04633          * @javascript Re-compilers must replace the instance invocation of this method with the 
04634          * JavaScript invocation:
04635          * <pre>new Function(argname, body)</pre>
04636          * where <tt>argname</tt> must be a string literal and converted into an argument name.
04637          */
04638         public final JsFunction<T> create(java.lang.String argname, java.lang.String body) {
04639             return new JsFunction<T>(Js.function(argname, body));
04640         }
04641         /**
04642          * <p>Creates a JavaScript function.</p>
04643          * <p>A function is a fundamental data-type in JavaScript. Note that although functions 
04644          * may be created with this method, this is not efficient, and the preferred way to 
04645          * define functions, in most cases, is to extend {@link js.Function}.</p>
04646          * @param argnames A list of the argument values, each naming one or more arguments of the 
04647          * function being created.
04648          * @param body A string that specifies the body of the function.
04649          * @return A newly created function. Invoking it executes the JavaScript code specified 
04650          * by <tt>body</tt>.
04651          * @throws RuntimeException JavaScript throws a <tt>SyntaxError</tt> if there was a 
04652          * JavaScript syntax error in one of the value of the variable arguments and <tt>body</tt>. 
04653          * See {@link js.Js#err(Object)} and {@link js.core.JsSyntaxError} for JS Simulation.
04654          * @see #create()
04655          * @see #create(String)
04656          * @see #create(String, String)
04657          * @see js.Function
04658          * @see js.Js#function(Vars, String)
04659          * @since 1.0
04660          * @javascript Re-compilers must replace the instance invocation of this method with the 
04661          * JavaScript invocation:
04662          * <pre>new Function(argnames, body)</pre>
04663          * where <tt>argnames</tt> must be a list of string literals and expanded into 
04664          * comma-separated argument names.
04665          */
04666         public final JsFunction<T> create(Vars<java.lang.String> argnames, java.lang.String body) {
04667             return new JsFunction<T>(Js.function(argnames, body));
04668         }
04669 
04670         /**
04671          * <p>An <b>opaque</b> class representing the prototype of the enclosing global 
04672          * class of JavaScript.</p>
04673          *
04674          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
04675          * 
04676          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
04677          * generated into the target codes. Re-compilers must exit with error on the operations of 
04678          * accessing that kind of class objects.
04679          * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
04680          * and <tt>instanceof</tt> to it always <tt>true</tt>.
04681          */
04682         public static class Prototype extends JsObject
04683         {
04684             /**
04685              * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
04686              * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
04687              * This class and the subclasses of this class are used to declare either <b>opaque</b> 
04688              * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
04689              * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
04690              * constructors are used to define the fields inside <b>opaque</b> classes. Under 
04691              * either circumstance, the field names must be exactly same as the member names, as 
04692              * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
04693              * based on the field names.</p>
04694              *
04695              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
04696              * 
04697              * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
04698              * in the target codes. Re-compilers must exit with error on operations accessing that kind 
04699              * of class objects.
04700              * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
04701              * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
04702              * <pre>q.m</pre>
04703              * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
04704              * resolved from the instance of the enclosing member. Re-compilers must resolve an 
04705              * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
04706              * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
04707              * <pre>m</pre>
04708              * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
04709              * error on the access to <b>opaque</b> fields declared by this class under any other 
04710              * circumstances.
04711              */
04712             public static class Member extends JsObject.Member
04713             {
04714                 /**
04715                  * <p>Internally constructs a member based on a qualifying member.</p>
04716                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
04717                  * or <b>internal</b> classes or class members.</p>
04718                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
04719                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
04720                  * declared in the declaring class of this constructor itself or its subclasses. 
04721                  * Under this circumstance, the field names must be exactly same as the member 
04722                  * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
04723                  * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
04724                  * to their names appending to the name resolved from the specified qualifying 
04725                  * member with a dot in between.</p>
04726                  * @param q A qualifying member
04727                  * @param mid The ID of the member to construct
04728                  * @since 1.0
04729                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
04730                  */
04731                 protected Member(JsObject.Member q, Mid mid) {
04732                     super(q, mid);
04733                 }
04734                 /**
04735                  * <p>Internally constructs a member without a qualifying member.</p>
04736                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
04737                  * or <b>internal</b> classes or class members.</p>
04738                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
04739                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
04740                  * declared in <b>opaque</b> types other than the declaring class of this constructor 
04741                  * itself and its subclasses. Under this circumstance, the field names must be 
04742                  * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
04743                  * types are generally resolved by re-compilers directly to identifiers of their names.</p>
04744                  * @param mid The ID of the member to construct
04745                  * @since 1.0
04746                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
04747                  */
04748                 protected Member(Mid mid) {
04749                     super(mid);
04750                 }
04751                 /**
04752                  * <p>Evaluates the property, represented by the current member instance, of the 
04753                  * argument object.</p>
04754                  * @param o The argument object
04755                  * @return The value of the current member based on the object argument.
04756                  * @since 1.0
04757                  * @javascript Re-compilers must convert the instance invocation of this method into 
04758                  * the JavaScript expression: 
04759                  * <pre>o.m</pre>
04760                  * where <tt>m</tt> is the identifier name resolved from the current member 
04761                  * instance of the invocation.
04762                  */
04763                 @Override
04764                 public Prototype with(ObjectLike o) {
04765                     return new Prototype(super.with(o));
04766                 }
04767             }
04768 
04769             /**
04770              * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
04771              * with the wrapping constructor.</p>
04772              * @param var The argument of an <b>opaque</b> object.
04773              * @since 1.0
04774              * @javascript Re-compilers must ignore the construction operation of this constructor, 
04775              * that is, replacing it with its only argument.
04776              */
04777             public Prototype(JsObject var) {
04778                 super(var);
04779             }
04780         }
04781     }
04782 
04783     /**
04784      * <p>An <b>opaque</b> class representing the global Error class of JavaScript.</p>
04785      *
04786      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
04787      * 
04788      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
04789      * generated into the target codes. Re-compilers must exit with error on the operations of 
04790      * accessing that kind of class objects.
04791      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
04792      * and <tt>instanceof</tt> to it always <tt>true</tt>.
04793      */
04794     public static class Error extends JsFunction<JsError>
04795     {
04796         /**
04797          * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
04798          * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
04799          * This class and the subclasses of this class are used to declare either <b>opaque</b> 
04800          * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
04801          * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
04802          * constructors are used to define the fields inside <b>opaque</b> classes. Under 
04803          * either circumstance, the field names must be exactly same as the member names, as 
04804          * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
04805          * based on the field names.</p>
04806          *
04807          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
04808          * 
04809          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
04810          * in the target codes. Re-compilers must exit with error on operations accessing that kind 
04811          * of class objects.
04812          * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
04813          * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
04814          * <pre>q.m</pre>
04815          * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
04816          * resolved from the instance of the enclosing member. Re-compilers must resolve an 
04817          * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
04818          * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
04819          * <pre>m</pre>
04820          * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
04821          * error on the access to <b>opaque</b> fields declared by this class under any other 
04822          * circumstances.
04823          */
04824         public static class Member extends JsFunction.Member<JsError>
04825         {
04826             private Member(JsObject.Member q, Mid mid) {
04827                 super(q, mid);
04828             }
04829             private Member(Mid mid) {
04830                 super(mid);
04831             }
04832             /**
04833              * <p>Evaluates the property, represented by the current member instance, of the 
04834              * argument object.</p>
04835              * @param o The argument object
04836              * @return The value of the current member based on the object argument.
04837              * @since 1.0
04838              * @javascript Re-compilers must convert the instance invocation of this method into 
04839              * the JavaScript expression: 
04840              * <pre>o.m</pre>
04841              * where <tt>m</tt> is the identifier name resolved from the current member 
04842              * instance of the invocation.
04843              */
04844             @Override
04845             public Error with(ObjectLike o) {
04846                 return new Error(super.with(o));
04847             }
04848             /**
04849              * <p>Evaluates a property, represented by the current member instance, of the 
04850              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
04851              * @return The value of the current member based on the JavaScript global object.
04852              * @since 1.0
04853              * @javascript Re-compilers must convert the instance invocation of this method into 
04854              * the JavaScript expression: 
04855              * <pre>m</pre>
04856              * where <tt>m</tt> is the identifier name resolved from the current member 
04857              * instance of the invocation.
04858              */
04859             @Override
04860             public Error with() {
04861                 return with(Js.core());
04862             }
04863 
04864             /**
04865              * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
04866              * name of this field, qualified by the current member instance of the field, and 
04867              * to access the property of the name on an object.</p>
04868              * <p>The <tt>prototype</tt> property is used when a function is used as a 
04869              * constructor. It refers to an object that serves as the prototype for an entire 
04870              * class of objects. Any object created by the constructor inherits all properties 
04871              * of the object referred to by the <tt>prototype</tt> property.</p>
04872              * @since 1.0
04873              * @javascript Re-compilers must resolve the member of this instance field to the 
04874              * identifier of the field name appending to the identifier resolved from its 
04875              * qualifying member with a dot in between.
04876              */
04877             public final Prototype.Member prototype = new Prototype.Member(this, Members.prototype);
04878         }
04879 
04880         /**
04881          * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
04882          * with the wrapping constructor.</p>
04883          * @param var The argument of an <b>opaque</b> object.
04884          * @since 1.0
04885          * @javascript Re-compilers must ignore the construction operation of this constructor, 
04886          * that is, replacing it with its only argument.
04887          */
04888         public Error(JsObject var) {
04889             super(var);
04890         }
04891 
04892         /**
04893          * <p>An <b>opaque</b> static field defining a member that is named by the field name 
04894          * without a qualifying member and to access the property of the name on an object.</p>
04895          * <p>The <tt>prototype</tt> property is used when a function is used as a 
04896          * constructor. It refers to an object that serves as the prototype for an entire 
04897          * class of objects. Any object created by the constructor inherits all properties 
04898          * of the object referred to by the <tt>prototype</tt> property.</p>
04899          * @since 1.0
04900          * @javascript Re-compilers must resolve the member of this static field to the 
04901          * identifier of the field name.
04902          */
04903         public static final Prototype.Member prototype = new Prototype.Member(Members.prototype);
04904 
04905         /**
04906          * <p>Constructs a JavaScript Error object with its <tt>message</tt> property being an 
04907          * implementation-defined default string.</p>
04908          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
04909          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
04910          * the <tt>new</tt> operator.</p>
04911          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
04912          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
04913          * property specifies the type of the exception, and the <tt>message</tt> property can 
04914          * provide human-readable details about the exception.</p>
04915          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
04916          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
04917          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
04918          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
04919          * error message or error code as a primitive string or number value.</p>
04920          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
04921          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
04922          * that it does not require this <tt>toString()</tt> method to return a string that contains 
04923          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
04924          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
04925          * human-readable string. To display an error message to a user, you should explicitly use 
04926          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
04927          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
04928          * @return A newly constructed <tt>Error</tt> object.
04929          * @since 1.0
04930          * @see #invoke()
04931          * @see #invoke(Object)
04932          * @see #invoke(Vars)
04933          * @see #create(Object)
04934          * @see #create(Vars)
04935          * @javascript Re-compilers must replace the instance invocation of this method with the 
04936          * JavaScript invocation:
04937          * <pre>new Error()</pre>
04938          */
04939         @Override
04940         public final JsError create() {
04941             return new JsError(super.create());
04942         }
04943         /**
04944          * <p>Constructs a JavaScript Error object with its <tt>message</tt> property being an 
04945          * implementation-defined default string.</p>
04946          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
04947          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
04948          * the <tt>new</tt> operator.</p>
04949          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
04950          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
04951          * property specifies the type of the exception, and the <tt>message</tt> property can 
04952          * provide human-readable details about the exception.</p>
04953          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
04954          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
04955          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
04956          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
04957          * error message or error code as a primitive string or number value.</p>
04958          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
04959          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
04960          * that it does not require this <tt>toString()</tt> method to return a string that contains 
04961          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
04962          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
04963          * human-readable string. To display an error message to a user, you should explicitly use 
04964          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
04965          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
04966          * @return A newly constructed <tt>Error</tt> object.
04967          * @since 1.0
04968          * @see #invoke(Object)
04969          * @see #invoke(Vars)
04970          * @see #create()
04971          * @see #create(Object)
04972          * @see #create(Vars)
04973          * @javascript Re-compilers must replace the instance invocation of this method with the 
04974          * JavaScript invocation:
04975          * <pre>Error()</pre>
04976          */
04977         @Override
04978         public final JsError invoke() {
04979             return new JsError(super.create());
04980         }
04981         /**
04982          * <p>Constructs a JavaScript Error object.</p>
04983          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
04984          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
04985          * the <tt>new</tt> operator.</p>
04986          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
04987          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
04988          * property specifies the type of the exception, and the <tt>message</tt> property can 
04989          * provide human-readable details about the exception.</p>
04990          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
04991          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
04992          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
04993          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
04994          * error message or error code as a primitive string or number value.</p>
04995          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
04996          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
04997          * that it does not require this <tt>toString()</tt> method to return a string that contains 
04998          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
04999          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
05000          * human-readable string. To display an error message to a user, you should explicitly use 
05001          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
05002          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
05003          * @param message An optional error message that provides details about the exception.
05004          * @return A newly constructed <tt>Error</tt> object.
05005          * @since 1.0
05006          * @see #invoke()
05007          * @see #invoke(Object)
05008          * @see #invoke(Vars)
05009          * @see #create()
05010          * @see #create(Vars)
05011          * @javascript Re-compilers must replace the instance invocation of this method with the 
05012          * JavaScript invocation:
05013          * <pre>new Error(message)</pre>
05014          */
05015         @Override
05016         public final JsError create(java.lang.Object message) {
05017             return new JsError(super.create(message));
05018         }
05019         /**
05020          * <p>Constructs a JavaScript Error object.</p>
05021          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
05022          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
05023          * the <tt>new</tt> operator.</p>
05024          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
05025          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
05026          * property specifies the type of the exception, and the <tt>message</tt> property can 
05027          * provide human-readable details about the exception.</p>
05028          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
05029          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
05030          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
05031          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
05032          * error message or error code as a primitive string or number value.</p>
05033          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
05034          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
05035          * that it does not require this <tt>toString()</tt> method to return a string that contains 
05036          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
05037          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
05038          * human-readable string. To display an error message to a user, you should explicitly use 
05039          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
05040          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
05041          * @param message An optional error message that provides details about the exception.
05042          * @return A newly constructed <tt>Error</tt> object.
05043          * @since 1.0
05044          * @see #invoke()
05045          * @see #invoke(Vars)
05046          * @see #create()
05047          * @see #create(Object)
05048          * @see #create(Vars)
05049          * @javascript Re-compilers must replace the instance invocation of this method with the 
05050          * JavaScript invocation:
05051          * <pre>Error(message)</pre>
05052          */
05053         @Override
05054         public final JsError invoke(java.lang.Object message) {
05055             return new JsError(super.create(message));
05056         }
05057         /**
05058          * <p>Constructs a JavaScript Error object.</p>
05059          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
05060          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
05061          * the <tt>new</tt> operator.</p>
05062          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
05063          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
05064          * property specifies the type of the exception, and the <tt>message</tt> property can 
05065          * provide human-readable details about the exception.</p>
05066          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
05067          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
05068          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
05069          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
05070          * error message or error code as a primitive string or number value.</p>
05071          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
05072          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
05073          * that it does not require this <tt>toString()</tt> method to return a string that contains 
05074          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
05075          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
05076          * human-readable string. To display an error message to a user, you should explicitly use 
05077          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
05078          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
05079          * @param args The variable argument.
05080          * @return A newly constructed <tt>Error</tt> object.
05081          * @since 1.0
05082          * @see #invoke()
05083          * @see #invoke(Object)
05084          * @see #invoke(Vars)
05085          * @see #create()
05086          * @see #create(Object)
05087          * @javascript Re-compilers must replace the instance invocation of this method with the 
05088          * JavaScript invocation:
05089          * <pre>new Error(args)</pre>
05090          * where <tt>args</tt> must be expanded into comma-separated argument values.
05091          */
05092         @Override
05093         public final JsError create(Vars<?> args) {
05094             return new JsError(super.create(args));
05095         }
05096         /**
05097          * <p>Constructs a JavaScript Error object.</p>
05098          * <p>In JavaScript, When the <tt>Error()</tt> constructor is called as a function, 
05099          * without the <tt>new</tt> operator, it behaves exactly as it does when called with 
05100          * the <tt>new</tt> operator.</p>
05101          * <p>Instances of the <tt>Error</tt> represent errors or exceptions and are typically used 
05102          * with the <tt>throw</tt> and <tt>try/catch</tt> statements in JavaScript. The <tt>name</tt> 
05103          * property specifies the type of the exception, and the <tt>message</tt> property can 
05104          * provide human-readable details about the exception.</p>
05105          * <p>The JavaScript interpreter never throws <tt>Error</tt> objects directly; instead, it 
05106          * throws instances of one of the <tt>Error</tt> subclasses, such as <tt>SyntaxError</tt> 
05107          * or <tt>RangeError</tt>. In your own JavaScript code, you may find it convenient to 
05108          * throw <tt>Error</tt> objects to signal exceptions, or you may prefer to simply throw an 
05109          * error message or error code as a primitive string or number value.</p>
05110          * <p>Note that the ECMAScript specification defines a <tt>toString()</tt> method for the 
05111          * <tt>Error</tt> class (it is inherited by each of the subclasses of <tt>Error</tt>) but 
05112          * that it does not require this <tt>toString()</tt> method to return a string that contains 
05113          * the contents of the <tt>message</tt> property. Therefore, you should not expect the 
05114          * <tt>toString()</tt> method to convert an <tt>Error</tt> object to a meaningful, 
05115          * human-readable string. To display an error message to a user, you should explicitly use 
05116          * the <tt>name</tt> and <tt>message</tt> properties of the <tt>Error</tt> object.</p>
05117          * <p>In JS, to throw a value or object as a <tt>RuntimeException</tt>, see {@link js.Js#err(Object)}.</p>
05118          * @param args The variable argument.
05119          * @return A newly constructed <tt>Error</tt> object.
05120          * @since 1.0
05121          * @see #invoke()
05122          * @see #invoke(Object)
05123          * @see #create()
05124          * @see #create(Object)
05125          * @see #create(Vars)
05126          * @javascript Re-compilers must replace the instance invocation of this method with the 
05127          * JavaScript invocation:
05128          * <pre>Error(args)</pre>
05129          * where <tt>args</tt> must be expanded into comma-separated argument values.
05130          */
05131         @Override
05132         public final JsError invoke(Vars<?> args) {
05133             return new JsError(super.create(args));
05134         }
05135 
05136         /**
05137          * <p>An <b>opaque</b> class representing the prototype of the enclosing global 
05138          * class of JavaScript.</p>
05139          *
05140          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
05141          * 
05142          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
05143          * generated into the target codes. Re-compilers must exit with error on the operations of 
05144          * accessing that kind of class objects.
05145          * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
05146          * and <tt>instanceof</tt> to it always <tt>true</tt>.
05147          */
05148         public static class Prototype extends JsObject
05149         {
05150             /**
05151              * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
05152              * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
05153              * This class and the subclasses of this class are used to declare either <b>opaque</b> 
05154              * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
05155              * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
05156              * constructors are used to define the fields inside <b>opaque</b> classes. Under 
05157              * either circumstance, the field names must be exactly same as the member names, as 
05158              * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
05159              * based on the field names.</p>
05160              *
05161              * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
05162              * 
05163              * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
05164              * in the target codes. Re-compilers must exit with error on operations accessing that kind 
05165              * of class objects.
05166              * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
05167              * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
05168              * <pre>q.m</pre>
05169              * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
05170              * resolved from the instance of the enclosing member. Re-compilers must resolve an 
05171              * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
05172              * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
05173              * <pre>m</pre>
05174              * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
05175              * error on the access to <b>opaque</b> fields declared by this class under any other 
05176              * circumstances.
05177              */
05178             public static class Member extends JsObject.Member
05179             {
05180                 /**
05181                  * <p>Internally constructs a member based on a qualifying member.</p>
05182                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
05183                  * or <b>internal</b> classes or class members.</p>
05184                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
05185                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> instance fields 
05186                  * declared in the declaring class of this constructor itself or its subclasses. 
05187                  * Under this circumstance, the field names must be exactly same as the member 
05188                  * names, as the <b>opaque</b> instance fields of the <b>opaque</b> type 
05189                  * {@link js.Var.Member} or its subclasses are resolved by re-compilers directly 
05190                  * to their names appending to the name resolved from the specified qualifying 
05191                  * member with a dot in between.</p>
05192                  * @param q A qualifying member
05193                  * @param mid The ID of the member to construct
05194                  * @since 1.0
05195                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
05196                  */
05197                 protected Member(JsObject.Member q, Mid mid) {
05198                     super(q, mid);
05199                 }
05200                 /**
05201                  * <p>Internally constructs a member without a qualifying member.</p>
05202                  * <p>This constructor is <b>internal</b> and only called inside of <b>opaque</b> 
05203                  * or <b>internal</b> classes or class members.</p>
05204                  * <p>Note that, this constructor is <b>internal</b> but its declaring class is 
05205                  * <b>opaque</b>. This constructor is used to define <b>opaque</b> static fields, 
05206                  * declared in <b>opaque</b> types other than the declaring class of this constructor 
05207                  * itself and its subclasses. Under this circumstance, the field names must be 
05208                  * exactly same as the member names, as the <b>opaque</b> static fields of <b>opaque</b> 
05209                  * types are generally resolved by re-compilers directly to identifiers of their names.</p>
05210                  * @param mid The ID of the member to construct
05211                  * @since 1.0
05212                  * @javascript Re-compilers must report error on the invocation to an <b>internal</b> constructor. 
05213                  */
05214                 protected Member(Mid mid) {
05215                     super(mid);
05216                 }
05217                 /**
05218                  * <p>Evaluates the property, represented by the current member instance, of the 
05219                  * argument object.</p>
05220                  * @param o The argument object
05221                  * @return The value of the current member based on the object argument.
05222                  * @since 1.0
05223                  * @javascript Re-compilers must convert the instance invocation of this method into 
05224                  * the JavaScript expression: 
05225                  * <pre>o.m</pre>
05226                  * where <tt>m</tt> is the identifier name resolved from the current member 
05227                  * instance of the invocation.
05228                  */
05229                 @Override
05230                 public Prototype with(ObjectLike o) {
05231                     return new Prototype(super.with(o));
05232                 }
05233 
05234                 /**
05235                  * <p>An <b>opaque</b> instance field defining a sub-member that is named by the 
05236                  * name of this field, qualified by the current member instance of the field, and 
05237                  * to access the property of the name on an object.</p>
05238                  * @since 1.0
05239                  * @javascript Re-compilers must resolve the member of this instance field to the 
05240                  * identifier of the field name appending to the identifier resolved from its 
05241                  * qualifying member with a dot in between.
05242                  */
05243                 public final JsFunction.Member<JsError> valueOf = new JsFunction.Member<JsError>(this, Members.valueOf);
05244             }
05245 
05246             /**
05247              * <p>Casts an <b>opaque</b> object to the current <b>opaque</b> type by wrapping it 
05248              * with the wrapping constructor.</p>
05249              * @param var The argument of an <b>opaque</b> object.
05250              * @since 1.0
05251              * @javascript Re-compilers must ignore the construction operation of this constructor, 
05252              * that is, replacing it with its only argument.
05253              */
05254             public Prototype(JsObject var) {
05255                 super(var);
05256             }
05257 
05258             /**
05259              * <p>An <b>opaque</b> static field defining a member that is named by the field name 
05260              * without a qualifying member and to access the property of the name on an object.</p>
05261              * @since 1.0
05262              * @javascript Re-compilers must resolve the member of this static field to the 
05263              * identifier of the field name.
05264              */
05265             public static final JsFunction.Member<JsError> valueOf = new JsFunction.Member<JsError>(Members.valueOf);
05266         }
05267     }
05268 
05269     /**
05270      * <p>An <b>opaque</b> class representing the global EvalError class of JavaScript.</p>
05271      *
05272      * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
05273      * 
05274      * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be 
05275      * generated into the target codes. Re-compilers must exit with error on the operations of 
05276      * accessing that kind of class objects.
05277      * The <tt>checkcast</tt> operation to the class literal of this interface must be ignored 
05278      * and <tt>instanceof</tt> to it always <tt>true</tt>.
05279      */
05280     public static class EvalError extends JsFunction<JsEvalError>
05281     {
05282         /**
05283          * <p>An <b>opaque</b> class representing members of its enclosing <b>opaque</b> type.</p>
05284          * <p>Note that, this class is <b>opaque</b> but its constructors are all <b>internal</b>. 
05285          * This class and the subclasses of this class are used to declare either <b>opaque</b> 
05286          * <tt>public</tt> instance fields of the opaque type {@link js.Var.Member} or the 
05287          * <b>opaque</b> <tt>public</tt> static fields of other <b>opaque</b> types while their 
05288          * constructors are used to define the fields inside <b>opaque</b> classes. Under 
05289          * either circumstance, the field names must be exactly same as the member names, as 
05290          * the <b>opaque</b> fields of <b>opaque</b> types are resolved by re-compilers directly 
05291          * based on the field names.</p>
05292          *
05293          * @author <a href="mailto:jianjunliu@126.com">J.J.Liu (Jianjun Liu)</a> at <a href="http://www.jscripter.org" target="_blank">http://www.jscripter.org</a>
05294          * 
05295          * @javascript <b>Opaque</b> types can be resolved but no class objects for them can be created 
05296          * in the target codes. Re-compilers must exit with error on operations accessing that kind 
05297          * of class objects.
05298          * Re-compilers must resolve an <b>opaque</b> instance field declared by this class in 
05299          * {@link js.Var.Member} or its subclasses to the JavaScript identifier: 
05300          * <pre>q.m</pre>
05301          * where <tt>m</tt> is the identifier of the field name and <tt>q</tt> is the identifier 
05302          * resolved from the instance of the enclosing member. Re-compilers must resolve an 
05303          * <b>opaque</b> static field declared by this class in <b>opaque</b> types other than 
05304          * {@link js.Var.Member} and its subclasses to the JavaScript identifier: 
05305          * <pre>m</pre>
05306          * where <tt>m</tt> is the identifier of the field name. And re-compilers must report 
05307          * error on the access to <b>opaque</b> fields declared by this class under any other 
05308          * circumstances.
05309          */
05310         public static class Member extends JsFunction.Member<JsEvalError>
05311         {
05312             private Member(JsObject.Member q, Mid mid) {
05313                 super(q, mid);
05314             }
05315             private Member(Mid mid) {
05316                 super(mid);
05317             }
05318             /**
05319              * <p>Evaluates the property, represented by the current member instance, of the 
05320              * argument object.</p>
05321              * @param o The argument object
05322              * @return The value of the current member based on the object argument.
05323              * @since 1.0
05324              * @javascript Re-compilers must convert the instance invocation of this method into 
05325              * the JavaScript expression: 
05326              * <pre>o.m</pre>
05327              * where <tt>m</tt> is the identifier name resolved from the current member 
05328              * instance of the invocation.
05329              */
05330             @Override
05331             public EvalError with(ObjectLike o) {
05332                 return new EvalError(super.with(o));
05333             }
05334             /**
05335              * <p>Evaluates a property, represented by the current member instance, of the 
05336              * JavaScript global object, that is, evaluates the member to a global identifier.</p>
05337              * @return The value of the current member based on the JavaScript global object.
05338              * @since 1.0
05339              * @javascript Re-compilers must convert the instance invocation of this method into 
05340              * the JavaScript expression: 
05341              * <pre>m</pre>
05342              * where <tt>m</tt> is the identifier name resolved from the current member 
05343              * instance of the invocation.
05344              */
05345             @Override
05346             public