/[jscoverage]/trunk/js/jsbuiltins.h
ViewVC logotype

Diff of /trunk/js/jsbuiltins.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 506 by siliconforks, Sat Sep 26 23:15:22 2009 UTC revision 507 by siliconforks, Sun Jan 10 07:23:34 2010 UTC
# Line 43  Line 43 
43  #ifdef JS_TRACER  #ifdef JS_TRACER
44    
45  #include "nanojit/nanojit.h"  #include "nanojit/nanojit.h"
46  #include "jstracer.h"  
47    #ifdef THIS
48    #undef THIS
49    #endif
50    
51  enum JSTNErrType { INFALLIBLE, FAIL_STATUS, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_COOKIE };  enum JSTNErrType { INFALLIBLE, FAIL_STATUS, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_COOKIE };
52  enum { JSTN_ERRTYPE_MASK = 0x07, JSTN_UNBOX_AFTER = 0x08, JSTN_MORE = 0x10,  enum { JSTN_ERRTYPE_MASK = 0x07, JSTN_UNBOX_AFTER = 0x08, JSTN_MORE = 0x10,
# Line 52  Line 55 
55  #define JSTN_ERRTYPE(jstn)  ((jstn)->flags & JSTN_ERRTYPE_MASK)  #define JSTN_ERRTYPE(jstn)  ((jstn)->flags & JSTN_ERRTYPE_MASK)
56    
57  /*  /*
58     * Type describing a type specialization of a JSFastNative.
59     *
60   * |prefix| and |argtypes| declare what arguments should be passed to the   * |prefix| and |argtypes| declare what arguments should be passed to the
61   * native function.  |prefix| can contain the following characters:   * native function.  |prefix| can contain the following characters:
62   *   *
# Line 77  Line 82 
82   * 'f': a JSObject* argument that is of class js_FunctionClass   * 'f': a JSObject* argument that is of class js_FunctionClass
83   * 'v': a jsval argument (boxing whatever value is actually being passed in)   * 'v': a jsval argument (boxing whatever value is actually being passed in)
84   */   */
85  struct JSTraceableNative {  struct JSSpecializedNative {
     JSFastNative            native;  
86      const nanojit::CallInfo *builtin;      const nanojit::CallInfo *builtin;
87      const char              *prefix;      const char              *prefix;
88      const char              *argtypes;      const char              *argtypes;
89      uintN                   flags;  /* JSTNErrType | JSTN_UNBOX_AFTER | JSTN_MORE |      uintN                   flags;  /* JSTNErrType | JSTN_UNBOX_AFTER | JSTN_MORE |
90                                         JSTN_CONSTRUCTOR */                                         JSTN_CONSTRUCTOR */
91  };  };
92    
93  /*  /*
94     * Type holding extra trace-specific information about a fast native.
95     *
96     * 'specializations' points to a static array of available specializations
97     * terminated by the lack of having the JSTN_MORE flag set.
98     */
99    struct JSNativeTraceInfo {
100        JSFastNative            native;
101        JSSpecializedNative     *specializations;
102    };
103    
104    /*
105   * We use a magic boxed pointer value to represent error conditions that   * We use a magic boxed pointer value to represent error conditions that
106   * trigger a side exit. The address is so low that it should never be actually   * trigger a side exit. The address is so low that it should never be actually
107   * in use. If it is, a performance regression occurs, not an actual runtime   * in use. If it is, a performance regression occurs, not an actual runtime
# Line 101  Line 116 
116  #define _JS_CI_NAME(op)  #define _JS_CI_NAME(op)
117  #endif  #endif
118    
119  #define  _JS_I32_ARGSIZE    nanojit::ARGSIZE_LO  #define _JS_I32_ARGSIZE    nanojit::ARGSIZE_I
120  #define  _JS_I32_RETSIZE    nanojit::ARGSIZE_LO  #define _JS_I32_RETSIZE    nanojit::ARGSIZE_I
121  #define  _JS_F64_ARGSIZE    nanojit::ARGSIZE_F  #define _JS_F64_ARGSIZE    nanojit::ARGSIZE_F
122  #define  _JS_F64_RETSIZE    nanojit::ARGSIZE_F  #define _JS_F64_RETSIZE    nanojit::ARGSIZE_F
123  #define  _JS_PTR_ARGSIZE    nanojit::ARGSIZE_LO  #define _JS_PTR_ARGSIZE    nanojit::ARGSIZE_P
124  #if defined AVMPLUS_64BIT  #define _JS_PTR_RETSIZE    nanojit::ARGSIZE_P
125  # define _JS_PTR_RETSIZE    nanojit::ARGSIZE_Q  
126  #else  class ClosureVarInfo;
 # define _JS_PTR_RETSIZE    nanojit::ARGSIZE_LO  
 #endif  
127    
128  /*  /*
129   * Supported types for builtin functions.   * Supported types for builtin functions.
130   *   *
131   * Types with -- for the two string fields are not permitted as argument types   * Types with -- for the two string fields are not permitted as argument types
132   * in JS_DEFINE_TRCINFO.   * in JS_DEFINE_TRCINFO.
# Line 161  Line 174 
174   * trace.  If an exception is pending, it is thrown; otherwise, we assume the   * trace.  If an exception is pending, it is thrown; otherwise, we assume the
175   * builtin had no side effects and retry the current bytecode in the   * builtin had no side effects and retry the current bytecode in the
176   * interpreter.   * interpreter.
177   *   *
178   * So a builtin must not return a value indicating failure after causing side   * So a builtin must not return a value indicating failure after causing side
179   * effects (such as reporting an error), without setting an exception pending.   * effects (such as reporting an error), without setting an exception pending.
180   * The operation would be retried, despite the first attempt's observable   * The operation would be retried, despite the first attempt's observable
# Line 177  Line 190 
190  #define _JS_CTYPE_THIS_STRING       _JS_CTYPE(JSString *,             _JS_PTR,"S", "", INFALLIBLE)  #define _JS_CTYPE_THIS_STRING       _JS_CTYPE(JSString *,             _JS_PTR,"S", "", INFALLIBLE)
191  #define _JS_CTYPE_CALLEE            _JS_CTYPE(JSObject *,             _JS_PTR,"f","",  INFALLIBLE)  #define _JS_CTYPE_CALLEE            _JS_CTYPE(JSObject *,             _JS_PTR,"f","",  INFALLIBLE)
192  #define _JS_CTYPE_CALLEE_PROTOTYPE  _JS_CTYPE(JSObject *,             _JS_PTR,"p","",  INFALLIBLE)  #define _JS_CTYPE_CALLEE_PROTOTYPE  _JS_CTYPE(JSObject *,             _JS_PTR,"p","",  INFALLIBLE)
193    #define _JS_CTYPE_FUNCTION          _JS_CTYPE(JSFunction *,           _JS_PTR, --, --, INFALLIBLE)
194  #define _JS_CTYPE_PC                _JS_CTYPE(jsbytecode *,           _JS_PTR,"P", "", INFALLIBLE)  #define _JS_CTYPE_PC                _JS_CTYPE(jsbytecode *,           _JS_PTR,"P", "", INFALLIBLE)
195  #define _JS_CTYPE_JSVALPTR          _JS_CTYPE(jsval *,                _JS_PTR,"P", "", INFALLIBLE)  #define _JS_CTYPE_JSVALPTR          _JS_CTYPE(jsval *,                _JS_PTR,"P", "", INFALLIBLE)
196  #define _JS_CTYPE_JSVAL             _JS_JSVAL_CTYPE(                  _JS_PTR, "","v", INFALLIBLE)  #define _JS_CTYPE_JSVAL             _JS_JSVAL_CTYPE(                  _JS_PTR, "","v", INFALLIBLE)
197  #define _JS_CTYPE_JSVAL_RETRY       _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_COOKIE)  #define _JS_CTYPE_JSVAL_RETRY       _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_COOKIE)
198  #define _JS_CTYPE_JSVAL_FAIL        _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_STATUS)  #define _JS_CTYPE_JSVAL_FAIL        _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_STATUS)
199    #define _JS_CTYPE_JSID              _JS_CTYPE(jsid,                   _JS_PTR, --, --, INFALLIBLE)
200  #define _JS_CTYPE_BOOL              _JS_CTYPE(JSBool,                 _JS_I32, "","i", INFALLIBLE)  #define _JS_CTYPE_BOOL              _JS_CTYPE(JSBool,                 _JS_I32, "","i", INFALLIBLE)
201  #define _JS_CTYPE_BOOL_RETRY        _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_VOID)  #define _JS_CTYPE_BOOL_RETRY        _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_VOID)
202  #define _JS_CTYPE_BOOL_FAIL         _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_STATUS)  #define _JS_CTYPE_BOOL_FAIL         _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_STATUS)
# Line 196  Line 211 
211  #define _JS_CTYPE_STRING            _JS_CTYPE(JSString *,             _JS_PTR, "","s", INFALLIBLE)  #define _JS_CTYPE_STRING            _JS_CTYPE(JSString *,             _JS_PTR, "","s", INFALLIBLE)
212  #define _JS_CTYPE_STRING_RETRY      _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_NULL)  #define _JS_CTYPE_STRING_RETRY      _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_NULL)
213  #define _JS_CTYPE_STRING_FAIL       _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_STATUS)  #define _JS_CTYPE_STRING_FAIL       _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_STATUS)
214    #define _JS_CTYPE_STRINGPTR         _JS_CTYPE(JSString **,            _JS_PTR, --, --, INFALLIBLE)
215  #define _JS_CTYPE_OBJECT            _JS_CTYPE(JSObject *,             _JS_PTR, "","o", INFALLIBLE)  #define _JS_CTYPE_OBJECT            _JS_CTYPE(JSObject *,             _JS_PTR, "","o", INFALLIBLE)
216  #define _JS_CTYPE_OBJECT_RETRY      _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_NULL)  #define _JS_CTYPE_OBJECT_RETRY      _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_NULL)
217  #define _JS_CTYPE_OBJECT_FAIL       _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_STATUS)  #define _JS_CTYPE_OBJECT_FAIL       _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_STATUS)
# Line 208  Line 224 
224  #define _JS_CTYPE_FRAGMENT          _JS_CTYPE(nanojit::Fragment *,    _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_FRAGMENT          _JS_CTYPE(nanojit::Fragment *,    _JS_PTR, --, --, INFALLIBLE)
225  #define _JS_CTYPE_CLASS             _JS_CTYPE(JSClass *,              _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_CLASS             _JS_CTYPE(JSClass *,              _JS_PTR, --, --, INFALLIBLE)
226  #define _JS_CTYPE_DOUBLEPTR         _JS_CTYPE(double *,               _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_DOUBLEPTR         _JS_CTYPE(double *,               _JS_PTR, --, --, INFALLIBLE)
227    #define _JS_CTYPE_CHARPTR           _JS_CTYPE(char *,                 _JS_PTR, --, --, INFALLIBLE)
228    #define _JS_CTYPE_APNPTR            _JS_CTYPE(js_ArgsPrivateNative *, _JS_PTR, --, --, INFALLIBLE)
229    #define _JS_CTYPE_CVIPTR            _JS_CTYPE(const ClosureVarInfo *, _JS_PTR, --, --, INFALLIBLE)
230    
231  #define _JS_EXPAND(tokens)  tokens  #define _JS_EXPAND(tokens)  tokens
232    
# Line 248  Line 267 
267  #endif  #endif
268    
269  /*  /*
270   * Declare a C function named <op> and a CallInfo struct named <op>_callinfo so the   * This macro is used for builtin functions that can be called from JITted
271   * tracer can call it. |linkage| controls the visibility of both the function   * code.  It declares a C function named <op> and a CallInfo struct named
272   * and the CallInfo global. It can be extern, static, or FRIEND, which   * <op>_ci so the tracer can call it.  The <N> in JS_DEFINE_CALLINFO_<N> is
273   * specifies JS_FRIEND_API linkage for the function.   * the number of arguments the builtin takes.  Builtins with no arguments
274     * are not supported.  Using a macro is clunky but ensures that the types
275     * for each C function matches those for the corresponding CallInfo struct;
276     * mismatched types can cause subtle problems.
277     *
278     * The macro arguments are:
279     *
280     * - The linkage for the function and the associated CallInfo global.  It
281     *   can be extern, static, or FRIEND, which specifies JS_FRIEND_API linkage
282     *   for the function.
283     *
284     * - The return type. This identifier must name one of the _JS_TYPEINFO_*
285     *   macros defined in jsbuiltins.h.
286     *
287     * - The builtin name.
288     *
289     * - The parameter types.
290     *
291     * - The cse flag. 1 if the builtin call can be optimized away by common
292     *   subexpression elimination; otherwise 0. This should be 1 only if the
293     *   function is idempotent and the return value is determined solely by the
294     *   arguments.
295     *
296     * - The fold flag. Reserved. The same as cse for now.
297   */   */
298  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)                                     \  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)                                     \
299      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), (_JS_CTYPE_TYPE(at0)),                   \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), (_JS_CTYPE_TYPE(at0)),                   \
300                          (_JS_CTYPE_ARGSIZE(at0) << 2) | _JS_CTYPE_RETSIZE(rt), cse, fold)                          (_JS_CTYPE_ARGSIZE(at0) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
301                            _JS_CTYPE_RETSIZE(rt), cse, fold)
302  #define JS_DEFINE_CALLINFO_2(linkage, rt, op, at0, at1, cse, fold)                                \  #define JS_DEFINE_CALLINFO_2(linkage, rt, op, at0, at1, cse, fold)                                \
303      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
304                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1)),                               \                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1)),                               \
305                          (_JS_CTYPE_ARGSIZE(at0) << 4) | (_JS_CTYPE_ARGSIZE(at1) << 2) |           \                          (_JS_CTYPE_ARGSIZE(at0) << (2*nanojit::ARGSIZE_SHIFT)) |                  \
306                            (_JS_CTYPE_ARGSIZE(at1) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
307                          _JS_CTYPE_RETSIZE(rt),                                                    \                          _JS_CTYPE_RETSIZE(rt),                                                    \
308                          cse, fold)                          cse, fold)
309  #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold)                           \  #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold)                           \
310      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
311                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2)),          \                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2)),          \
312                          (_JS_CTYPE_ARGSIZE(at0) << 6) | (_JS_CTYPE_ARGSIZE(at1) << 4) |           \                          (_JS_CTYPE_ARGSIZE(at0) << (3*nanojit::ARGSIZE_SHIFT)) |                  \
313                          (_JS_CTYPE_ARGSIZE(at2) << 2) | _JS_CTYPE_RETSIZE(rt),                    \                          (_JS_CTYPE_ARGSIZE(at1) << (2*nanojit::ARGSIZE_SHIFT)) |                  \
314                            (_JS_CTYPE_ARGSIZE(at2) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
315                            _JS_CTYPE_RETSIZE(rt),                                                    \
316                          cse, fold)                          cse, fold)
317  #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)                      \  #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)                      \
318      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
319                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \
320                           _JS_CTYPE_TYPE(at3)),                                                    \                           _JS_CTYPE_TYPE(at3)),                                                    \
321                          (_JS_CTYPE_ARGSIZE(at0) << 8) | (_JS_CTYPE_ARGSIZE(at1) << 6) |           \                          (_JS_CTYPE_ARGSIZE(at0) << (4*nanojit::ARGSIZE_SHIFT)) |                  \
322                          (_JS_CTYPE_ARGSIZE(at2) << 4) | (_JS_CTYPE_ARGSIZE(at3) << 2) |           \                          (_JS_CTYPE_ARGSIZE(at1) << (3*nanojit::ARGSIZE_SHIFT)) |                  \
323                            (_JS_CTYPE_ARGSIZE(at2) << (2*nanojit::ARGSIZE_SHIFT)) |                  \
324                            (_JS_CTYPE_ARGSIZE(at3) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
325                          _JS_CTYPE_RETSIZE(rt),                                                    \                          _JS_CTYPE_RETSIZE(rt),                                                    \
326                          cse, fold)                          cse, fold)
327  #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)                 \  #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)                 \
328      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
329                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \
330                           _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4)),                               \                           _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4)),                               \
331                          (_JS_CTYPE_ARGSIZE(at0) << 10) | (_JS_CTYPE_ARGSIZE(at1) << 8) |          \                          (_JS_CTYPE_ARGSIZE(at0) << (5*nanojit::ARGSIZE_SHIFT)) |                  \
332                          (_JS_CTYPE_ARGSIZE(at2) << 6) | (_JS_CTYPE_ARGSIZE(at3) << 4) |           \                          (_JS_CTYPE_ARGSIZE(at1) << (4*nanojit::ARGSIZE_SHIFT)) |                  \
333                          (_JS_CTYPE_ARGSIZE(at4) << 2) | _JS_CTYPE_RETSIZE(rt),                    \                          (_JS_CTYPE_ARGSIZE(at2) << (3*nanojit::ARGSIZE_SHIFT)) |                  \
334                            (_JS_CTYPE_ARGSIZE(at3) << (2*nanojit::ARGSIZE_SHIFT)) |                  \
335                            (_JS_CTYPE_ARGSIZE(at4) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
336                            _JS_CTYPE_RETSIZE(rt),                                                    \
337                          cse, fold)                          cse, fold)
338    
339  #define JS_DEFINE_CALLINFO_6(linkage, rt, op, at0, at1, at2, at3, at4, at5, cse, fold)            \  #define JS_DEFINE_CALLINFO_6(linkage, rt, op, at0, at1, at2, at3, at4, at5, cse, fold)            \
340      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \      _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
341                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \                          (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \
342                           _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4), _JS_CTYPE_TYPE(at5)),          \                           _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4), _JS_CTYPE_TYPE(at5)),          \
343                          (_JS_CTYPE_ARGSIZE(at0) << 12) | (_JS_CTYPE_ARGSIZE(at1) << 10) |         \                          (_JS_CTYPE_ARGSIZE(at0) << (6*nanojit::ARGSIZE_SHIFT)) |                  \
344                          (_JS_CTYPE_ARGSIZE(at2) << 8) | (_JS_CTYPE_ARGSIZE(at3) << 6) |           \                          (_JS_CTYPE_ARGSIZE(at1) << (5*nanojit::ARGSIZE_SHIFT)) |                  \
345                          (_JS_CTYPE_ARGSIZE(at4) << 4) | (_JS_CTYPE_ARGSIZE(at5) << 2) |           \                          (_JS_CTYPE_ARGSIZE(at2) << (4*nanojit::ARGSIZE_SHIFT)) |                  \
346                            (_JS_CTYPE_ARGSIZE(at3) << (3*nanojit::ARGSIZE_SHIFT)) |                  \
347                            (_JS_CTYPE_ARGSIZE(at4) << (2*nanojit::ARGSIZE_SHIFT)) |                  \
348                            (_JS_CTYPE_ARGSIZE(at5) << (1*nanojit::ARGSIZE_SHIFT)) |                  \
349                          _JS_CTYPE_RETSIZE(rt), cse, fold)                          _JS_CTYPE_RETSIZE(rt), cse, fold)
350    
351  #define JS_DECLARE_CALLINFO(name)  extern const nanojit::CallInfo _JS_CALLINFO(name);  #define JS_DECLARE_CALLINFO(name)  extern const nanojit::CallInfo _JS_CALLINFO(name);
# Line 340  Line 394 
394    
395  #define JS_DEFINE_TRCINFO_1(name, tn0)                                                            \  #define JS_DEFINE_TRCINFO_1(name, tn0)                                                            \
396      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
397      JSTraceableNative name##_trcinfo[] = {                                                        \      JSSpecializedNative name##_sns[] = {                                                          \
398          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 }                                          \          { _JS_TN_INIT_HELPER_n tn0 }                                                              \
399      };      };                                                                                            \
400        JSNativeTraceInfo name##_trcinfo = { (JSFastNative)name, name##_sns };
401    
402  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)                                                       \  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)                                                       \
403      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
404      _JS_DEFINE_CALLINFO_n tn1                                                                     \      _JS_DEFINE_CALLINFO_n tn1                                                                     \
405      JSTraceableNative name##_trcinfo[] = {                                                        \      JSSpecializedNative name##_sns[] = {                                                          \
406          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                                 \
407          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 }                                          \          { _JS_TN_INIT_HELPER_n tn1 }                                                              \
408      };      };                                                                                            \
409        JSNativeTraceInfo name##_trcinfo = { (JSFastNative)name, name##_sns };
410    
411  #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2)                                                  \  #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2)                                                  \
412      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
413      _JS_DEFINE_CALLINFO_n tn1                                                                     \      _JS_DEFINE_CALLINFO_n tn1                                                                     \
414      _JS_DEFINE_CALLINFO_n tn2                                                                     \      _JS_DEFINE_CALLINFO_n tn2                                                                     \
415      JSTraceableNative name##_trcinfo[] = {                                                        \      JSSpecializedNative name##_sns[] = {                                                          \
416          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                                 \
417          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                                                 \
418          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn2 }                                          \          { _JS_TN_INIT_HELPER_n tn2 }                                                              \
419      };      };                                                                                            \
420        JSNativeTraceInfo name##_trcinfo = { (JSFastNative)name, name##_sns };
421    
422  #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3)                                             \  #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3)                                             \
423      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
424      _JS_DEFINE_CALLINFO_n tn1                                                                     \      _JS_DEFINE_CALLINFO_n tn1                                                                     \
425      _JS_DEFINE_CALLINFO_n tn2                                                                     \      _JS_DEFINE_CALLINFO_n tn2                                                                     \
426      _JS_DEFINE_CALLINFO_n tn3                                                                     \      _JS_DEFINE_CALLINFO_n tn3                                                                     \
427      JSTraceableNative name##_trcinfo[] = {                                                        \      JSSpecializedNative name##_sns[] = {                                                          \
428          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                                 \
429          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                                                 \
430          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn2 | JSTN_MORE },                             \          { _JS_TN_INIT_HELPER_n tn2 | JSTN_MORE },                                                 \
431          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn3 }                                          \          { _JS_TN_INIT_HELPER_n tn3 }                                                              \
432      };      };                                                                                            \
433        JSNativeTraceInfo name##_trcinfo = { (JSFastNative)name, name##_sns };
434    
435  #define _JS_DEFINE_CALLINFO_n(n, args)  JS_DEFINE_CALLINFO_##n args  #define _JS_DEFINE_CALLINFO_n(n, args)  JS_DEFINE_CALLINFO_##n args
436    
# Line 382  Line 440 
440  jsdouble FASTCALL  jsdouble FASTCALL
441  js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed);  js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed);
442    
 static JS_INLINE JSBool  
 js_Int32ToId(JSContext* cx, int32 index, jsid* id)  
 {  
     if (index <= JSVAL_INT_MAX) {  
         *id = INT_TO_JSID(index);  
         return JS_TRUE;  
     }  
     JSString* str = js_NumberToString(cx, index);  
     if (!str)  
         return JS_FALSE;  
     return js_ValueToStringId(cx, STRING_TO_JSVAL(str), id);  
 }  
   
