/[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 459 by siliconforks, Tue Dec 9 03:37:47 2008 UTC revision 460 by siliconforks, Sat Sep 26 23:15:22 2009 UTC
# Line 45  Line 45 
45  #include "nanojit/nanojit.h"  #include "nanojit/nanojit.h"
46  #include "jstracer.h"  #include "jstracer.h"
47    
48  enum JSTNErrType { INFALLIBLE, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_JSVAL };  enum JSTNErrType { INFALLIBLE, FAIL_STATUS, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_COOKIE };
49  enum { JSTN_ERRTYPE_MASK = 7, JSTN_MORE = 8 };  enum { JSTN_ERRTYPE_MASK = 0x07, JSTN_UNBOX_AFTER = 0x08, JSTN_MORE = 0x10,
50           JSTN_CONSTRUCTOR = 0x20 };
51    
52  #define JSTN_ERRTYPE(jstn)  ((jstn)->flags & JSTN_ERRTYPE_MASK)  #define JSTN_ERRTYPE(jstn)  ((jstn)->flags & JSTN_ERRTYPE_MASK)
53    
# Line 81  Line 82 
82      const nanojit::CallInfo *builtin;      const nanojit::CallInfo *builtin;
83      const char              *prefix;      const char              *prefix;
84      const char              *argtypes;      const char              *argtypes;
85      uintN                   flags;  /* JSTN_MORE | JSTNErrType */      uintN                   flags;  /* JSTNErrType | JSTN_UNBOX_AFTER | JSTN_MORE |
86                                           JSTN_CONSTRUCTOR */
87  };  };
88    
89  /*  /*
# Line 90  Line 92 
92   * 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
93   * error.   * error.
94   */   */
95  #define JSVAL_ERROR_COOKIE OBJECT_TO_JSVAL((void*)0x10)  #define JSVAL_ERROR_COOKIE OBJECT_TO_JSVAL((JSObject*)0x10)
96    
97  /* Macros used by JS_DEFINE_CALLINFOn. */  /* Macros used by JS_DEFINE_CALLINFOn. */
98  #ifdef DEBUG  #ifdef DEBUG
# Line 116  Line 118 
118   * 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
119   * in JS_DEFINE_TRCINFO.   * in JS_DEFINE_TRCINFO.
120   *   *
121   * If a traceable native can fail, the values that indicate failure are part of   * There are three kinds of traceable-native error handling.
122   * the return type:   *
123   *     JSVAL_FAIL: JSVAL_ERROR_COOKIE   *   - If a traceable native's return type ends with _FAIL, it always runs to
124   *     BOOL_FAIL: JSVAL_TO_BOOLEAN(JSVAL_VOID)   *     completion.  It can either succeed or fail with an error or exception;
125   *     INT32_FAIL: any negative value   *     on success, it may or may not stay on trace.  There may be side effects
126   *     STRING_FAIL: NULL   *     in any case.  If the call succeeds but bails off trace, we resume in the
127   *     OBJECT_FAIL_NULL: NULL   *     interpreter at the next opcode.
128   *     OBJECT_FAIL_VOID: JSVAL_TO_OBJECT(JSVAL_VOID)   *
129   *         (NULL means the function successfully returned JS null.)   *     _FAIL builtins indicate failure or bailing off trace by setting bits in
130     *     cx->interpState->builtinStatus.
131     *
132     *   - If a traceable native's return type contains _RETRY, it can either
133     *     succeed, fail with a JS exception, or tell the caller to bail off trace
134     *     and retry the call from the interpreter.  The last case happens if the
135     *     builtin discovers that it can't do its job without examining the JS
136     *     stack, reentering the interpreter, accessing properties of the global
137     *     object, etc.
138     *
139     *     The builtin must detect the need to retry before committing any side
140     *     effects.  If a builtin can't do this, it must use a _FAIL return type
141     *     instead of _RETRY.
142     *
143     *     _RETRY builtins indicate failure with a special return value that
144     *     depends on the return type:
145     *
146     *         BOOL_RETRY: JSVAL_TO_BOOLEAN(JSVAL_VOID)
147     *         INT32_RETRY: any negative value
148     *         STRING_RETRY: NULL
149     *         OBJECT_RETRY_NULL: NULL
150     *         JSVAL_RETRY: JSVAL_ERROR_COOKIE
151     *
152     *     _RETRY function calls are faster than _FAIL calls.  Each _RETRY call
153     *     saves two writes to cx->bailExit and a read from state->builtinStatus.
154     *
155     *   - All other traceable natives are infallible (e.g. Date.now, Math.log).
156   *   *
157   * Special builtins known to the tracer can have their own idiosyncratic   * Special builtins known to the tracer can have their own idiosyncratic
158   * error codes.   * error codes.
# Line 140  Line 168 
168   * effects.   * effects.
169   */   */
170  #define _JS_CTYPE(ctype, size, pch, ach, flags)     (ctype, size, pch, ach, flags)  #define _JS_CTYPE(ctype, size, pch, ach, flags)     (ctype, size, pch, ach, flags)
171  #define _JS_CTYPE_CONTEXT          _JS_CTYPE(JSContext *,            _JS_PTR,"C", "", INFALLIBLE)  #define _JS_JSVAL_CTYPE(size, pch, ach, flags)  (jsval, size, pch, ach, (flags | JSTN_UNBOX_AFTER))
172  #define _JS_CTYPE_RUNTIME          _JS_CTYPE(JSRuntime *,            _JS_PTR,"R", "", INFALLIBLE)  
173  #define _JS_CTYPE_THIS             _JS_CTYPE(JSObject *,             _JS_PTR,"T", "", INFALLIBLE)  #define _JS_CTYPE_CONTEXT           _JS_CTYPE(JSContext *,            _JS_PTR,"C", "", INFALLIBLE)
174  #define _JS_CTYPE_THIS_DOUBLE      _JS_CTYPE(jsdouble,               _JS_F64,"D", "", INFALLIBLE)  #define _JS_CTYPE_RUNTIME           _JS_CTYPE(JSRuntime *,            _JS_PTR,"R", "", INFALLIBLE)
175  #define _JS_CTYPE_THIS_STRING      _JS_CTYPE(JSString *,             _JS_PTR,"S", "", INFALLIBLE)  #define _JS_CTYPE_THIS              _JS_CTYPE(JSObject *,             _JS_PTR,"T", "", INFALLIBLE)
176  #define _JS_CTYPE_PC               _JS_CTYPE(jsbytecode *,           _JS_PTR,"P", "", INFALLIBLE)  #define _JS_CTYPE_THIS_DOUBLE       _JS_CTYPE(jsdouble,               _JS_F64,"D", "", INFALLIBLE)
177  #define _JS_CTYPE_JSVAL            _JS_CTYPE(jsval,                  _JS_PTR, "","v", INFALLIBLE)  #define _JS_CTYPE_THIS_STRING       _JS_CTYPE(JSString *,             _JS_PTR,"S", "", INFALLIBLE)
178  #define _JS_CTYPE_JSVAL_FAIL       _JS_CTYPE(jsval,                  _JS_PTR, --, --, FAIL_JSVAL)  #define _JS_CTYPE_CALLEE            _JS_CTYPE(JSObject *,             _JS_PTR,"f","",  INFALLIBLE)
179  #define _JS_CTYPE_BOOL             _JS_CTYPE(JSBool,                 _JS_I32, "","i", INFALLIBLE)  #define _JS_CTYPE_CALLEE_PROTOTYPE  _JS_CTYPE(JSObject *,             _JS_PTR,"p","",  INFALLIBLE)
180  #define _JS_CTYPE_BOOL_FAIL        _JS_CTYPE(int32,                  _JS_I32, --, --, FAIL_VOID)  #define _JS_CTYPE_PC                _JS_CTYPE(jsbytecode *,           _JS_PTR,"P", "", INFALLIBLE)
181  #define _JS_CTYPE_INT32            _JS_CTYPE(int32,                  _JS_I32, "","i", INFALLIBLE)  #define _JS_CTYPE_JSVALPTR          _JS_CTYPE(jsval *,                _JS_PTR,"P", "", INFALLIBLE)
182  #define _JS_CTYPE_INT32_FAIL       _JS_CTYPE(int32,                  _JS_I32, --, --, FAIL_NEG)  #define _JS_CTYPE_JSVAL             _JS_JSVAL_CTYPE(                  _JS_PTR, "","v", INFALLIBLE)
183  #define _JS_CTYPE_UINT32           _JS_CTYPE(uint32,                 _JS_I32, --, --, INFALLIBLE)  #define _JS_CTYPE_JSVAL_RETRY       _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_COOKIE)
184  #define _JS_CTYPE_DOUBLE           _JS_CTYPE(jsdouble,               _JS_F64, "","d", INFALLIBLE)  #define _JS_CTYPE_JSVAL_FAIL        _JS_JSVAL_CTYPE(                  _JS_PTR, --, --, FAIL_STATUS)
185  #define _JS_CTYPE_STRING           _JS_CTYPE(JSString *,             _JS_PTR, "","s", INFALLIBLE)  #define _JS_CTYPE_BOOL              _JS_CTYPE(JSBool,                 _JS_I32, "","i", INFALLIBLE)
186  #define _JS_CTYPE_STRING_FAIL      _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_NULL)  #define _JS_CTYPE_BOOL_RETRY        _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_VOID)
187  #define _JS_CTYPE_OBJECT           _JS_CTYPE(JSObject *,             _JS_PTR, "","o", INFALLIBLE)  #define _JS_CTYPE_BOOL_FAIL         _JS_CTYPE(JSBool,                 _JS_I32, --, --, FAIL_STATUS)
188  #define _JS_CTYPE_OBJECT_FAIL_NULL _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_NULL)  #define _JS_CTYPE_INT32             _JS_CTYPE(int32,                  _JS_I32, "","i", INFALLIBLE)
189  #define _JS_CTYPE_OBJECT_FAIL_VOID _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_VOID)  #define _JS_CTYPE_INT32_RETRY       _JS_CTYPE(int32,                  _JS_I32, --, --, FAIL_NEG)
190  #define _JS_CTYPE_REGEXP           _JS_CTYPE(JSObject *,             _JS_PTR, "","r", INFALLIBLE)  #define _JS_CTYPE_INT32_FAIL        _JS_CTYPE(int32,                  _JS_I32, --, --, FAIL_STATUS)
191  #define _JS_CTYPE_SCOPEPROP        _JS_CTYPE(JSScopeProperty *,      _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_UINT32            _JS_CTYPE(uint32,                 _JS_I32, "","i", INFALLIBLE)
192  #define _JS_CTYPE_SIDEEXIT         _JS_CTYPE(SideExit *,             _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_UINT32_RETRY      _JS_CTYPE(uint32,                 _JS_I32, --, --, FAIL_NEG)
193  #define _JS_CTYPE_INTERPSTATE      _JS_CTYPE(InterpState *,          _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_UINT32_FAIL       _JS_CTYPE(uint32,                 _JS_I32, --, --, FAIL_STATUS)
194  #define _JS_CTYPE_FRAGMENT         _JS_CTYPE(nanojit::Fragment *,    _JS_PTR, --, --, INFALLIBLE)  #define _JS_CTYPE_DOUBLE            _JS_CTYPE(jsdouble,               _JS_F64, "","d", INFALLIBLE)
195    #define _JS_CTYPE_DOUBLE_FAIL       _JS_CTYPE(jsdouble,               _JS_F64, --, --, FAIL_STATUS)
196    #define _JS_CTYPE_STRING            _JS_CTYPE(JSString *,             _JS_PTR, "","s", INFALLIBLE)
197    #define _JS_CTYPE_STRING_RETRY      _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_NULL)
198    #define _JS_CTYPE_STRING_FAIL       _JS_CTYPE(JSString *,             _JS_PTR, --, --, FAIL_STATUS)
199    #define _JS_CTYPE_OBJECT            _JS_CTYPE(JSObject *,             _JS_PTR, "","o", INFALLIBLE)
200    #define _JS_CTYPE_OBJECT_RETRY      _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_NULL)
201    #define _JS_CTYPE_OBJECT_FAIL       _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_STATUS)
202    #define _JS_CTYPE_CONSTRUCTOR_RETRY _JS_CTYPE(JSObject *,             _JS_PTR, --, --, FAIL_NULL | \
203                                                                                      JSTN_CONSTRUCTOR)
204    #define _JS_CTYPE_REGEXP            _JS_CTYPE(JSObject *,             _JS_PTR, "","r", INFALLIBLE)
205    #define _JS_CTYPE_SCOPEPROP         _JS_CTYPE(JSScopeProperty *,      _JS_PTR, --, --, INFALLIBLE)
206    #define _JS_CTYPE_SIDEEXIT          _JS_CTYPE(SideExit *,             _JS_PTR, --, --, INFALLIBLE)
207    #define _JS_CTYPE_INTERPSTATE       _JS_CTYPE(InterpState *,          _JS_PTR, --, --, INFALLIBLE)
208    #define _JS_CTYPE_FRAGMENT          _JS_CTYPE(nanojit::Fragment *,    _JS_PTR, --, --, INFALLIBLE)
209    #define _JS_CTYPE_CLASS             _JS_CTYPE(JSClass *,              _JS_PTR, --, --, INFALLIBLE)
210    #define _JS_CTYPE_DOUBLEPTR         _JS_CTYPE(double *,               _JS_PTR, --, --, INFALLIBLE)
211    
212  #define _JS_EXPAND(tokens)  tokens  #define _JS_EXPAND(tokens)  tokens
213    
# Line 241  Line 285 
285                          (_JS_CTYPE_ARGSIZE(at4) << 2) | _JS_CTYPE_RETSIZE(rt),                    \                          (_JS_CTYPE_ARGSIZE(at4) << 2) | _JS_CTYPE_RETSIZE(rt),                    \
286                          cse, fold)                          cse, fold)
287    
288    #define JS_DEFINE_CALLINFO_6(linkage, rt, op, at0, at1, at2, at3, at4, at5, cse, fold)            \
289        _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt),                                          \
290                            (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2),           \
291                             _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4), _JS_CTYPE_TYPE(at5)),          \
292                            (_JS_CTYPE_ARGSIZE(at0) << 12) | (_JS_CTYPE_ARGSIZE(at1) << 10) |         \
293                            (_JS_CTYPE_ARGSIZE(at2) << 8) | (_JS_CTYPE_ARGSIZE(at3) << 6) |           \
294                            (_JS_CTYPE_ARGSIZE(at4) << 4) | (_JS_CTYPE_ARGSIZE(at5) << 2) |           \
295                            _JS_CTYPE_RETSIZE(rt), cse, fold)
296    
297  #define JS_DECLARE_CALLINFO(name)  extern const nanojit::CallInfo _JS_CALLINFO(name);  #define JS_DECLARE_CALLINFO(name)  extern const nanojit::CallInfo _JS_CALLINFO(name);
298    
299  #define _JS_TN_INIT_HELPER_n(n, args)  _JS_TN_INIT_HELPER_##n args  #define _JS_TN_INIT_HELPER_n(n, args)  _JS_TN_INIT_HELPER_##n args
# Line 254  Line 307 
307  #define _JS_TN_INIT_HELPER_2(linkage, rt, op, at0, at1, cse, fold)                                \  #define _JS_TN_INIT_HELPER_2(linkage, rt, op, at0, at1, cse, fold)                                \
308      &_JS_CALLINFO(op),                                                                            \      &_JS_CALLINFO(op),                                                                            \
309      _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                                                        \      _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                                                        \
310      _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1),                                                        \      _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at0),                                                        \
311      _JS_CTYPE_FLAGS(rt)      _JS_CTYPE_FLAGS(rt)
312    
313  #define _JS_TN_INIT_HELPER_3(linkage, rt, op, at0, at1, at2, cse, fold)                           \  #define _JS_TN_INIT_HELPER_3(linkage, rt, op, at0, at1, at2, cse, fold)                           \
314      &_JS_CALLINFO(op),                                                                            \      &_JS_CALLINFO(op),                                                                            \
315      _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                                     \      _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                                     \
316      _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2),                                     \      _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at0),                                     \
317      _JS_CTYPE_FLAGS(rt)      _JS_CTYPE_FLAGS(rt)
318    
319  #define _JS_TN_INIT_HELPER_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)                      \  #define _JS_TN_INIT_HELPER_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)                      \
320      &_JS_CALLINFO(op),                                                                            \      &_JS_CALLINFO(op),                                                                            \
321      _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                  \      _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                  \
322      _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at3),                  \      _JS_CTYPE_ACH(at3) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at0),                  \
323      _JS_CTYPE_FLAGS(rt)      _JS_CTYPE_FLAGS(rt)
324    
325  #define _JS_TN_INIT_HELPER_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)                 \  #define _JS_TN_INIT_HELPER_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)                 \
326      &_JS_CALLINFO(op),                                                                            \      &_JS_CALLINFO(op),                                                                            \
327      _JS_CTYPE_PCH(at4) _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1)                   \      _JS_CTYPE_PCH(at4) _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1)                   \
328          _JS_CTYPE_PCH(at0),                                                                       \          _JS_CTYPE_PCH(at0),                                                                       \
329      _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at3)                   \      _JS_CTYPE_ACH(at4) _JS_CTYPE_ACH(at3) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at1)                   \
330          _JS_CTYPE_ACH(at4),                                                                       \          _JS_CTYPE_ACH(at0),                                                                       \
331        _JS_CTYPE_FLAGS(rt)
332    
333    #define _JS_TN_INIT_HELPER_6(linkage, rt, op, at0, at1, at2, at3, at4, at5, cse, fold)            \
334        &_JS_CALLINFO(op),                                                                            \
335        _JS_CTYPE_PCH(at5) _JS_CTYPE_PCH(at4) _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2)                   \
336            _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0),                                                    \
337        _JS_CTYPE_ACH(at5) _JS_CTYPE_ACH(at4) _JS_CTYPE_ACH(at3) _JS_CTYPE_ACH(at2)                   \
338            _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at0),                                                    \
339      _JS_CTYPE_FLAGS(rt)      _JS_CTYPE_FLAGS(rt)
340    
341  #define JS_DEFINE_TRCINFO_1(name, tn0)                                                            \  #define JS_DEFINE_TRCINFO_1(name, tn0)                                                            \
342      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
343      JSTraceableNative name##_trcinfo[] = {                                                        \      JSTraceableNative name##_trcinfo[] = {                                                        \
344          { name, _JS_TN_INIT_HELPER_n tn0 }                                                        \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 }                                          \
345      };      };
346    
347  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)                                                       \  #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)                                                       \
348      _JS_DEFINE_CALLINFO_n tn0                                                                     \      _JS_DEFINE_CALLINFO_n tn0                                                                     \
349      _JS_DEFINE_CALLINFO_n tn1                                                                     \      _JS_DEFINE_CALLINFO_n tn1                                                                     \
350      JSTraceableNative name##_trcinfo[] = {                                                        \      JSTraceableNative name##_trcinfo[] = {                                                        \
351          { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \
352          { name, _JS_TN_INIT_HELPER_n tn1 }                                                        \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 }                                          \
353      };      };
354    
355  #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2)                                                  \  #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2)                                                  \
# Line 296  Line 357 
357      _JS_DEFINE_CALLINFO_n tn1                                                                     \      _JS_DEFINE_CALLINFO_n tn1                                                                     \
358      _JS_DEFINE_CALLINFO_n tn2                                                                     \      _JS_DEFINE_CALLINFO_n tn2                                                                     \
359      JSTraceableNative name##_trcinfo[] = {                                                        \      JSTraceableNative name##_trcinfo[] = {                                                        \
360          { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \
361          { name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                             \
362          { name, _JS_TN_INIT_HELPER_n tn2 }                                                        \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn2 }                                          \
363      };      };
364    
365  #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3)                                             \  #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3)                                             \
# Line 307  Line 368 
368      _JS_DEFINE_CALLINFO_n tn2                                                                     \      _JS_DEFINE_CALLINFO_n tn2                                                                     \
369      _JS_DEFINE_CALLINFO_n tn3                                                                     \      _JS_DEFINE_CALLINFO_n tn3                                                                     \
370      JSTraceableNative name##_trcinfo[] = {                                                        \      JSTraceableNative name##_trcinfo[] = {                                                        \
371          { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE },                             \
372          { name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE },                             \
373          { name, _JS_TN_INIT_HELPER_n tn2 | JSTN_MORE },                                           \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn2 | JSTN_MORE },                             \
374          { name, _JS_TN_INIT_HELPER_n tn3 }                                                        \          { (JSFastNative)name, _JS_TN_INIT_HELPER_n tn3 }                                          \
375      };      };
376    
377  #define _JS_DEFINE_CALLINFO_n(n, args)  JS_DEFINE_CALLINFO_##n args  #define _JS_DEFINE_CALLINFO_n(n, args)  JS_DEFINE_CALLINFO_##n args
# Line 321  Line 382 
382  jsdouble FASTCALL  jsdouble FASTCALL
383  js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed);  js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed);
384    
385    static JS_INLINE JSBool
386    js_Int32ToId(JSContext* cx, int32 index, jsid* id)
387    {
388        if (index <= JSVAL_INT_MAX) {
389            *id = INT_TO_JSID(index);
390            return JS_TRUE;
391        }
392        JSString* str = js_NumberToString(cx, index);
393        if (!str)
394            return JS_FALSE;
395        return js_ValueToStringId(cx, STRING_TO_JSVAL(str), id);
396    }
397    
398    /* Extern version of js_SetBuiltinError. */
399    extern JS_FRIEND_API(void)
400    js_SetTraceableNativeFailed(JSContext *cx);
401    
402  #else  #else
403    
404  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)  #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)
# Line 336  Line 414 
414    
415  #endif /* !JS_TRACER */  #endif /* !JS_TRACER */
416    
417  /* Defined in jsarray.cpp */  /* Defined in jsobj.cpp. */
418  JS_DECLARE_CALLINFO(js_Array_dense_setelem)  JS_DECLARE_CALLINFO(js_Object_tn)
419  JS_DECLARE_CALLINFO(js_FastNewArray)  JS_DECLARE_CALLINFO(js_NewInstance)
 JS_DECLARE_CALLINFO(js_Array_1int)  
 JS_DECLARE_CALLINFO(js_Array_1str)  
 JS_DECLARE_CALLINFO(js_Array_2obj)  
 JS_DECLARE_CALLINFO(js_Array_3num)  
