PageRenderTime 61ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/js/lib/Socket.IO-node/support/expresso/deps/jscoverage/js/jsbuiltins.h

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
C++ Header | 374 lines | 224 code | 39 blank | 111 comment | 1 complexity | 92a62f42fe3f3379462b8554aedac1a2 MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
  2. * vim: set ts=8 sw=4 et tw=99:
  3. *
  4. * ***** BEGIN LICENSE BLOCK *****
  5. * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  6. *
  7. * The contents of this file are subject to the Mozilla Public License Version
  8. * 1.1 (the "License"); you may not use this file except in compliance with
  9. * the License. You may obtain a copy of the License at
  10. * http://www.mozilla.org/MPL/
  11. *
  12. * Software distributed under the License is distributed on an "AS IS" basis,
  13. * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  14. * for the specific language governing rights and limitations under the
  15. * License.
  16. *
  17. * The Original Code is Mozilla SpiderMonkey JavaScript 1.9 code, released
  18. * May 28, 2008.
  19. *
  20. * The Initial Developer of the Original Code is
  21. * Mozilla Corporation.
  22. *
  23. * Contributor(s):
  24. * Jason Orendorff <jorendorff@mozilla.com>
  25. *
  26. * Alternatively, the contents of this file may be used under the terms of
  27. * either of the GNU General Public License Version 2 or later (the "GPL"),
  28. * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  29. * in which case the provisions of the GPL or the LGPL are applicable instead
  30. * of those above. If you wish to allow use of your version of this file only
  31. * under the terms of either the GPL or the LGPL, and not to allow others to
  32. * use your version of this file under the terms of the MPL, indicate your
  33. * decision by deleting the provisions above and replace them with the notice
  34. * and other provisions required by the GPL or the LGPL. If you do not delete
  35. * the provisions above, a recipient may use your version of this file under
  36. * the terms of any one of the MPL, the GPL or the LGPL.
  37. *
  38. * ***** END LICENSE BLOCK ***** */
  39. #ifndef jsbuiltins_h___
  40. #define jsbuiltins_h___
  41. #ifdef JS_TRACER
  42. #include "nanojit/nanojit.h"
  43. #include "jstracer.h"
  44. enum JSTNErrType { INFALLIBLE, FAIL_NULL, FAIL_NEG, FAIL_VOID, FAIL_JSVAL };
  45. enum { JSTN_ERRTYPE_MASK = 7, JSTN_MORE = 8 };
  46. #define JSTN_ERRTYPE(jstn) ((jstn)->flags & JSTN_ERRTYPE_MASK)
  47. /*
  48. * |prefix| and |argtypes| declare what arguments should be passed to the
  49. * native function. |prefix| can contain the following characters:
  50. *
  51. * 'C': a JSContext* argument
  52. * 'T': |this| as a JSObject* argument (bails if |this| is not an object)
  53. * 'S': |this| as a JSString* argument (bails if |this| is not a string)
  54. * 'R': a JSRuntime* argument
  55. * 'P': the pc as a jsbytecode*
  56. * 'D': |this| as a number (jsdouble)
  57. * 'f': the function being called, as a JSObject*
  58. * 'p': the .prototype of the function, as a JSObject*
  59. *
  60. * The corresponding things will get passed as arguments to the builtin in
  61. * reverse order (so TC means JSContext* as the first arg, and the
  62. * JSObject* for |this| as the second arg).
  63. *
  64. * |argtypes| can contain the following characters:
  65. * 'd': a number (double) argument
  66. * 'i': an integer argument
  67. * 's': a JSString* argument
  68. * 'o': a JSObject* argument
  69. * 'r': a JSObject* argument that is of class js_RegExpClass
  70. * 'f': a JSObject* argument that is of class js_FunctionClass
  71. * 'v': a jsval argument (boxing whatever value is actually being passed in)
  72. */
  73. struct JSTraceableNative {
  74. JSFastNative native;
  75. const nanojit::CallInfo *builtin;
  76. const char *prefix;
  77. const char *argtypes;
  78. uintN flags; /* JSTN_MORE | JSTNErrType */
  79. };
  80. /*
  81. * We use a magic boxed pointer value to represent error conditions that
  82. * trigger a side exit. The address is so low that it should never be actually
  83. * in use. If it is, a performance regression occurs, not an actual runtime
  84. * error.
  85. */
  86. #define JSVAL_ERROR_COOKIE OBJECT_TO_JSVAL((void*)0x10)
  87. /* Macros used by JS_DEFINE_CALLINFOn. */
  88. #ifdef DEBUG
  89. #define _JS_CI_NAME(op) ,#op
  90. #else
  91. #define _JS_CI_NAME(op)
  92. #endif
  93. #define _JS_I32_ARGSIZE nanojit::ARGSIZE_LO
  94. #define _JS_I32_RETSIZE nanojit::ARGSIZE_LO
  95. #define _JS_F64_ARGSIZE nanojit::ARGSIZE_F
  96. #define _JS_F64_RETSIZE nanojit::ARGSIZE_F
  97. #define _JS_PTR_ARGSIZE nanojit::ARGSIZE_LO
  98. #if defined AVMPLUS_64BIT
  99. # define _JS_PTR_RETSIZE nanojit::ARGSIZE_Q
  100. #else
  101. # define _JS_PTR_RETSIZE nanojit::ARGSIZE_LO
  102. #endif
  103. /*
  104. * Supported types for builtin functions.
  105. *
  106. * Types with -- for the two string fields are not permitted as argument types
  107. * in JS_DEFINE_TRCINFO.
  108. *
  109. * If a traceable native can fail, the values that indicate failure are part of
  110. * the return type:
  111. * JSVAL_FAIL: JSVAL_ERROR_COOKIE
  112. * BOOL_FAIL: JSVAL_TO_BOOLEAN(JSVAL_VOID)
  113. * INT32_FAIL: any negative value
  114. * STRING_FAIL: NULL
  115. * OBJECT_FAIL_NULL: NULL
  116. * OBJECT_FAIL_VOID: JSVAL_TO_OBJECT(JSVAL_VOID)
  117. * (NULL means the function successfully returned JS null.)
  118. *
  119. * Special builtins known to the tracer can have their own idiosyncratic
  120. * error codes.
  121. *
  122. * When a traceable native returns a value indicating failure, we fall off
  123. * trace. If an exception is pending, it is thrown; otherwise, we assume the
  124. * builtin had no side effects and retry the current bytecode in the
  125. * interpreter.
  126. *
  127. * So a builtin must not return a value indicating failure after causing side
  128. * effects (such as reporting an error), without setting an exception pending.
  129. * The operation would be retried, despite the first attempt's observable
  130. * effects.
  131. */
  132. #define _JS_CTYPE(ctype, size, pch, ach, flags) (ctype, size, pch, ach, flags)
  133. #define _JS_CTYPE_CONTEXT _JS_CTYPE(JSContext *, _JS_PTR,"C", "", INFALLIBLE)
  134. #define _JS_CTYPE_RUNTIME _JS_CTYPE(JSRuntime *, _JS_PTR,"R", "", INFALLIBLE)
  135. #define _JS_CTYPE_THIS _JS_CTYPE(JSObject *, _JS_PTR,"T", "", INFALLIBLE)
  136. #define _JS_CTYPE_THIS_DOUBLE _JS_CTYPE(jsdouble, _JS_F64,"D", "", INFALLIBLE)
  137. #define _JS_CTYPE_THIS_STRING _JS_CTYPE(JSString *, _JS_PTR,"S", "", INFALLIBLE)
  138. #define _JS_CTYPE_PC _JS_CTYPE(jsbytecode *, _JS_PTR,"P", "", INFALLIBLE)
  139. #define _JS_CTYPE_JSVAL _JS_CTYPE(jsval, _JS_PTR, "","v", INFALLIBLE)
  140. #define _JS_CTYPE_JSVAL_FAIL _JS_CTYPE(jsval, _JS_PTR, --, --, FAIL_JSVAL)
  141. #define _JS_CTYPE_BOOL _JS_CTYPE(JSBool, _JS_I32, "","i", INFALLIBLE)
  142. #define _JS_CTYPE_BOOL_FAIL _JS_CTYPE(int32, _JS_I32, --, --, FAIL_VOID)
  143. #define _JS_CTYPE_INT32 _JS_CTYPE(int32, _JS_I32, "","i", INFALLIBLE)
  144. #define _JS_CTYPE_INT32_FAIL _JS_CTYPE(int32, _JS_I32, --, --, FAIL_NEG)
  145. #define _JS_CTYPE_UINT32 _JS_CTYPE(uint32, _JS_I32, --, --, INFALLIBLE)
  146. #define _JS_CTYPE_DOUBLE _JS_CTYPE(jsdouble, _JS_F64, "","d", INFALLIBLE)
  147. #define _JS_CTYPE_STRING _JS_CTYPE(JSString *, _JS_PTR, "","s", INFALLIBLE)
  148. #define _JS_CTYPE_STRING_FAIL _JS_CTYPE(JSString *, _JS_PTR, --, --, FAIL_NULL)
  149. #define _JS_CTYPE_OBJECT _JS_CTYPE(JSObject *, _JS_PTR, "","o", INFALLIBLE)
  150. #define _JS_CTYPE_OBJECT_FAIL_NULL _JS_CTYPE(JSObject *, _JS_PTR, --, --, FAIL_NULL)
  151. #define _JS_CTYPE_OBJECT_FAIL_VOID _JS_CTYPE(JSObject *, _JS_PTR, --, --, FAIL_VOID)
  152. #define _JS_CTYPE_REGEXP _JS_CTYPE(JSObject *, _JS_PTR, "","r", INFALLIBLE)
  153. #define _JS_CTYPE_SCOPEPROP _JS_CTYPE(JSScopeProperty *, _JS_PTR, --, --, INFALLIBLE)
  154. #define _JS_CTYPE_SIDEEXIT _JS_CTYPE(SideExit *, _JS_PTR, --, --, INFALLIBLE)
  155. #define _JS_CTYPE_INTERPSTATE _JS_CTYPE(InterpState *, _JS_PTR, --, --, INFALLIBLE)
  156. #define _JS_CTYPE_FRAGMENT _JS_CTYPE(nanojit::Fragment *, _JS_PTR, --, --, INFALLIBLE)
  157. #define _JS_EXPAND(tokens) tokens
  158. #define _JS_CTYPE_TYPE2(t,s,p,a,f) t
  159. #define _JS_CTYPE_TYPE(tyname) _JS_EXPAND(_JS_CTYPE_TYPE2 _JS_CTYPE_##tyname)
  160. #define _JS_CTYPE_RETSIZE2(t,s,p,a,f) s##_RETSIZE
  161. #define _JS_CTYPE_RETSIZE(tyname) _JS_EXPAND(_JS_CTYPE_RETSIZE2 _JS_CTYPE_##tyname)
  162. #define _JS_CTYPE_ARGSIZE2(t,s,p,a,f) s##_ARGSIZE
  163. #define _JS_CTYPE_ARGSIZE(tyname) _JS_EXPAND(_JS_CTYPE_ARGSIZE2 _JS_CTYPE_##tyname)
  164. #define _JS_CTYPE_PCH2(t,s,p,a,f) p
  165. #define _JS_CTYPE_PCH(tyname) _JS_EXPAND(_JS_CTYPE_PCH2 _JS_CTYPE_##tyname)
  166. #define _JS_CTYPE_ACH2(t,s,p,a,f) a
  167. #define _JS_CTYPE_ACH(tyname) _JS_EXPAND(_JS_CTYPE_ACH2 _JS_CTYPE_##tyname)
  168. #define _JS_CTYPE_FLAGS2(t,s,p,a,f) f
  169. #define _JS_CTYPE_FLAGS(tyname) _JS_EXPAND(_JS_CTYPE_FLAGS2 _JS_CTYPE_##tyname)
  170. #define _JS_static_TN(t) static t
  171. #define _JS_static_CI static
  172. #define _JS_extern_TN(t) extern t
  173. #define _JS_extern_CI
  174. #define _JS_FRIEND_TN(t) extern JS_FRIEND_API(t)
  175. #define _JS_FRIEND_CI
  176. #define _JS_TN_LINKAGE(linkage, t) _JS_##linkage##_TN(t)
  177. #define _JS_CI_LINKAGE(linkage) _JS_##linkage##_CI
  178. #define _JS_CALLINFO(name) name##_ci
  179. #if defined(JS_NO_FASTCALL) && defined(NANOJIT_IA32)
  180. #define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, cse, fold) \
  181. _JS_TN_LINKAGE(linkage, crtype) name cargtypes; \
  182. _JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
  183. { (intptr_t) &name, argtypes, cse, fold, nanojit::ABI_CDECL _JS_CI_NAME(name) };
  184. #else
  185. #define _JS_DEFINE_CALLINFO(linkage, name, crtype, cargtypes, argtypes, cse, fold) \
  186. _JS_TN_LINKAGE(linkage, crtype) FASTCALL name cargtypes; \
  187. _JS_CI_LINKAGE(linkage) const nanojit::CallInfo _JS_CALLINFO(name) = \
  188. { (intptr_t) &name, argtypes, cse, fold, nanojit::ABI_FASTCALL _JS_CI_NAME(name) };
  189. #endif
  190. /*
  191. * Declare a C function named <op> and a CallInfo struct named <op>_callinfo so the
  192. * tracer can call it. |linkage| controls the visibility of both the function
  193. * and the CallInfo global. It can be extern, static, or FRIEND, which
  194. * specifies JS_FRIEND_API linkage for the function.
  195. */
  196. #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold) \
  197. _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), (_JS_CTYPE_TYPE(at0)), \
  198. (_JS_CTYPE_ARGSIZE(at0) << 2) | _JS_CTYPE_RETSIZE(rt), cse, fold)
  199. #define JS_DEFINE_CALLINFO_2(linkage, rt, op, at0, at1, cse, fold) \
  200. _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), \
  201. (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1)), \
  202. (_JS_CTYPE_ARGSIZE(at0) << 4) | (_JS_CTYPE_ARGSIZE(at1) << 2) | \
  203. _JS_CTYPE_RETSIZE(rt), \
  204. cse, fold)
  205. #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold) \
  206. _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), \
  207. (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2)), \
  208. (_JS_CTYPE_ARGSIZE(at0) << 6) | (_JS_CTYPE_ARGSIZE(at1) << 4) | \
  209. (_JS_CTYPE_ARGSIZE(at2) << 2) | _JS_CTYPE_RETSIZE(rt), \
  210. cse, fold)
  211. #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold) \
  212. _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), \
  213. (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2), \
  214. _JS_CTYPE_TYPE(at3)), \
  215. (_JS_CTYPE_ARGSIZE(at0) << 8) | (_JS_CTYPE_ARGSIZE(at1) << 6) | \
  216. (_JS_CTYPE_ARGSIZE(at2) << 4) | (_JS_CTYPE_ARGSIZE(at3) << 2) | \
  217. _JS_CTYPE_RETSIZE(rt), \
  218. cse, fold)
  219. #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold) \
  220. _JS_DEFINE_CALLINFO(linkage, op, _JS_CTYPE_TYPE(rt), \
  221. (_JS_CTYPE_TYPE(at0), _JS_CTYPE_TYPE(at1), _JS_CTYPE_TYPE(at2), \
  222. _JS_CTYPE_TYPE(at3), _JS_CTYPE_TYPE(at4)), \
  223. (_JS_CTYPE_ARGSIZE(at0) << 10) | (_JS_CTYPE_ARGSIZE(at1) << 8) | \
  224. (_JS_CTYPE_ARGSIZE(at2) << 6) | (_JS_CTYPE_ARGSIZE(at3) << 4) | \
  225. (_JS_CTYPE_ARGSIZE(at4) << 2) | _JS_CTYPE_RETSIZE(rt), \
  226. cse, fold)
  227. #define JS_DECLARE_CALLINFO(name) extern const nanojit::CallInfo _JS_CALLINFO(name);
  228. #define _JS_TN_INIT_HELPER_n(n, args) _JS_TN_INIT_HELPER_##n args
  229. #define _JS_TN_INIT_HELPER_1(linkage, rt, op, at0, cse, fold) \
  230. &_JS_CALLINFO(op), \
  231. _JS_CTYPE_PCH(at0), \
  232. _JS_CTYPE_ACH(at0), \
  233. _JS_CTYPE_FLAGS(rt)
  234. #define _JS_TN_INIT_HELPER_2(linkage, rt, op, at0, at1, cse, fold) \
  235. &_JS_CALLINFO(op), \
  236. _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0), \
  237. _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1), \
  238. _JS_CTYPE_FLAGS(rt)
  239. #define _JS_TN_INIT_HELPER_3(linkage, rt, op, at0, at1, at2, cse, fold) \
  240. &_JS_CALLINFO(op), \
  241. _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0), \
  242. _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2), \
  243. _JS_CTYPE_FLAGS(rt)
  244. #define _JS_TN_INIT_HELPER_4(linkage, rt, op, at0, at1, at2, at3, cse, fold) \
  245. &_JS_CALLINFO(op), \
  246. _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) _JS_CTYPE_PCH(at0), \
  247. _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at3), \
  248. _JS_CTYPE_FLAGS(rt)
  249. #define _JS_TN_INIT_HELPER_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold) \
  250. &_JS_CALLINFO(op), \
  251. _JS_CTYPE_PCH(at4) _JS_CTYPE_PCH(at3) _JS_CTYPE_PCH(at2) _JS_CTYPE_PCH(at1) \
  252. _JS_CTYPE_PCH(at0), \
  253. _JS_CTYPE_ACH(at0) _JS_CTYPE_ACH(at1) _JS_CTYPE_ACH(at2) _JS_CTYPE_ACH(at3) \
  254. _JS_CTYPE_ACH(at4), \
  255. _JS_CTYPE_FLAGS(rt)
  256. #define JS_DEFINE_TRCINFO_1(name, tn0) \
  257. _JS_DEFINE_CALLINFO_n tn0 \
  258. JSTraceableNative name##_trcinfo[] = { \
  259. { name, _JS_TN_INIT_HELPER_n tn0 } \
  260. };
  261. #define JS_DEFINE_TRCINFO_2(name, tn0, tn1) \
  262. _JS_DEFINE_CALLINFO_n tn0 \
  263. _JS_DEFINE_CALLINFO_n tn1 \
  264. JSTraceableNative name##_trcinfo[] = { \
  265. { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE }, \
  266. { name, _JS_TN_INIT_HELPER_n tn1 } \
  267. };
  268. #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2) \
  269. _JS_DEFINE_CALLINFO_n tn0 \
  270. _JS_DEFINE_CALLINFO_n tn1 \
  271. _JS_DEFINE_CALLINFO_n tn2 \
  272. JSTraceableNative name##_trcinfo[] = { \
  273. { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE }, \
  274. { name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE }, \
  275. { name, _JS_TN_INIT_HELPER_n tn2 } \
  276. };
  277. #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3) \
  278. _JS_DEFINE_CALLINFO_n tn0 \
  279. _JS_DEFINE_CALLINFO_n tn1 \
  280. _JS_DEFINE_CALLINFO_n tn2 \
  281. _JS_DEFINE_CALLINFO_n tn3 \
  282. JSTraceableNative name##_trcinfo[] = { \
  283. { name, _JS_TN_INIT_HELPER_n tn0 | JSTN_MORE }, \
  284. { name, _JS_TN_INIT_HELPER_n tn1 | JSTN_MORE }, \
  285. { name, _JS_TN_INIT_HELPER_n tn2 | JSTN_MORE }, \
  286. { name, _JS_TN_INIT_HELPER_n tn3 } \
  287. };
  288. #define _JS_DEFINE_CALLINFO_n(n, args) JS_DEFINE_CALLINFO_##n args
  289. jsdouble FASTCALL
  290. js_StringToNumber(JSContext* cx, JSString* str);
  291. jsdouble FASTCALL
  292. js_BooleanOrUndefinedToNumber(JSContext* cx, int32 unboxed);
  293. #else
  294. #define JS_DEFINE_CALLINFO_1(linkage, rt, op, at0, cse, fold)
  295. #define JS_DEFINE_CALLINFO_2(linkage, rt, op, at0, at1, cse, fold)
  296. #define JS_DEFINE_CALLINFO_3(linkage, rt, op, at0, at1, at2, cse, fold)
  297. #define JS_DEFINE_CALLINFO_4(linkage, rt, op, at0, at1, at2, at3, cse, fold)
  298. #define JS_DEFINE_CALLINFO_5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold)
  299. #define JS_DECLARE_CALLINFO(name)
  300. #define JS_DEFINE_TRCINFO_1(name, tn0)
  301. #define JS_DEFINE_TRCINFO_2(name, tn0, tn1)
  302. #define JS_DEFINE_TRCINFO_3(name, tn0, tn1, tn2)
  303. #define JS_DEFINE_TRCINFO_4(name, tn0, tn1, tn2, tn3)
  304. #endif /* !JS_TRACER */
  305. /* Defined in jsarray.cpp */
  306. JS_DECLARE_CALLINFO(js_Array_dense_setelem)
  307. JS_DECLARE_CALLINFO(js_FastNewArray)
  308. JS_DECLARE_CALLINFO(js_Array_1int)
  309. JS_DECLARE_CALLINFO(js_Array_1str)
  310. JS_DECLARE_CALLINFO(js_Array_2obj)
  311. JS_DECLARE_CALLINFO(js_Array_3num)
  312. /* Defined in jsdate.cpp */
  313. JS_DECLARE_CALLINFO(js_FastNewDate)
  314. /* Defined in jsnum.cpp */
  315. JS_DECLARE_CALLINFO(js_NumberToString)
  316. /* Defined in jsstr.cpp */
  317. JS_DECLARE_CALLINFO(js_ConcatStrings)
  318. JS_DECLARE_CALLINFO(js_String_getelem)
  319. JS_DECLARE_CALLINFO(js_String_p_charCodeAt)
  320. JS_DECLARE_CALLINFO(js_EqualStrings)
  321. JS_DECLARE_CALLINFO(js_CompareStrings)
  322. /* Defined in jsbuiltins.cpp */
  323. #define BUILTIN1(linkage, rt, op, at0, cse, fold) JS_DECLARE_CALLINFO(op)
  324. #define BUILTIN2(linkage, rt, op, at0, at1, cse, fold) JS_DECLARE_CALLINFO(op)
  325. #define BUILTIN3(linkage, rt, op, at0, at1, at2, cse, fold) JS_DECLARE_CALLINFO(op)
  326. #define BUILTIN4(linkage, rt, op, at0, at1, at2, at3, cse, fold) JS_DECLARE_CALLINFO(op)
  327. #define BUILTIN5(linkage, rt, op, at0, at1, at2, at3, at4, cse, fold) JS_DECLARE_CALLINFO(op)
  328. #include "builtins.tbl"
  329. #undef BUILTIN
  330. #undef BUILTIN1
  331. #undef BUILTIN2
  332. #undef BUILTIN3
  333. #undef BUILTIN4
  334. #undef BUILTIN5
  335. #endif /* jsbuiltins_h___ */