443  /* Extern version of js_SetBuiltinError. */  /* Extern version of js_SetBuiltinError. */
444  extern JS_FRIEND_API(void)  extern JS_FRIEND_API(void)
445  js_SetTraceableNativeFailed(JSContext *cx);  js_SetTraceableNativeFailed(JSContext *cx);
446    
447    extern jsdouble FASTCALL
448    js_dmod(jsdouble a, jsdouble b);
449    
450  #else  #else
451    
452  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)
# Line 406  Line 454 
454  #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold)  #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold)
455  #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)  #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)
456  #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)  #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)
457    #define JS_DEFINE_CALLINFO_6(linkage, rt, op, at0, at1, at2, at3, at4, at5, cse, fold)
458  #define JS_DECLARE_CALLINFO(name)  #define JS_DECLARE_CALLINFO(name)
459  #define JS_DEFINE_TRCINFO_1(name, tn0)  #define JS_DEFINE_TRCINFO_1(name, tn0)
460  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)
# Line 420  Line 469 
469    
470  /* Defined in jsarray.cpp. */  /* Defined in jsarray.cpp. */
471  JS_DECLARE_CALLINFO(js_Array_dense_setelem)  JS_DECLARE_CALLINFO(js_Array_dense_setelem)
472    JS_DECLARE_CALLINFO(js_Array_dense_setelem_int)
473    JS_DECLARE_CALLINFO(js_Array_dense_setelem_double)
474  JS_DECLARE_CALLINFO(js_NewEmptyArray)  JS_DECLARE_CALLINFO(js_NewEmptyArray)
475    JS_DECLARE_CALLINFO(js_NewEmptyArrayWithLength)
476  JS_DECLARE_CALLINFO(js_NewUninitializedArray)  JS_DECLARE_CALLINFO(js_NewUninitializedArray)
477  JS_DECLARE_CALLINFO(js_ArrayCompPush)  JS_DECLARE_CALLINFO(js_ArrayCompPush)
478    
479    /* Defined in jsfun.cpp. */
480    JS_DECLARE_CALLINFO(js_AllocFlatClosure)
481    JS_DECLARE_CALLINFO(js_PutArguments)
482    
483    /* Defined in jsfun.cpp. */
484    JS_DECLARE_CALLINFO(js_SetCallVar)
485    JS_DECLARE_CALLINFO(js_SetCallArg)
486    
487  /* Defined in jsnum.cpp. */  /* Defined in jsnum.cpp. */
488  JS_DECLARE_CALLINFO(js_NumberToString)  JS_DECLARE_CALLINFO(js_NumberToString)
489    
# Line 439  Line 499 
499  JS_DECLARE_CALLINFO(js_String_p_charCodeAt_int)  JS_DECLARE_CALLINFO(js_String_p_charCodeAt_int)
500    
501  /* Defined in jsbuiltins.cpp. */  /* Defined in jsbuiltins.cpp. */
502  #define BUILTIN1(linkage, rt, op, at0,                     cse, fold)  JS_DECLARE_CALLINFO(op)  JS_DECLARE_CALLINFO(js_BoxDouble)
503  #define BUILTIN2(linkage, rt, op, at0, at1,                cse, fold)  JS_DECLARE_CALLINFO(op)  JS_DECLARE_CALLINFO(js_BoxInt32)
504  #define BUILTIN3(linkage, rt, op, at0, at1, at2,           cse, fold)  JS_DECLARE_CALLINFO(op)  JS_DECLARE_CALLINFO(js_UnboxDouble)
505  #define BUILTIN4(linkage, rt, op, at0, at1, at2, at3,      cse, fold)  JS_DECLARE_CALLINFO(op)  JS_DECLARE_CALLINFO(js_UnboxInt32)
506  #define BUILTIN5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)  JS_DECLARE_CALLINFO(op)  JS_DECLARE_CALLINFO(js_dmod)
507  #include "builtins.tbl"  JS_DECLARE_CALLINFO(js_imod)
508  #undef BUILTIN  JS_DECLARE_CALLINFO(js_DoubleToInt32)
509  #undef BUILTIN1  JS_DECLARE_CALLINFO(js_DoubleToUint32)
510  #undef BUILTIN2  
511  #undef BUILTIN3  JS_DECLARE_CALLINFO(js_StringToNumber)
512  #undef BUILTIN4  JS_DECLARE_CALLINFO(js_StringToInt32)
513  #undef BUILTIN5  JS_DECLARE_CALLINFO(js_CloseIterator)
514    JS_DECLARE_CALLINFO(js_CallTree)
515    JS_DECLARE_CALLINFO(js_AddProperty)
516    JS_DECLARE_CALLINFO(js_HasNamedProperty)
517    JS_DECLARE_CALLINFO(js_HasNamedPropertyInt32)
518    JS_DECLARE_CALLINFO(js_TypeOfObject)
519    JS_DECLARE_CALLINFO(js_TypeOfBoolean)
520    JS_DECLARE_CALLINFO(js_BooleanOrUndefinedToNumber)
521    JS_DECLARE_CALLINFO(js_BooleanOrUndefinedToString)
522    JS_DECLARE_CALLINFO(js_Arguments)
523    JS_DECLARE_CALLINFO(js_NewNullClosure)
524    JS_DECLARE_CALLINFO(js_ConcatN)
525    
526  #endif /* jsbuiltins_h___ */  #endif /* jsbuiltins_h___ */

Legend:
Removed from v.506  
changed lines
  Added in v.507

  ViewVC Help
Powered by ViewVC 1.1.24