johnson 2.0.0.pre1 → 2.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (311) hide show
  1. data/CHANGELOG.rdoc +12 -0
  2. data/Manifest.txt +4 -285
  3. data/Rakefile +13 -20
  4. data/ext/tracemonkey/global.cc +4 -1
  5. data/ext/tracemonkey/js.cc +30 -33
  6. data/ext/tracemonkey/runtime.cc +96 -6
  7. data/ext/tracemonkey/split_global.cc +0 -5
  8. data/ext/tracemonkey/tracemonkey.h +2 -2
  9. data/lib/johnson.rb +2 -2
  10. data/lib/johnson/runtime.rb +25 -15
  11. data/lib/johnson/tracemonkey/runtime.rb +6 -3
  12. data/vendor/tracemonkey/config/system-headers +1 -3
  13. data/vendor/tracemonkey/jscntxt.h +5 -2
  14. data/vendor/tracemonkey/jsdbgapi.cpp +9 -1
  15. data/vendor/tracemonkey/jsdbgapi.h +4 -0
  16. data/vendor/tracemonkey/tests/ecma/NativeObjects/browser.js +0 -0
  17. data/vendor/tracemonkey/tests/ecma/NativeObjects/jstests.list +0 -0
  18. data/vendor/tracemonkey/tests/ecma_3_1/Object/jstests.list +1 -1
  19. data/vendor/tracemonkey/tests/js1_3/misc/browser.js +0 -0
  20. data/vendor/tracemonkey/tests/js1_3/misc/jstests.list +0 -0
  21. data/vendor/tracemonkey/tests/js1_5/Regress/jstests.list +4 -4
  22. data/vendor/tracemonkey/tests/js1_5/Scope/jstests.list +1 -1
  23. data/vendor/tracemonkey/tests/js1_5/decompilation/jstests.list +2 -2
  24. data/vendor/tracemonkey/tests/js1_7/decompilation/jstests.list +1 -1
  25. data/vendor/tracemonkey/tests/shell.js +2 -1
  26. metadata +51 -309
  27. data/ext/spidermonkey/context.c +0 -116
  28. data/ext/spidermonkey/context.h +0 -19
  29. data/ext/spidermonkey/conversions.c +0 -361
  30. data/ext/spidermonkey/conversions.h +0 -31
  31. data/ext/spidermonkey/debugger.c +0 -234
  32. data/ext/spidermonkey/debugger.h +0 -10
  33. data/ext/spidermonkey/extconf.rb +0 -32
  34. data/ext/spidermonkey/extensions.c +0 -37
  35. data/ext/spidermonkey/extensions.h +0 -12
  36. data/ext/spidermonkey/global.c +0 -40
  37. data/ext/spidermonkey/global.h +0 -11
  38. data/ext/spidermonkey/idhash.c +0 -16
  39. data/ext/spidermonkey/idhash.h +0 -8
  40. data/ext/spidermonkey/immutable_node.c +0 -1153
  41. data/ext/spidermonkey/immutable_node.c.erb +0 -523
  42. data/ext/spidermonkey/immutable_node.h +0 -22
  43. data/ext/spidermonkey/jroot.h +0 -197
  44. data/ext/spidermonkey/js_land_proxy.c +0 -620
  45. data/ext/spidermonkey/js_land_proxy.h +0 -20
  46. data/ext/spidermonkey/ruby_land_proxy.c +0 -618
  47. data/ext/spidermonkey/ruby_land_proxy.h +0 -38
  48. data/ext/spidermonkey/runtime.c +0 -396
  49. data/ext/spidermonkey/runtime.h +0 -27
  50. data/ext/spidermonkey/spidermonkey.c +0 -22
  51. data/ext/spidermonkey/spidermonkey.h +0 -29
  52. data/lib/johnson/spidermonkey.rb +0 -12
  53. data/lib/johnson/spidermonkey/context.rb +0 -10
  54. data/lib/johnson/spidermonkey/debugger.rb +0 -67
  55. data/lib/johnson/spidermonkey/immutable_node.rb +0 -282
  56. data/lib/johnson/spidermonkey/js_land_proxy.rb +0 -64
  57. data/lib/johnson/spidermonkey/mutable_tree_visitor.rb +0 -242
  58. data/lib/johnson/spidermonkey/ruby_land_proxy.rb +0 -17
  59. data/lib/johnson/spidermonkey/runtime.rb +0 -74
  60. data/test/johnson/spidermonkey/context_test.rb +0 -21
  61. data/test/johnson/spidermonkey/immutable_node_test.rb +0 -34
  62. data/test/johnson/spidermonkey/js_land_proxy_test.rb +0 -273
  63. data/test/johnson/spidermonkey/ruby_land_proxy_test.rb +0 -274
  64. data/test/johnson/spidermonkey/runtime_test.rb +0 -41
  65. data/vendor/spidermonkey/.cvsignore +0 -9
  66. data/vendor/spidermonkey/Makefile.in +0 -449
  67. data/vendor/spidermonkey/Makefile.ref +0 -365
  68. data/vendor/spidermonkey/README.html +0 -820
  69. data/vendor/spidermonkey/SpiderMonkey.rsp +0 -12
  70. data/vendor/spidermonkey/Y.js +0 -19
  71. data/vendor/spidermonkey/build.mk +0 -43
  72. data/vendor/spidermonkey/config.mk +0 -192
  73. data/vendor/spidermonkey/config/AIX4.1.mk +0 -65
  74. data/vendor/spidermonkey/config/AIX4.2.mk +0 -64
  75. data/vendor/spidermonkey/config/AIX4.3.mk +0 -65
  76. data/vendor/spidermonkey/config/Darwin.mk +0 -83
  77. data/vendor/spidermonkey/config/Darwin1.3.mk +0 -81
  78. data/vendor/spidermonkey/config/Darwin1.4.mk +0 -41
  79. data/vendor/spidermonkey/config/Darwin5.2.mk +0 -81
  80. data/vendor/spidermonkey/config/Darwin5.3.mk +0 -81
  81. data/vendor/spidermonkey/config/HP-UXB.10.10.mk +0 -77
  82. data/vendor/spidermonkey/config/HP-UXB.10.20.mk +0 -77
  83. data/vendor/spidermonkey/config/HP-UXB.11.00.mk +0 -80
  84. data/vendor/spidermonkey/config/IRIX.mk +0 -87
  85. data/vendor/spidermonkey/config/IRIX5.3.mk +0 -44
  86. data/vendor/spidermonkey/config/IRIX6.1.mk +0 -44
  87. data/vendor/spidermonkey/config/IRIX6.2.mk +0 -44
  88. data/vendor/spidermonkey/config/IRIX6.3.mk +0 -44
  89. data/vendor/spidermonkey/config/IRIX6.5.mk +0 -44
  90. data/vendor/spidermonkey/config/Linux_All.mk +0 -103
  91. data/vendor/spidermonkey/config/Mac_OS10.0.mk +0 -82
  92. data/vendor/spidermonkey/config/OSF1V4.0.mk +0 -72
  93. data/vendor/spidermonkey/config/OSF1V5.0.mk +0 -69
  94. data/vendor/spidermonkey/config/SunOS4.1.4.mk +0 -101
  95. data/vendor/spidermonkey/config/SunOS5.10.mk +0 -50
  96. data/vendor/spidermonkey/config/SunOS5.3.mk +0 -91
  97. data/vendor/spidermonkey/config/SunOS5.4.mk +0 -92
  98. data/vendor/spidermonkey/config/SunOS5.5.1.mk +0 -44
  99. data/vendor/spidermonkey/config/SunOS5.5.mk +0 -87
  100. data/vendor/spidermonkey/config/SunOS5.6.mk +0 -89
  101. data/vendor/spidermonkey/config/SunOS5.7.mk +0 -44
  102. data/vendor/spidermonkey/config/SunOS5.8.mk +0 -44
  103. data/vendor/spidermonkey/config/SunOS5.9.mk +0 -44
  104. data/vendor/spidermonkey/config/WINNT4.0.mk +0 -117
  105. data/vendor/spidermonkey/config/WINNT5.0.mk +0 -117
  106. data/vendor/spidermonkey/config/WINNT5.1.mk +0 -117
  107. data/vendor/spidermonkey/config/WINNT5.2.mk +0 -117
  108. data/vendor/spidermonkey/config/WINNT6.0.mk +0 -117
  109. data/vendor/spidermonkey/config/dgux.mk +0 -64
  110. data/vendor/spidermonkey/editline/Makefile.ref +0 -144
  111. data/vendor/spidermonkey/editline/README +0 -83
  112. data/vendor/spidermonkey/editline/editline.3 +0 -175
  113. data/vendor/spidermonkey/editline/editline.c +0 -1369
  114. data/vendor/spidermonkey/editline/editline.h +0 -135
  115. data/vendor/spidermonkey/editline/sysunix.c +0 -182
  116. data/vendor/spidermonkey/editline/unix.h +0 -82
  117. data/vendor/spidermonkey/fdlibm/.cvsignore +0 -7
  118. data/vendor/spidermonkey/fdlibm/Makefile.in +0 -127
  119. data/vendor/spidermonkey/fdlibm/Makefile.ref +0 -192
  120. data/vendor/spidermonkey/fdlibm/e_acos.c +0 -147
  121. data/vendor/spidermonkey/fdlibm/e_acosh.c +0 -105
  122. data/vendor/spidermonkey/fdlibm/e_asin.c +0 -156
  123. data/vendor/spidermonkey/fdlibm/e_atan2.c +0 -165
  124. data/vendor/spidermonkey/fdlibm/e_atanh.c +0 -110
  125. data/vendor/spidermonkey/fdlibm/e_cosh.c +0 -133
  126. data/vendor/spidermonkey/fdlibm/e_exp.c +0 -202
  127. data/vendor/spidermonkey/fdlibm/e_fmod.c +0 -184
  128. data/vendor/spidermonkey/fdlibm/e_gamma.c +0 -71
  129. data/vendor/spidermonkey/fdlibm/e_gamma_r.c +0 -70
  130. data/vendor/spidermonkey/fdlibm/e_hypot.c +0 -173
  131. data/vendor/spidermonkey/fdlibm/e_j0.c +0 -524
  132. data/vendor/spidermonkey/fdlibm/e_j1.c +0 -523
  133. data/vendor/spidermonkey/fdlibm/e_jn.c +0 -315
  134. data/vendor/spidermonkey/fdlibm/e_lgamma.c +0 -71
  135. data/vendor/spidermonkey/fdlibm/e_lgamma_r.c +0 -347
  136. data/vendor/spidermonkey/fdlibm/e_log.c +0 -184
  137. data/vendor/spidermonkey/fdlibm/e_log10.c +0 -134
  138. data/vendor/spidermonkey/fdlibm/e_pow.c +0 -386
  139. data/vendor/spidermonkey/fdlibm/e_rem_pio2.c +0 -222
  140. data/vendor/spidermonkey/fdlibm/e_remainder.c +0 -120
  141. data/vendor/spidermonkey/fdlibm/e_scalb.c +0 -89
  142. data/vendor/spidermonkey/fdlibm/e_sinh.c +0 -122
  143. data/vendor/spidermonkey/fdlibm/e_sqrt.c +0 -497
  144. data/vendor/spidermonkey/fdlibm/fdlibm.h +0 -273
  145. data/vendor/spidermonkey/fdlibm/fdlibm.mak +0 -1453
  146. data/vendor/spidermonkey/fdlibm/fdlibm.mdp +0 -0
  147. data/vendor/spidermonkey/fdlibm/k_cos.c +0 -135
  148. data/vendor/spidermonkey/fdlibm/k_rem_pio2.c +0 -354
  149. data/vendor/spidermonkey/fdlibm/k_sin.c +0 -114
  150. data/vendor/spidermonkey/fdlibm/k_standard.c +0 -785
  151. data/vendor/spidermonkey/fdlibm/k_tan.c +0 -170
  152. data/vendor/spidermonkey/fdlibm/s_asinh.c +0 -101
  153. data/vendor/spidermonkey/fdlibm/s_atan.c +0 -175
  154. data/vendor/spidermonkey/fdlibm/s_cbrt.c +0 -133
  155. data/vendor/spidermonkey/fdlibm/s_ceil.c +0 -120
  156. data/vendor/spidermonkey/fdlibm/s_copysign.c +0 -72
  157. data/vendor/spidermonkey/fdlibm/s_cos.c +0 -118
  158. data/vendor/spidermonkey/fdlibm/s_erf.c +0 -356
  159. data/vendor/spidermonkey/fdlibm/s_expm1.c +0 -267
  160. data/vendor/spidermonkey/fdlibm/s_fabs.c +0 -70
  161. data/vendor/spidermonkey/fdlibm/s_finite.c +0 -71
  162. data/vendor/spidermonkey/fdlibm/s_floor.c +0 -121
  163. data/vendor/spidermonkey/fdlibm/s_frexp.c +0 -99
  164. data/vendor/spidermonkey/fdlibm/s_ilogb.c +0 -85
  165. data/vendor/spidermonkey/fdlibm/s_isnan.c +0 -74
  166. data/vendor/spidermonkey/fdlibm/s_ldexp.c +0 -66
  167. data/vendor/spidermonkey/fdlibm/s_lib_version.c +0 -73
  168. data/vendor/spidermonkey/fdlibm/s_log1p.c +0 -211
  169. data/vendor/spidermonkey/fdlibm/s_logb.c +0 -79
  170. data/vendor/spidermonkey/fdlibm/s_matherr.c +0 -64
  171. data/vendor/spidermonkey/fdlibm/s_modf.c +0 -132
  172. data/vendor/spidermonkey/fdlibm/s_nextafter.c +0 -124
  173. data/vendor/spidermonkey/fdlibm/s_rint.c +0 -131
  174. data/vendor/spidermonkey/fdlibm/s_scalbn.c +0 -107
  175. data/vendor/spidermonkey/fdlibm/s_signgam.c +0 -40
  176. data/vendor/spidermonkey/fdlibm/s_significand.c +0 -68
  177. data/vendor/spidermonkey/fdlibm/s_sin.c +0 -118
  178. data/vendor/spidermonkey/fdlibm/s_tan.c +0 -112
  179. data/vendor/spidermonkey/fdlibm/s_tanh.c +0 -122
  180. data/vendor/spidermonkey/fdlibm/w_acos.c +0 -78
  181. data/vendor/spidermonkey/fdlibm/w_acosh.c +0 -78
  182. data/vendor/spidermonkey/fdlibm/w_asin.c +0 -80
  183. data/vendor/spidermonkey/fdlibm/w_atan2.c +0 -79
  184. data/vendor/spidermonkey/fdlibm/w_atanh.c +0 -81
  185. data/vendor/spidermonkey/fdlibm/w_cosh.c +0 -77
  186. data/vendor/spidermonkey/fdlibm/w_exp.c +0 -88
  187. data/vendor/spidermonkey/fdlibm/w_fmod.c +0 -78
  188. data/vendor/spidermonkey/fdlibm/w_gamma.c +0 -85
  189. data/vendor/spidermonkey/fdlibm/w_gamma_r.c +0 -81
  190. data/vendor/spidermonkey/fdlibm/w_hypot.c +0 -78
  191. data/vendor/spidermonkey/fdlibm/w_j0.c +0 -105
  192. data/vendor/spidermonkey/fdlibm/w_j1.c +0 -106
  193. data/vendor/spidermonkey/fdlibm/w_jn.c +0 -128
  194. data/vendor/spidermonkey/fdlibm/w_lgamma.c +0 -85
  195. data/vendor/spidermonkey/fdlibm/w_lgamma_r.c +0 -81
  196. data/vendor/spidermonkey/fdlibm/w_log.c +0 -78
  197. data/vendor/spidermonkey/fdlibm/w_log10.c +0 -81
  198. data/vendor/spidermonkey/fdlibm/w_pow.c +0 -99
  199. data/vendor/spidermonkey/fdlibm/w_remainder.c +0 -77
  200. data/vendor/spidermonkey/fdlibm/w_scalb.c +0 -95
  201. data/vendor/spidermonkey/fdlibm/w_sinh.c +0 -77
  202. data/vendor/spidermonkey/fdlibm/w_sqrt.c +0 -77
  203. data/vendor/spidermonkey/javascript-trace.d +0 -73
  204. data/vendor/spidermonkey/js.c +0 -3951
  205. data/vendor/spidermonkey/js.mdp +0 -0
  206. data/vendor/spidermonkey/js.msg +0 -308
  207. data/vendor/spidermonkey/js.pkg +0 -2
  208. data/vendor/spidermonkey/js3240.rc +0 -79
  209. data/vendor/spidermonkey/jsOS240.def +0 -654
  210. data/vendor/spidermonkey/jsapi.c +0 -5836
  211. data/vendor/spidermonkey/jsapi.h +0 -2624
  212. data/vendor/spidermonkey/jsarena.c +0 -450
  213. data/vendor/spidermonkey/jsarena.h +0 -318
  214. data/vendor/spidermonkey/jsarray.c +0 -2996
  215. data/vendor/spidermonkey/jsarray.h +0 -127
  216. data/vendor/spidermonkey/jsatom.c +0 -1045
  217. data/vendor/spidermonkey/jsatom.h +0 -442
  218. data/vendor/spidermonkey/jsbit.h +0 -253
  219. data/vendor/spidermonkey/jsbool.c +0 -176
  220. data/vendor/spidermonkey/jsbool.h +0 -73
  221. data/vendor/spidermonkey/jsclist.h +0 -139
  222. data/vendor/spidermonkey/jscntxt.c +0 -1348
  223. data/vendor/spidermonkey/jscntxt.h +0 -1120
  224. data/vendor/spidermonkey/jscompat.h +0 -57
  225. data/vendor/spidermonkey/jsconfig.h +0 -248
  226. data/vendor/spidermonkey/jsconfig.mk +0 -181
  227. data/vendor/spidermonkey/jscpucfg.c +0 -396
  228. data/vendor/spidermonkey/jscpucfg.h +0 -212
  229. data/vendor/spidermonkey/jsdate.c +0 -2390
  230. data/vendor/spidermonkey/jsdate.h +0 -124
  231. data/vendor/spidermonkey/jsdbgapi.c +0 -1802
  232. data/vendor/spidermonkey/jsdbgapi.h +0 -464
  233. data/vendor/spidermonkey/jsdhash.c +0 -868
  234. data/vendor/spidermonkey/jsdhash.h +0 -592
  235. data/vendor/spidermonkey/jsdtoa.c +0 -3167
  236. data/vendor/spidermonkey/jsdtoa.h +0 -130
  237. data/vendor/spidermonkey/jsdtracef.c +0 -317
  238. data/vendor/spidermonkey/jsdtracef.h +0 -77
  239. data/vendor/spidermonkey/jsemit.c +0 -6909
  240. data/vendor/spidermonkey/jsemit.h +0 -741
  241. data/vendor/spidermonkey/jsexn.c +0 -1371
  242. data/vendor/spidermonkey/jsexn.h +0 -96
  243. data/vendor/spidermonkey/jsfile.c +0 -2736
  244. data/vendor/spidermonkey/jsfile.h +0 -56
  245. data/vendor/spidermonkey/jsfile.msg +0 -90
  246. data/vendor/spidermonkey/jsfun.c +0 -2634
  247. data/vendor/spidermonkey/jsfun.h +0 -254
  248. data/vendor/spidermonkey/jsgc.c +0 -3562
  249. data/vendor/spidermonkey/jsgc.h +0 -403
  250. data/vendor/spidermonkey/jshash.c +0 -476
  251. data/vendor/spidermonkey/jshash.h +0 -151
  252. data/vendor/spidermonkey/jsify.pl +0 -485
  253. data/vendor/spidermonkey/jsinterp.c +0 -7007
  254. data/vendor/spidermonkey/jsinterp.h +0 -525
  255. data/vendor/spidermonkey/jsinvoke.c +0 -43
  256. data/vendor/spidermonkey/jsiter.c +0 -1067
  257. data/vendor/spidermonkey/jsiter.h +0 -122
  258. data/vendor/spidermonkey/jskeyword.tbl +0 -124
  259. data/vendor/spidermonkey/jskwgen.c +0 -460
  260. data/vendor/spidermonkey/jslibmath.h +0 -266
  261. data/vendor/spidermonkey/jslock.c +0 -1309
  262. data/vendor/spidermonkey/jslock.h +0 -313
  263. data/vendor/spidermonkey/jslocko.asm +0 -60
  264. data/vendor/spidermonkey/jslog2.c +0 -94
  265. data/vendor/spidermonkey/jslong.c +0 -264
  266. data/vendor/spidermonkey/jslong.h +0 -412
  267. data/vendor/spidermonkey/jsmath.c +0 -567
  268. data/vendor/spidermonkey/jsmath.h +0 -57
  269. data/vendor/spidermonkey/jsnum.c +0 -1239
  270. data/vendor/spidermonkey/jsnum.h +0 -283
  271. data/vendor/spidermonkey/jsobj.c +0 -5282
  272. data/vendor/spidermonkey/jsobj.h +0 -709
  273. data/vendor/spidermonkey/jsopcode.c +0 -5245
  274. data/vendor/spidermonkey/jsopcode.h +0 -394
  275. data/vendor/spidermonkey/jsopcode.tbl +0 -523
  276. data/vendor/spidermonkey/jsotypes.h +0 -202
  277. data/vendor/spidermonkey/jsparse.c +0 -6704
  278. data/vendor/spidermonkey/jsparse.h +0 -511
  279. data/vendor/spidermonkey/jsprf.c +0 -1264
  280. data/vendor/spidermonkey/jsprf.h +0 -150
  281. data/vendor/spidermonkey/jsproto.tbl +0 -128
  282. data/vendor/spidermonkey/jsprvtd.h +0 -267
  283. data/vendor/spidermonkey/jspubtd.h +0 -744
  284. data/vendor/spidermonkey/jsregexp.c +0 -4364
  285. data/vendor/spidermonkey/jsregexp.h +0 -183
  286. data/vendor/spidermonkey/jsreops.tbl +0 -145
  287. data/vendor/spidermonkey/jsscan.c +0 -2012
  288. data/vendor/spidermonkey/jsscan.h +0 -387
  289. data/vendor/spidermonkey/jsscope.c +0 -1957
  290. data/vendor/spidermonkey/jsscope.h +0 -418
  291. data/vendor/spidermonkey/jsscript.c +0 -1832
  292. data/vendor/spidermonkey/jsscript.h +0 -287
  293. data/vendor/spidermonkey/jsshell.msg +0 -50
  294. data/vendor/spidermonkey/jsstddef.h +0 -83
  295. data/vendor/spidermonkey/jsstr.c +0 -5005
  296. data/vendor/spidermonkey/jsstr.h +0 -641
  297. data/vendor/spidermonkey/jstypes.h +0 -475
  298. data/vendor/spidermonkey/jsutil.c +0 -345
  299. data/vendor/spidermonkey/jsutil.h +0 -157
  300. data/vendor/spidermonkey/jsxdrapi.c +0 -800
  301. data/vendor/spidermonkey/jsxdrapi.h +0 -218
  302. data/vendor/spidermonkey/jsxml.c +0 -8476
  303. data/vendor/spidermonkey/jsxml.h +0 -349
  304. data/vendor/spidermonkey/lock_SunOS.s +0 -119
  305. data/vendor/spidermonkey/perfect.js +0 -39
  306. data/vendor/spidermonkey/plify_jsdhash.sed +0 -36
  307. data/vendor/spidermonkey/prmjtime.c +0 -846
  308. data/vendor/spidermonkey/prmjtime.h +0 -103
  309. data/vendor/spidermonkey/resource.h +0 -15
  310. data/vendor/spidermonkey/rules.mk +0 -197
  311. data/vendor/spidermonkey/win32.order +0 -384