420    
421  /* Defined in jsdate.cpp */  /* Defined in jsarray.cpp. */
422  JS_DECLARE_CALLINFO(js_FastNewDate)  JS_DECLARE_CALLINFO(js_Array_dense_setelem)
423    JS_DECLARE_CALLINFO(js_NewEmptyArray)
424    JS_DECLARE_CALLINFO(js_NewUninitializedArray)
425    JS_DECLARE_CALLINFO(js_ArrayCompPush)
426    
427  /* Defined in jsnum.cpp */  /* Defined in jsnum.cpp. */
428  JS_DECLARE_CALLINFO(js_NumberToString)  JS_DECLARE_CALLINFO(js_NumberToString)
429    
430  /* Defined in jsstr.cpp */  /* Defined in jsstr.cpp. */
431    JS_DECLARE_CALLINFO(js_String_tn)
432    JS_DECLARE_CALLINFO(js_CompareStrings)
433  JS_DECLARE_CALLINFO(js_ConcatStrings)  JS_DECLARE_CALLINFO(js_ConcatStrings)
434    JS_DECLARE_CALLINFO(js_EqualStrings)
435  JS_DECLARE_CALLINFO(js_String_getelem)  JS_DECLARE_CALLINFO(js_String_getelem)
436  JS_DECLARE_CALLINFO(js_String_p_charCodeAt)  JS_DECLARE_CALLINFO(js_String_p_charCodeAt)
437  JS_DECLARE_CALLINFO(js_EqualStrings)  JS_DECLARE_CALLINFO(js_String_p_charCodeAt0)
438  JS_DECLARE_CALLINFO(js_CompareStrings)  JS_DECLARE_CALLINFO(js_String_p_charCodeAt0_int)
439    JS_DECLARE_CALLINFO(js_String_p_charCodeAt_int)
440    
441  /* Defined in jsbuiltins.cpp */  /* Defined in jsbuiltins.cpp. */
442  #define BUILTIN1(linkage, rt, op, at0,                     cse, fold)  JS_DECLARE_CALLINFO(op)  #define BUILTIN1(linkage, rt, op, at0,                     cse, fold)  JS_DECLARE_CALLINFO(op)
443  #define BUILTIN2(linkage, rt, op, at0, at1,                cse, fold)  JS_DECLARE_CALLINFO(op)  #define BUILTIN2(linkage, rt, op, at0, at1,                cse, fold)  JS_DECLARE_CALLINFO(op)
444  #define BUILTIN3(linkage, rt, op, at0, at1, at2,           cse, fold)  JS_DECLARE_CALLINFO(op)  #define BUILTIN3(linkage, rt, op, at0, at1, at2,           cse, fold)  JS_DECLARE_CALLINFO(op)

Legend:
Removed from v.459  
changed lines
  Added in v.460

  ViewVC Help
Powered by ViewVC 1.1.24