@@ -1,38 +0,0 @@
1
- #ifndef JOHNSON_SPIDERMONKEY_RUBY_LAND_PROXY_H
2
- #define JOHNSON_SPIDERMONKEY_RUBY_LAND_PROXY_H
3
-
4
- #include "spidermonkey.h"
5
- #include "runtime.h"
6
-
7
- #ifdef LEAK_ROOT_NAMES
8
- #define LEAKY_ROOT_NAME(static_string, dynamic_detail) \
9
- ({\
10
- const char * const _leaky_root__detail = (dynamic_detail);\
11
- char * _leaky_root__leaked = malloc(strlen(static_string) + strlen(_leaky_root__detail) + 2);\
12
- strcpy(_leaky_root__leaked, static_string);\
13
- _leaky_root__leaked[strlen(static_string)] = ':';\
14
- strcpy(_leaky_root__leaked + strlen(static_string) + 1, _leaky_root__detail);\
15
- _leaky_root__leaked;\
16
- })
17
- #else
18
- #define LEAKY_ROOT_NAME(static_string, dynamic_detail) (static_string)
19
- #endif
20
-
21
- DECLARE_RUBY_WRAPPER(make_ruby_land_proxy, JohnsonRuntime* runtime; jsval value; const char const* root_name)
22
-
23
- DECLARE_RUBY_WRAPPER(rb_string_value, VALUE v)
24
- DECLARE_RUBY_WRAPPER(rb_string_value_cstr, VALUE v)
25
-
26
- typedef struct {
27
- void* key;
28
- JohnsonRuntime* runtime;
29
- VALUE self;
30
- } RubyLandProxy;
31
-
32
- bool ruby_value_is_proxy(VALUE maybe_proxy);
33
- bool ruby_value_is_script_proxy(VALUE maybe_proxy);
34
- JSBool unwrap_ruby_land_proxy(JohnsonRuntime* runtime, VALUE proxy, jsval* retval);
35
- VALUE make_ruby_land_proxy(JohnsonRuntime* runtime, jsval value, const char const* root_name);
36
- void init_Johnson_SpiderMonkey_Proxy(VALUE spidermonkey);
37
-
38
- #endif
@@ -1,396 +0,0 @@
1
- #include "runtime.h"
2
- #include "global.h"
3
- #include "idhash.h"
4
- #include "conversions.h"
5
- #include "debugger.h"
6
- #include "jroot.h"
7
- #include "ruby_land_proxy.h"
8
-
9
- /*
10
- * call-seq:
11
- * global()
12
- *
13
- * Returns the global object used for this context.
14
- */
15
- static VALUE global(VALUE self)
16
- {
17
- JohnsonRuntime* runtime;
18
- Data_Get_Struct(self, JohnsonRuntime, runtime);
19
- return convert_to_ruby(runtime, OBJECT_TO_JSVAL(runtime->global));
20
- }
21
-
22
- static JSTrapStatus trap_handler( JSContext *context,
23
- JSScript *UNUSED(script),
24
- jsbytecode *UNUSED(pc),
25
- jsval *UNUSED(rval),
26
- void *block_closure )
27
- {
28
- PREPARE_JROOTS(context, 0);
29
- VALUE block = (VALUE)block_closure;
30
- RB_FUNCALL_0(block, rb_intern("call"));
31
- return JSTRAP_CONTINUE;
32
- }
33
-
34
- /*
35
- * call-seq:
36
- * clear_trap(script, line_num)
37
- *
38
- * Clear the trap previously set at +line_num+ of +script+.
39
- */
40
- static VALUE clear_trap(VALUE self, VALUE script, VALUE linenum)
41
- {
42
- JohnsonRuntime* runtime;
43
- Data_Get_Struct(self, JohnsonRuntime, runtime);
44
-
45
- JSContext * context = johnson_get_current_context(runtime);
46
- jsval compiled_js;
47
- if(!convert_to_js(runtime, script, &compiled_js))
48
- rb_raise(rb_eRuntimeError, "Couldn't get compiled script.");
49
-
50
- JSScript * js_script = (JSScript *)JS_GetPrivate(context, JSVAL_TO_OBJECT(compiled_js));
51
-
52
- jsbytecode * pc = JS_LineNumberToPC(context, js_script, (uintN)NUM2INT(linenum));
53
- JS_ClearTrap(context, js_script, pc, NULL, NULL);
54
-
55
- return self;
56
- }
57
-
58
- /*
59
- * call-seq:
60
- * set_trap(script, line_num, block)
61
- *
62
- * Set a trap to invoke +block+ when execution of +script+ reaches
63
- * +line_num+.
64
- */
65
- static VALUE set_trap(VALUE self, VALUE script, VALUE linenum, VALUE block)
66
- {
67
- JohnsonRuntime* runtime;
68
- Data_Get_Struct(self, JohnsonRuntime, runtime);
69
-
70
- JSContext * context = johnson_get_current_context(runtime);
71
- jsval compiled_js;
72
- if(!convert_to_js(runtime, script, &compiled_js))
73
- rb_raise(rb_eRuntimeError, "Couldn't get compiled script.");
74
- JSScript * js_script = (JSScript *)JS_GetPrivate(context, JSVAL_TO_OBJECT(compiled_js));
75
-
76
- jsbytecode * pc = JS_LineNumberToPC(context, js_script, (uintN)NUM2INT(linenum));
77
- return JS_SetTrap(context, js_script, pc, trap_handler, (void*)block) ? Qtrue : Qfalse;
78
- }
79
-
80
- /*
81
- * call-seq:
82
- * native_compile(script_string, filename, linenum)
83
- *
84
- * Compile the JavaScript code in +script_string+, marked as originating
85
- * from +filename+ starting at +linenum+.
86
- */
87
- static VALUE native_compile(VALUE self, VALUE script, VALUE filename, VALUE linenum)
88
- {
89
- JohnsonRuntime* runtime;
90
- Data_Get_Struct(self, JohnsonRuntime, runtime);
91
-
92
- JSContext * context = johnson_get_current_context(runtime);
93
- JohnsonContext * johnson_context = OUR_CONTEXT(context);
94
-
95
- JSScript * compiled_js = JS_CompileScript(
96
- context,
97
- runtime->global,
98
- StringValuePtr(script),
99
- (size_t)StringValueLen(script),
100
- StringValueCStr(filename),
101
- (unsigned)NUM2INT(linenum)
102
- );
103
- if(compiled_js == NULL) {
104
- if (JS_IsExceptionPending(context))
105
- {
106
- // If there's an exception pending here, it's a syntax error.
107
- JS_GetPendingException(context, &johnson_context->ex);
108
- JS_ClearPendingException(context);
109
- }
110
-
111
- if (johnson_context->ex) {
112
- RAISE_JS_ERROR(self, johnson_context->ex);
113
- return Qnil;
114
- }
115
- }
116
-
117
- JSObject * script_object = JS_NewScriptObject(context, compiled_js);
118
-
119
- return make_ruby_land_proxy(runtime, OBJECT_TO_JSVAL(script_object), LEAKY_ROOT_NAME("JSScriptProxy", RTEST(filename) ? RSTRING(rb_inspect(filename))->ptr : "(?)"));
120
- }
121
-
122
- /*
123
- * call-seq:
124
- * evaluate_compiled_script(script_proxy)
125
- *
126
- * Evaluate previously compiled +script_proxy+, returning the final
127
- * result from that script.
128
- */
129
- static VALUE evaluate_compiled_script(VALUE self, VALUE compiled_script)
130
- {
131
- JohnsonRuntime* runtime;
132
-
133
- if (!ruby_value_is_script_proxy(compiled_script))
134
- rb_raise(rb_eArgError, "Compiled JS Script expected");
135
-
136
- Data_Get_Struct(self, JohnsonRuntime, runtime);
137
-
138
- JSContext * context = johnson_get_current_context(runtime);
139
- JohnsonContext * johnson_context = OUR_CONTEXT(context);
140
-
141
- // clean things up first
142
- johnson_context->ex = 0;
143
- memset(johnson_context->msg, 0, MAX_EXCEPTION_MESSAGE_SIZE);
144
-
145
- jsval compiled_js;
146
- if(!convert_to_js(runtime, compiled_script, &compiled_js))
147
- rb_raise(rb_eRuntimeError, "Script compilation failed");
148
-
149
- JSScript * js_script = (JSScript *)JS_GetPrivate(context, JSVAL_TO_OBJECT(compiled_js));
150
-
151
- jsval js;
152
- JSBool ok = JS_ExecuteScript(context, runtime->global, js_script, &js);
153
-
154
- if (!ok)
155
- {
156
- if (JS_IsExceptionPending(context))
157
- {
158
- // If there's an exception pending here, it's a syntax error.
159
- JS_GetPendingException(context, &johnson_context->ex);
160
- JS_ClearPendingException(context);
161
- }
162
-
163
- if (johnson_context->ex) {
164
- RAISE_JS_ERROR(self, johnson_context->ex);
165
- return Qnil;
166
- }
167
- }
168
-
169
- return convert_to_ruby(runtime, js);
170
- }
171
-
172
- #ifdef JS_GC_ZEAL
173
- /*
174
- * call-seq:
175
- * gc_zeal=(level)
176
- *
177
- * Sets the GC zeal.
178
- *
179
- * 0:: Normal
180
- * 1:: Very Frequent
181
- * 2:: Extremely Frequent
182
- */
183
- static VALUE
184
- set_gc_zeal(VALUE self, VALUE zeal)
185
- {
186
- JohnsonRuntime* runtime;
187
- Data_Get_Struct(self, JohnsonRuntime, runtime);
188
-
189
- JSContext* context = johnson_get_current_context(runtime);
190
-
191
- JS_SetGCZeal(context, NUM2INT(zeal));
192
-
193
- return zeal;
194
- }
195
- #endif
196
-
197
- /*
198
- * call-seq:
199
- * gc()
200
- *
201
- * Manually initiates a SpiderMonkey Garbage Collection run.
202
- */
203
- static VALUE
204
- gc(VALUE self)
205
- {
206
- JohnsonRuntime* runtime;
207
- Data_Get_Struct(self, JohnsonRuntime, runtime);
208
-
209
- JSContext* context = johnson_get_current_context(runtime);
210
-
211
- JS_GC(context);
212
-
213
- return Qnil;
214
- }
215
-
216
- /*
217
- * call-seq:
218
- * debugger=(debugger)
219
- *
220
- * Directs the runtime to install a full set of debug hooks, using the
221
- * given +debugger+, which must be a Johnson::SpiderMonkey::Debugger.
222
- */
223
- static VALUE
224
- set_debugger(VALUE self, VALUE debugger)
225
- {
226
- JohnsonRuntime* runtime;
227
- JSDebugHooks* debug_hooks;
228
-
229
- if (!ruby_value_is_debugger(debugger))
230
- rb_raise(rb_eTypeError, "Expected Johnson::SpiderMonkey::Debugger instance");
231
-
232
- rb_iv_set(self, "@debugger", debugger);
233
- Data_Get_Struct(self, JohnsonRuntime, runtime);
234
- Data_Get_Struct(debugger, JSDebugHooks, debug_hooks);
235
-
236
- JSContext * context = johnson_get_current_context(runtime);
237
-
238
- JS_SetInterrupt( runtime->js,
239
- debug_hooks->interruptHandler,
240
- debug_hooks->interruptHandlerData);
241
- JS_SetNewScriptHook( runtime->js,
242
- debug_hooks->newScriptHook,
243
- debug_hooks->newScriptHookData);
244
- JS_SetDestroyScriptHook( runtime->js,
245
- debug_hooks->destroyScriptHook,
246
- debug_hooks->destroyScriptHookData);
247
- JS_SetDebuggerHandler( runtime->js,
248
- debug_hooks->debuggerHandler,
249
- debug_hooks->debuggerHandlerData);
250
- JS_SetSourceHandler( runtime->js,
251
- debug_hooks->sourceHandler,
252
- debug_hooks->sourceHandlerData);
253
- JS_SetExecuteHook( runtime->js,
254
- debug_hooks->executeHook,
255
- debug_hooks->executeHookData);
256
- JS_SetCallHook( runtime->js,
257
- debug_hooks->callHook,
258
- debug_hooks->callHookData);
259
- JS_SetObjectHook( runtime->js,
260
- debug_hooks->objectHook,
261
- debug_hooks->objectHookData);
262
- JS_SetThrowHook( runtime->js,
263
- debug_hooks->throwHook,
264
- debug_hooks->throwHookData);
265
- JS_SetDebugErrorHook( runtime->js,
266
- debug_hooks->debugErrorHook,
267
- debug_hooks->debugErrorHookData);
268
-
269
- JS_SetContextDebugHooks(context, debug_hooks);
270
-
271
- return debugger;
272
- }
273
-
274
- JSBool gc_callback(JSContext *context, JSGCStatus status)
275
- {
276
- if(status == JSGC_BEGIN) {
277
- VALUE ruby_runtime = (VALUE)JS_GetRuntimePrivate(JS_GetRuntime(context));
278
- if(rb_funcall(ruby_runtime, rb_intern("should_sm_gc?"), 0) == Qtrue)
279
- return JS_TRUE;
280
- }
281
- return JS_FALSE;
282
- }
283
-
284
- /**
285
- * call-seq:
286
- * initialize_native(options)
287
- *
288
- * Create the underlying SpiderMonkey runtime. This must be called
289
- * first, and only once. Called by +initialize+ by default.
290
- */
291
- static VALUE
292
- initialize_native(VALUE self, VALUE UNUSED(options))
293
- {
294
- JohnsonRuntime* runtime;
295
- Data_Get_Struct(self, JohnsonRuntime, runtime);
296
-
297
- if ((runtime->js = JS_NewRuntime(0x100000))
298
- && (runtime->jsids = create_id_hash())
299
- && (runtime->rbids = create_id_hash()))
300
- {
301
- JS_SetRuntimePrivate(runtime->js, (void *)self);
302
- JS_SetGCCallbackRT(runtime->js, gc_callback);
303
-
304
- JSContext* context = johnson_get_current_context(runtime);
305
-
306
- if ((runtime->global = JS_GetGlobalObject(context)))
307
- return self;
308
- }
309
-
310
- // clean up after an initialization failure
311
-
312
- if (runtime->rbids)
313
- JS_HashTableDestroy(runtime->rbids);
314
-
315
- if (runtime->jsids)
316
- JS_HashTableDestroy(runtime->jsids);
317
-
318
- if (runtime->js)
319
- JS_DestroyRuntime(runtime->js);
320
-
321
- rb_raise(rb_eRuntimeError, "Couldn't initialize the runtime!");
322
- return Qnil;
323
- }
324
-
325
- JSContext* johnson_get_current_context(JohnsonRuntime * runtime)
326
- {
327
- JohnsonContext * context = NULL;
328
- VALUE self = (VALUE)JS_GetRuntimePrivate(runtime->js);
329
- Data_Get_Struct(rb_funcall(self, rb_intern("current_context"), 0), JohnsonContext, context);
330
- return context->js;
331
- }
332
-
333
- static int proxy_cleanup_enumerator(JSHashEntry *entry, int i, void* arg)
334
- {
335
- JohnsonRuntime *runtime = (JohnsonRuntime*)(arg);
336
- // entry->key is jsval; entry->value is RubyLandProxy*
337
- RubyLandProxy * proxy = (RubyLandProxy *)(entry->value);
338
- JS_RemoveRootRT(runtime->js, &(proxy->key));
339
- proxy->runtime = NULL;
340
- return 0;
341
- }
342
-
343
- static void deallocate(JohnsonRuntime* runtime)
344
- {
345
- // our gc callback can create ruby objects, so disable it
346
- JS_SetGCCallbackRT(runtime->js, NULL);
347
-
348
- JSContext *context = NULL;
349
- JSContext *iterator = NULL;
350
-
351
- while ((context = JS_ContextIterator(runtime->js, &iterator)) != NULL) {
352
- JS_SetContextPrivate(iterator, NULL);
353
- JS_DestroyContext(iterator);
354
- iterator = NULL;
355
- }
356
-
357
- JSContext* cleanup = JS_NewContext(runtime->js, 8192L);
358
- JS_HashTableEnumerateEntries(runtime->jsids, proxy_cleanup_enumerator, runtime);
359
- JS_DestroyContext(cleanup);
360
-
361
- JS_DestroyRuntime(runtime->js);
362
- free(runtime);
363
- }
364
-
365
- static VALUE allocate(VALUE klass)
366
- {
367
- JohnsonRuntime* runtime = calloc(1L, sizeof(JohnsonRuntime));
368
- return Data_Wrap_Struct(klass, 0, deallocate, runtime);
369
- }
370
-
371
- void init_Johnson_SpiderMonkey_Runtime(VALUE spidermonkey)
372
- {
373
- /* HACK: These comments are *only* to make RDoc happy.
374
- VALUE johnson = rb_define_module("Johnson");
375
- VALUE spidermonkey = rb_define_module_under(johnson, "SpiderMonkey");
376
- */
377
-
378
- VALUE johnson = rb_const_get(rb_mKernel, rb_intern("Johnson"));
379
- VALUE johnson_runtime = rb_const_get(johnson, rb_intern("Runtime"));
380
-
381
- VALUE klass = rb_define_class_under(spidermonkey, "Runtime", johnson_runtime);
382
-
383
- rb_define_alloc_func(klass, allocate);
384
- rb_define_private_method(klass, "initialize_native", initialize_native, 1);
385
-
386
- rb_define_method(klass, "global", global, 0);
387
- rb_define_method(klass, "debugger=", set_debugger, 1);
388
- rb_define_method(klass, "gc", gc, 0);
389
- #ifdef JS_GC_ZEAL
390
- rb_define_method(klass, "gc_zeal=", set_gc_zeal, 1);
391
- #endif
392
- rb_define_method(klass, "evaluate_compiled_script", evaluate_compiled_script, 1);
393
- rb_define_private_method(klass, "native_compile", native_compile, 3);
394
- rb_define_method(klass, "set_trap", set_trap, 3);
395
- rb_define_private_method(klass, "clear_trap", clear_trap, 2);
396
- }
@@ -1,27 +0,0 @@
1
- #ifndef JOHNSON_SPIDERMONKEY_RUNTIME_H
2
- #define JOHNSON_SPIDERMONKEY_RUNTIME_H
3
-
4
- #include "spidermonkey.h"
5
-
6
- //#define LEAK_ROOT_NAMES
7
-
8
- #define RAISE_JS_ERROR(rb_runtime, ex) \
9
- do {\
10
- JohnsonRuntime * _rt = NULL;\
11
- Data_Get_Struct(rb_runtime, JohnsonRuntime, _rt);\
12
- rb_funcall(rb_runtime, rb_intern("raise_js_exception"), 1,\
13
- convert_to_ruby(_rt, ex)); \
14
- } while(0)
15
-
16
- typedef struct {
17
- JSObject* global;
18
- JSRuntime* js;
19
-
20
- JSHashTable *jsids; // jsid -> rbid
21
- JSHashTable *rbids; // rbid -> jsid
22
- } JohnsonRuntime;
23
-
24
- JSContext* johnson_get_current_context(JohnsonRuntime* runtime);
25
- void init_Johnson_SpiderMonkey_Runtime(VALUE spidermonkey);
26
-
27
- #endif