mdbe 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (688) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +53 -0
  4. data/app.rb +182 -0
  5. data/bin/mdbe +5 -0
  6. data/config.ru +2 -0
  7. data/environment.rb +8 -0
  8. data/lib/mdbe.rb +39 -0
  9. data/lib/mdbe/action_controller_debug_patch.rb +12 -0
  10. data/lib/mdbe/code_evaluation.rb +46 -0
  11. data/lib/mdbe/database_views.rb +24 -0
  12. data/lib/mdbe/database_views/abstract_dictionary.rb +69 -0
  13. data/lib/mdbe/database_views/abstract_exception.rb +25 -0
  14. data/lib/mdbe/database_views/array.rb +28 -0
  15. data/lib/mdbe/database_views/boolean.rb +12 -0
  16. data/lib/mdbe/database_views/class.rb +46 -0
  17. data/lib/mdbe/database_views/exception.rb +3 -0
  18. data/lib/mdbe/database_views/execblock.rb +5 -0
  19. data/lib/mdbe/database_views/fixnum.rb +5 -0
  20. data/lib/mdbe/database_views/float.rb +5 -0
  21. data/lib/mdbe/database_views/globals.rb +2 -0
  22. data/lib/mdbe/database_views/gsnmethod.rb +29 -0
  23. data/lib/mdbe/database_views/hash.rb +5 -0
  24. data/lib/mdbe/database_views/maglev_record.rb +42 -0
  25. data/lib/mdbe/database_views/module.rb +103 -0
  26. data/lib/mdbe/database_views/nilclass.rb +5 -0
  27. data/lib/mdbe/database_views/object.rb +80 -0
  28. data/lib/mdbe/database_views/proc.rb +3 -0
  29. data/lib/mdbe/database_views/repository.rb +3 -0
  30. data/lib/mdbe/database_views/ruby_workspace.rb +5 -0
  31. data/lib/mdbe/database_views/smalltalk_classes.rb +34 -0
  32. data/lib/mdbe/database_views/smalltalk_classes.st +60 -0
  33. data/lib/mdbe/database_views/string.rb +31 -0
  34. data/lib/mdbe/database_views/symbol.rb +32 -0
  35. data/lib/mdbe/database_views/system.rb +61 -0
  36. data/lib/mdbe/database_views/thread.rb +101 -0
  37. data/lib/mdbe/debug_server.rb +22 -0
  38. data/lib/mdbe/halt.rb +42 -0
  39. data/lib/mdbe/ruby_workspace.rb +29 -0
  40. data/lib/mdbe/version.rb +3 -0
  41. data/lib/tasks/maglev-database-explorer_tasks.rake +4 -0
  42. data/public/LICENSE +35 -0
  43. data/public/amber/CHANGELOG +65 -0
  44. data/public/amber/LICENSE +22 -0
  45. data/public/amber/Makefile +53 -0
  46. data/public/amber/README.md +30 -0
  47. data/public/amber/bin/amber +3 -0
  48. data/public/amber/bin/amberc +352 -0
  49. data/public/amber/bin/nodecompile.js +33 -0
  50. data/public/amber/bin/server +3 -0
  51. data/public/amber/bin/server.bat +3 -0
  52. data/public/amber/css/amber-normalize.css +468 -0
  53. data/public/amber/css/amber-normalize.less +501 -0
  54. data/public/amber/css/amber.css +539 -0
  55. data/public/amber/css/documentation.css +84 -0
  56. data/public/amber/css/profstef.css +75 -0
  57. data/public/amber/css/style.css +313 -0
  58. data/public/amber/documentation.html +37 -0
  59. data/public/amber/examples/Makefile +23 -0
  60. data/public/amber/examples/README +4 -0
  61. data/public/amber/examples/android/helloamber/AndroidManifest.xml +19 -0
  62. data/public/amber/examples/android/helloamber/HelloAmber.st +13 -0
  63. data/public/amber/examples/android/helloamber/Makefile +56 -0
  64. data/public/amber/examples/android/helloamber/README.md +80 -0
  65. data/public/amber/examples/android/helloamber/ant.properties +17 -0
  66. data/public/amber/examples/android/helloamber/assets/index.html +15 -0
  67. data/public/amber/examples/android/helloamber/assets/jquery-1.7.2.min.js +4 -0
  68. data/public/amber/examples/android/helloamber/build.xml +83 -0
  69. data/public/amber/examples/android/helloamber/local.properties +10 -0
  70. data/public/amber/examples/android/helloamber/proguard-project.txt +20 -0
  71. data/public/amber/examples/android/helloamber/project.properties +14 -0
  72. data/public/amber/examples/android/helloamber/res/layout/main.xml +6 -0
  73. data/public/amber/examples/android/helloamber/res/values/strings.xml +4 -0
  74. data/public/amber/examples/android/helloamber/src/org/amberlang/android/helloamber/HelloAmber.java +59 -0
  75. data/public/amber/examples/myproject/index.html +16 -0
  76. data/public/amber/examples/nodejs/README +9 -0
  77. data/public/amber/examples/nodejs/benchfib/Benchfib.st +124 -0
  78. data/public/amber/examples/nodejs/benchfib/Makefile +8 -0
  79. data/public/amber/examples/nodejs/benchfib/benchfib +1 -0
  80. data/public/amber/examples/nodejs/hello/Hello.st +9 -0
  81. data/public/amber/examples/nodejs/hello/Makefile +8 -0
  82. data/public/amber/examples/nodejs/hello/README +13 -0
  83. data/public/amber/examples/nodejs/hello/hello +1 -0
  84. data/public/amber/examples/nodejs/meta/Makefile +8 -0
  85. data/public/amber/examples/nodejs/meta/MyScript.st +27 -0
  86. data/public/amber/examples/nodejs/meta/meta +1 -0
  87. data/public/amber/examples/nodejs/pystone/Makefile +8 -0
  88. data/public/amber/examples/nodejs/pystone/Pystone.st +306 -0
  89. data/public/amber/examples/nodejs/pystone/pystone +1 -0
  90. data/public/amber/examples/nodejs/trivialserver/Makefile +8 -0
  91. data/public/amber/examples/nodejs/trivialserver/TrivialServer.st +51 -0
  92. data/public/amber/examples/nodejs/trivialserver/trivial +1 -0
  93. data/public/amber/examples/presentation/esug2011/images/asterix.png +0 -0
  94. data/public/amber/examples/presentation/esug2011/images/background_box.png +0 -0
  95. data/public/amber/examples/presentation/esug2011/images/background_header.png +0 -0
  96. data/public/amber/examples/presentation/esug2011/images/balloon.jpg +0 -0
  97. data/public/amber/examples/presentation/esug2011/images/balloon_header.png +0 -0
  98. data/public/amber/examples/presentation/esug2011/images/devices.jpg +0 -0
  99. data/public/amber/examples/presentation/esug2011/images/enyo.png +0 -0
  100. data/public/amber/examples/presentation/esug2011/images/ide_star_wars.png +0 -0
  101. data/public/amber/examples/presentation/esug2011/images/nodejs.png +0 -0
  102. data/public/amber/examples/presentation/esug2011/images/terminal.png +0 -0
  103. data/public/amber/examples/presentation/esug2011/images/webos.png +0 -0
  104. data/public/amber/examples/presentation/fosdem2012/images/amber.png +0 -0
  105. data/public/amber/examples/presentation/fosdem2012/images/ambrhino.jpg +0 -0
  106. data/public/amber/examples/presentation/fosdem2012/images/nodejs.png +0 -0
  107. data/public/amber/examples/presentation/fosdem2012/images/pharo.png +0 -0
  108. data/public/amber/examples/presentation/fosdem2012/images/php.gif +0 -0
  109. data/public/amber/examples/presentation/fosdem2012/images/rails.png +0 -0
  110. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-next.png +0 -0
  111. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-prev.png +0 -0
  112. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/closedhand.cur +0 -0
  113. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/openhand.cur +0 -0
  114. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-back.png +0 -0
  115. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-forward.png +0 -0
  116. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow.png +0 -0
  117. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.css +100 -0
  118. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.js +1232 -0
  119. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.min.js +13 -0
  120. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.easing.1.3.js +38 -0
  121. data/public/amber/examples/presentation/index.html +17 -0
  122. data/public/amber/examples/presentation/js/Presentation.deploy.js +1922 -0
  123. data/public/amber/examples/presentation/js/Presentation.js +2712 -0
  124. data/public/amber/examples/presentation/st/Presentation.st +1996 -0
  125. data/public/amber/examples/trysmalltalk/index.html +18 -0
  126. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.deploy.js +837 -0
  127. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.js +1206 -0
  128. data/public/amber/examples/trysmalltalk/st/TrySmalltalk.st +964 -0
  129. data/public/amber/examples/twitterwall/css/twitterwall.css +19 -0
  130. data/public/amber/examples/twitterwall/index.html +35 -0
  131. data/public/amber/examples/twitterwall/js/TwitterWall.deploy.js +116 -0
  132. data/public/amber/examples/twitterwall/js/TwitterWall.js +146 -0
  133. data/public/amber/examples/twitterwall/st/TwitterWall.st +91 -0
  134. data/public/amber/examples/webos/README +11 -0
  135. data/public/amber/examples/webos/eris/DuckQwaq.wav +0 -0
  136. data/public/amber/examples/webos/eris/EnyoAmber.st +36 -0
  137. data/public/amber/examples/webos/eris/Eris.css +0 -0
  138. data/public/amber/examples/webos/eris/Eris.st +86 -0
  139. data/public/amber/examples/webos/eris/Makefile +37 -0
  140. data/public/amber/examples/webos/eris/README +3 -0
  141. data/public/amber/examples/webos/eris/appinfo.json +10 -0
  142. data/public/amber/examples/webos/eris/index.html +12 -0
  143. data/public/amber/examples/webos/helloamber/EnyoAmber.st +36 -0
  144. data/public/amber/examples/webos/helloamber/HelloAmber.st +86 -0
  145. data/public/amber/examples/webos/helloamber/Makefile +38 -0
  146. data/public/amber/examples/webos/helloamber/README +5 -0
  147. data/public/amber/examples/webos/helloamber/appinfo.json +10 -0
  148. data/public/amber/examples/webos/helloamber/index.html +12 -0
  149. data/public/amber/favicon.ico +0 -0
  150. data/public/amber/images/amber.png +0 -0
  151. data/public/amber/images/amber.svg +706 -0
  152. data/public/amber/images/amber_small.png +0 -0
  153. data/public/amber/images/off.amber.png +0 -0
  154. data/public/amber/images/off.png +0 -0
  155. data/public/amber/images/offHover.amber.png +0 -0
  156. data/public/amber/images/offHover.png +0 -0
  157. data/public/amber/images/presentation.png +0 -0
  158. data/public/amber/images/profstef.png +0 -0
  159. data/public/amber/images/sprite.amber.png +0 -0
  160. data/public/amber/images/sprite.png +0 -0
  161. data/public/amber/images/tinylogo.amber.png +0 -0
  162. data/public/amber/images/tinylogo.png +0 -0
  163. data/public/amber/images/twitterwall.png +0 -0
  164. data/public/amber/index.html +55 -0
  165. data/public/amber/js/Additional-Examples.deploy.js +15 -0
  166. data/public/amber/js/Additional-Examples.js +21 -0
  167. data/public/amber/js/Benchfib.deploy.js +132 -0
  168. data/public/amber/js/Benchfib.js +167 -0
  169. data/public/amber/js/Canvas.deploy.js +2446 -0
  170. data/public/amber/js/Canvas.js +3547 -0
  171. data/public/amber/js/Compiler-Tests.deploy.js +97 -0
  172. data/public/amber/js/Compiler-Tests.js +137 -0
  173. data/public/amber/js/Compiler.deploy.js +1877 -0
  174. data/public/amber/js/Compiler.js +2622 -0
  175. data/public/amber/js/Documentation.deploy.js +961 -0
  176. data/public/amber/js/Documentation.js +1376 -0
  177. data/public/amber/js/Examples.deploy.js +53 -0
  178. data/public/amber/js/Examples.js +73 -0
  179. data/public/amber/js/IDE.deploy.js +3557 -0
  180. data/public/amber/js/IDE.js +5002 -0
  181. data/public/amber/js/Kernel-Announcements.deploy.js +107 -0
  182. data/public/amber/js/Kernel-Announcements.js +152 -0
  183. data/public/amber/js/Kernel-Classes.deploy.js +774 -0
  184. data/public/amber/js/Kernel-Classes.js +1095 -0
  185. data/public/amber/js/Kernel-Collections.deploy.js +3121 -0
  186. data/public/amber/js/Kernel-Collections.js +4427 -0
  187. data/public/amber/js/Kernel-Exceptions.deploy.js +244 -0
  188. data/public/amber/js/Kernel-Exceptions.js +349 -0
  189. data/public/amber/js/Kernel-Methods.deploy.js +573 -0
  190. data/public/amber/js/Kernel-Methods.js +807 -0
  191. data/public/amber/js/Kernel-Objects.deploy.js +2877 -0
  192. data/public/amber/js/Kernel-Objects.js +4107 -0
  193. data/public/amber/js/Kernel-Tests.deploy.js +1513 -0
  194. data/public/amber/js/Kernel-Tests.js +2053 -0
  195. data/public/amber/js/Kernel-Transcript.deploy.js +142 -0
  196. data/public/amber/js/Kernel-Transcript.js +202 -0
  197. data/public/amber/js/Maglev-Core.deploy.js +2996 -0
  198. data/public/amber/js/Maglev-Core.js +4246 -0
  199. data/public/amber/js/Maglev-Database-Explorer.deploy.js +4476 -0
  200. data/public/amber/js/Maglev-Database-Explorer.js +6232 -0
  201. data/public/amber/js/Maglev-Vendor.deploy.js +350 -0
  202. data/public/amber/js/Maglev-Vendor.js +465 -0
  203. data/public/amber/js/README.md +5 -0
  204. data/public/amber/js/SUnit.deploy.js +351 -0
  205. data/public/amber/js/SUnit.js +501 -0
  206. data/public/amber/js/amber.js +273 -0
  207. data/public/amber/js/boot.js +602 -0
  208. data/public/amber/js/compat.js +22 -0
  209. data/public/amber/js/init.js +9 -0
  210. data/public/amber/js/lib/CodeMirror/LICENSE +19 -0
  211. data/public/amber/js/lib/CodeMirror/active-line.js +39 -0
  212. data/public/amber/js/lib/CodeMirror/amber.css +21 -0
  213. data/public/amber/js/lib/CodeMirror/codemirror.css +67 -0
  214. data/public/amber/js/lib/CodeMirror/codemirror.js +2144 -0
  215. data/public/amber/js/lib/CodeMirror/smalltalk.js +134 -0
  216. data/public/amber/js/lib/jQuery/jquery-1.4.4.min.js +167 -0
  217. data/public/amber/js/lib/jQuery/jquery-1.6.4.min.js +4 -0
  218. data/public/amber/js/lib/jQuery/jquery-ui-1.8.16.custom.min.js +791 -0
  219. data/public/amber/js/lib/jQuery/jquery.textarea.js +267 -0
  220. data/public/amber/js/lib/peg-0.6.2.min.js +2 -0
  221. data/public/amber/js/lib/showdown.js +419 -0
  222. data/public/amber/js/parser.js +4222 -0
  223. data/public/amber/js/parser.pegjs +223 -0
  224. data/public/amber/learn.html +40 -0
  225. data/public/amber/repl/Makefile +8 -0
  226. data/public/amber/repl/REPL.js +124 -0
  227. data/public/amber/repl/REPL.st +56 -0
  228. data/public/amber/repl/amber.js +18085 -0
  229. data/public/amber/server/FileServer.st +576 -0
  230. data/public/amber/server/Makefile +8 -0
  231. data/public/amber/server/server.js +13049 -0
  232. data/public/amber/st/Benchfib.js +297 -0
  233. data/public/amber/st/Benchfib.st +124 -0
  234. data/public/amber/st/Canvas.st +968 -0
  235. data/public/amber/st/Compiler-Tests.st +471 -0
  236. data/public/amber/st/Compiler.st +1445 -0
  237. data/public/amber/st/Documentation.st +758 -0
  238. data/public/amber/st/Examples.js +100 -0
  239. data/public/amber/st/Examples.st +38 -0
  240. data/public/amber/st/IDE.st +2404 -0
  241. data/public/amber/st/Kernel-Announcements.st +61 -0
  242. data/public/amber/st/Kernel-Classes.st +462 -0
  243. data/public/amber/st/Kernel-Collections.st +1611 -0
  244. data/public/amber/st/Kernel-Exceptions.st +124 -0
  245. data/public/amber/st/Kernel-Methods.st +291 -0
  246. data/public/amber/st/Kernel-Objects.st +1587 -0
  247. data/public/amber/st/Kernel-Tests.st +953 -0
  248. data/public/amber/st/Kernel-Transcript.st +70 -0
  249. data/public/amber/st/Maglev-Core.st +1694 -0
  250. data/public/amber/st/Maglev-Database-Explorer.st +3148 -0
  251. data/public/amber/st/Maglev-Vendor.st +151 -0
  252. data/public/amber/st/Makefile +104 -0
  253. data/public/amber/st/README.md +4 -0
  254. data/public/amber/st/SUnit.st +172 -0
  255. data/public/css/bootstrap-combined.no-icons.min.css +731 -0
  256. data/public/css/bootstrap.css +6811 -0
  257. data/public/css/images/animated-overlay.gif +0 -0
  258. data/public/css/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  259. data/public/css/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  260. data/public/css/images/ui-bg_flat_10_000000_40x100.png +0 -0
  261. data/public/css/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  262. data/public/css/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  263. data/public/css/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  264. data/public/css/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  265. data/public/css/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  266. data/public/css/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  267. data/public/css/images/ui-icons_222222_256x240.png +0 -0
  268. data/public/css/images/ui-icons_228ef1_256x240.png +0 -0
  269. data/public/css/images/ui-icons_ef8c08_256x240.png +0 -0
  270. data/public/css/images/ui-icons_ffd27a_256x240.png +0 -0
  271. data/public/css/images/ui-icons_ffffff_256x240.png +0 -0
  272. data/public/css/jquery-ui.min.css +5 -0
  273. data/public/css/smalltalk_code.css +42 -0
  274. data/public/css/style.css +210 -0
  275. data/public/images/bg_tile.png +0 -0
  276. data/public/images/maglev-logo.gif +0 -0
  277. data/public/images/mchammer.gif +0 -0
  278. data/public/images/rails_tiny.png +0 -0
  279. data/public/images/ruby.png +0 -0
  280. data/public/images/ruby_smalltalk_bridge.png +0 -0
  281. data/public/images/smalltalk.png +0 -0
  282. data/public/img/glyphicons-halflings.png +0 -0
  283. data/public/index.html +118 -0
  284. data/public/libs/bootstrap.min.js +7 -0
  285. data/public/libs/codemirror/CONTRIBUTING.md +72 -0
  286. data/public/libs/codemirror/LICENSE +23 -0
  287. data/public/libs/codemirror/README.md +11 -0
  288. data/public/libs/codemirror/addon/dialog/dialog.css +32 -0
  289. data/public/libs/codemirror/addon/dialog/dialog.js +80 -0
  290. data/public/libs/codemirror/addon/display/placeholder.js +54 -0
  291. data/public/libs/codemirror/addon/edit/closebrackets.js +54 -0
  292. data/public/libs/codemirror/addon/edit/closetag.js +86 -0
  293. data/public/libs/codemirror/addon/edit/continuecomment.js +44 -0
  294. data/public/libs/codemirror/addon/edit/continuelist.js +25 -0
  295. data/public/libs/codemirror/addon/edit/matchbrackets.js +82 -0
  296. data/public/libs/codemirror/addon/fold/brace-fold.js +31 -0
  297. data/public/libs/codemirror/addon/fold/foldcode.js +32 -0
  298. data/public/libs/codemirror/addon/fold/indent-fold.js +11 -0
  299. data/public/libs/codemirror/addon/fold/xml-fold.js +64 -0
  300. data/public/libs/codemirror/addon/hint/html-hint.js +582 -0
  301. data/public/libs/codemirror/addon/hint/javascript-hint.js +142 -0
  302. data/public/libs/codemirror/addon/hint/pig-hint.js +117 -0
  303. data/public/libs/codemirror/addon/hint/python-hint.js +93 -0
  304. data/public/libs/codemirror/addon/hint/show-hint.css +38 -0
  305. data/public/libs/codemirror/addon/hint/show-hint.js +180 -0
  306. data/public/libs/codemirror/addon/hint/xml-hint.js +118 -0
  307. data/public/libs/codemirror/addon/lint/javascript-lint.js +127 -0
  308. data/public/libs/codemirror/addon/lint/json-lint.js +14 -0
  309. data/public/libs/codemirror/addon/lint/lint.css +96 -0
  310. data/public/libs/codemirror/addon/lint/lint.js +197 -0
  311. data/public/libs/codemirror/addon/mode/loadmode.js +51 -0
  312. data/public/libs/codemirror/addon/mode/multiplex.js +95 -0
  313. data/public/libs/codemirror/addon/mode/overlay.js +59 -0
  314. data/public/libs/codemirror/addon/runmode/colorize.js +29 -0
  315. data/public/libs/codemirror/addon/runmode/runmode-standalone.js +130 -0
  316. data/public/libs/codemirror/addon/runmode/runmode.js +52 -0
  317. data/public/libs/codemirror/addon/runmode/runmode.node.js +89 -0
  318. data/public/libs/codemirror/addon/search/match-highlighter.js +60 -0
  319. data/public/libs/codemirror/addon/search/search.js +131 -0
  320. data/public/libs/codemirror/addon/search/searchcursor.js +133 -0
  321. data/public/libs/codemirror/addon/selection/active-line.js +39 -0
  322. data/public/libs/codemirror/addon/selection/mark-selection.js +34 -0
  323. data/public/libs/codemirror/bin/compress +91 -0
  324. data/public/libs/codemirror/bin/lint +11 -0
  325. data/public/libs/codemirror/demo/activeline.html +70 -0
  326. data/public/libs/codemirror/demo/bidi.html +61 -0
  327. data/public/libs/codemirror/demo/btree.html +87 -0
  328. data/public/libs/codemirror/demo/buffers.html +98 -0
  329. data/public/libs/codemirror/demo/changemode.html +50 -0
  330. data/public/libs/codemirror/demo/closebrackets.html +63 -0
  331. data/public/libs/codemirror/demo/closetag.html +37 -0
  332. data/public/libs/codemirror/demo/complete.html +70 -0
  333. data/public/libs/codemirror/demo/emacs.html +60 -0
  334. data/public/libs/codemirror/demo/folding.html +69 -0
  335. data/public/libs/codemirror/demo/fullscreen.html +147 -0
  336. data/public/libs/codemirror/demo/html5complete.html +92 -0
  337. data/public/libs/codemirror/demo/indentwrap.html +49 -0
  338. data/public/libs/codemirror/demo/lint.html +90 -0
  339. data/public/libs/codemirror/demo/loadmode.html +40 -0
  340. data/public/libs/codemirror/demo/marker.html +59 -0
  341. data/public/libs/codemirror/demo/markselection.html +36 -0
  342. data/public/libs/codemirror/demo/matchhighlighter.html +38 -0
  343. data/public/libs/codemirror/demo/multiplex.html +60 -0
  344. data/public/libs/codemirror/demo/mustache.html +59 -0
  345. data/public/libs/codemirror/demo/placeholder.html +36 -0
  346. data/public/libs/codemirror/demo/preview.html +76 -0
  347. data/public/libs/codemirror/demo/resize.html +49 -0
  348. data/public/libs/codemirror/demo/runmode.html +50 -0
  349. data/public/libs/codemirror/demo/search.html +85 -0
  350. data/public/libs/codemirror/demo/spanaffectswrapping_shim.html +73 -0
  351. data/public/libs/codemirror/demo/theme.html +89 -0
  352. data/public/libs/codemirror/demo/variableheight.html +52 -0
  353. data/public/libs/codemirror/demo/vim.html +65 -0
  354. data/public/libs/codemirror/demo/visibletabs.html +53 -0
  355. data/public/libs/codemirror/demo/widget.html +74 -0
  356. data/public/libs/codemirror/demo/xmlcomplete.html +81 -0
  357. data/public/libs/codemirror/index.html +487 -0
  358. data/public/libs/codemirror/keymap/emacs.js +30 -0
  359. data/public/libs/codemirror/keymap/vim.js +3044 -0
  360. data/public/libs/codemirror/lib/codemirror.css +253 -0
  361. data/public/libs/codemirror/lib/codemirror.js +5585 -0
  362. data/public/libs/codemirror/mode/apl/apl.js +160 -0
  363. data/public/libs/codemirror/mode/apl/index.html +61 -0
  364. data/public/libs/codemirror/mode/asterisk/asterisk.js +183 -0
  365. data/public/libs/codemirror/mode/asterisk/index.html +142 -0
  366. data/public/libs/codemirror/mode/clike/clike.js +302 -0
  367. data/public/libs/codemirror/mode/clike/index.html +103 -0
  368. data/public/libs/codemirror/mode/clike/scala.html +767 -0
  369. data/public/libs/codemirror/mode/clojure/clojure.js +222 -0
  370. data/public/libs/codemirror/mode/clojure/index.html +76 -0
  371. data/public/libs/codemirror/mode/coffeescript/LICENSE +22 -0
  372. data/public/libs/codemirror/mode/coffeescript/coffeescript.js +346 -0
  373. data/public/libs/codemirror/mode/coffeescript/index.html +728 -0
  374. data/public/libs/codemirror/mode/commonlisp/commonlisp.js +101 -0
  375. data/public/libs/codemirror/mode/commonlisp/index.html +165 -0
  376. data/public/libs/codemirror/mode/css/css.js +567 -0
  377. data/public/libs/codemirror/mode/css/index.html +58 -0
  378. data/public/libs/codemirror/mode/css/scss.html +145 -0
  379. data/public/libs/codemirror/mode/css/scss_test.js +80 -0
  380. data/public/libs/codemirror/mode/css/test.js +113 -0
  381. data/public/libs/codemirror/mode/d/d.js +205 -0
  382. data/public/libs/codemirror/mode/d/index.html +262 -0
  383. data/public/libs/codemirror/mode/diff/diff.js +32 -0
  384. data/public/libs/codemirror/mode/diff/index.html +105 -0
  385. data/public/libs/codemirror/mode/ecl/ecl.js +192 -0
  386. data/public/libs/codemirror/mode/ecl/index.html +39 -0
  387. data/public/libs/codemirror/mode/erlang/erlang.js +463 -0
  388. data/public/libs/codemirror/mode/erlang/index.html +64 -0
  389. data/public/libs/codemirror/mode/gas/gas.js +326 -0
  390. data/public/libs/codemirror/mode/gas/index.html +57 -0
  391. data/public/libs/codemirror/mode/gfm/gfm.js +96 -0
  392. data/public/libs/codemirror/mode/gfm/index.html +74 -0
  393. data/public/libs/codemirror/mode/gfm/test.js +112 -0
  394. data/public/libs/codemirror/mode/go/go.js +165 -0
  395. data/public/libs/codemirror/mode/go/index.html +74 -0
  396. data/public/libs/codemirror/mode/groovy/groovy.js +210 -0
  397. data/public/libs/codemirror/mode/groovy/index.html +73 -0
  398. data/public/libs/codemirror/mode/haskell/haskell.js +242 -0
  399. data/public/libs/codemirror/mode/haskell/index.html +62 -0
  400. data/public/libs/codemirror/mode/haxe/haxe.js +429 -0
  401. data/public/libs/codemirror/mode/haxe/index.html +90 -0
  402. data/public/libs/codemirror/mode/htmlembedded/htmlembedded.js +73 -0
  403. data/public/libs/codemirror/mode/htmlembedded/index.html +49 -0
  404. data/public/libs/codemirror/mode/htmlmixed/htmlmixed.js +104 -0
  405. data/public/libs/codemirror/mode/htmlmixed/index.html +73 -0
  406. data/public/libs/codemirror/mode/http/http.js +98 -0
  407. data/public/libs/codemirror/mode/http/index.html +32 -0
  408. data/public/libs/codemirror/mode/javascript/index.html +92 -0
  409. data/public/libs/codemirror/mode/javascript/javascript.js +467 -0
  410. data/public/libs/codemirror/mode/javascript/typescript.html +48 -0
  411. data/public/libs/codemirror/mode/jinja2/index.html +38 -0
  412. data/public/libs/codemirror/mode/jinja2/jinja2.js +42 -0
  413. data/public/libs/codemirror/mode/less/index.html +741 -0
  414. data/public/libs/codemirror/mode/less/less.js +266 -0
  415. data/public/libs/codemirror/mode/livescript/LICENSE +23 -0
  416. data/public/libs/codemirror/mode/livescript/index.html +446 -0
  417. data/public/libs/codemirror/mode/livescript/livescript.js +267 -0
  418. data/public/libs/codemirror/mode/livescript/livescript.ls +266 -0
  419. data/public/libs/codemirror/mode/lua/index.html +74 -0
  420. data/public/libs/codemirror/mode/lua/lua.js +140 -0
  421. data/public/libs/codemirror/mode/markdown/index.html +344 -0
  422. data/public/libs/codemirror/mode/markdown/markdown.js +526 -0
  423. data/public/libs/codemirror/mode/markdown/test.js +636 -0
  424. data/public/libs/codemirror/mode/meta.js +75 -0
  425. data/public/libs/codemirror/mode/mirc/index.html +149 -0
  426. data/public/libs/codemirror/mode/mirc/mirc.js +177 -0
  427. data/public/libs/codemirror/mode/ntriples/index.html +33 -0
  428. data/public/libs/codemirror/mode/ntriples/ntriples.js +170 -0
  429. data/public/libs/codemirror/mode/ocaml/index.html +131 -0
  430. data/public/libs/codemirror/mode/ocaml/ocaml.js +113 -0
  431. data/public/libs/codemirror/mode/pascal/LICENSE +7 -0
  432. data/public/libs/codemirror/mode/pascal/index.html +48 -0
  433. data/public/libs/codemirror/mode/pascal/pascal.js +94 -0
  434. data/public/libs/codemirror/mode/perl/LICENSE +19 -0
  435. data/public/libs/codemirror/mode/perl/index.html +62 -0
  436. data/public/libs/codemirror/mode/perl/perl.js +816 -0
  437. data/public/libs/codemirror/mode/php/index.html +51 -0
  438. data/public/libs/codemirror/mode/php/php.js +129 -0
  439. data/public/libs/codemirror/mode/pig/index.html +42 -0
  440. data/public/libs/codemirror/mode/pig/pig.js +171 -0
  441. data/public/libs/codemirror/mode/properties/index.html +41 -0
  442. data/public/libs/codemirror/mode/properties/properties.js +63 -0
  443. data/public/libs/codemirror/mode/python/LICENSE.txt +21 -0
  444. data/public/libs/codemirror/mode/python/index.html +135 -0
  445. data/public/libs/codemirror/mode/python/python.js +340 -0
  446. data/public/libs/codemirror/mode/q/index.html +131 -0
  447. data/public/libs/codemirror/mode/q/q.js +124 -0
  448. data/public/libs/codemirror/mode/r/LICENSE +24 -0
  449. data/public/libs/codemirror/mode/r/index.html +74 -0
  450. data/public/libs/codemirror/mode/r/r.js +141 -0
  451. data/public/libs/codemirror/mode/rpm/changes/changes.js +19 -0
  452. data/public/libs/codemirror/mode/rpm/changes/index.html +53 -0
  453. data/public/libs/codemirror/mode/rpm/spec/index.html +99 -0
  454. data/public/libs/codemirror/mode/rpm/spec/spec.css +5 -0
  455. data/public/libs/codemirror/mode/rpm/spec/spec.js +66 -0
  456. data/public/libs/codemirror/mode/rst/LICENSE.txt +21 -0
  457. data/public/libs/codemirror/mode/rst/index.html +524 -0
  458. data/public/libs/codemirror/mode/rst/rst.js +550 -0
  459. data/public/libs/codemirror/mode/ruby/LICENSE +24 -0
  460. data/public/libs/codemirror/mode/ruby/index.html +173 -0
  461. data/public/libs/codemirror/mode/ruby/ruby.js +197 -0
  462. data/public/libs/codemirror/mode/rust/index.html +48 -0
  463. data/public/libs/codemirror/mode/rust/rust.js +432 -0
  464. data/public/libs/codemirror/mode/sass/index.html +54 -0
  465. data/public/libs/codemirror/mode/sass/sass.js +349 -0
  466. data/public/libs/codemirror/mode/scheme/index.html +65 -0
  467. data/public/libs/codemirror/mode/scheme/scheme.js +230 -0
  468. data/public/libs/codemirror/mode/shell/index.html +51 -0
  469. data/public/libs/codemirror/mode/shell/shell.js +118 -0
  470. data/public/libs/codemirror/mode/sieve/LICENSE +19 -0
  471. data/public/libs/codemirror/mode/sieve/index.html +81 -0
  472. data/public/libs/codemirror/mode/sieve/sieve.js +183 -0
  473. data/public/libs/codemirror/mode/smalltalk/index.html +57 -0
  474. data/public/libs/codemirror/mode/smalltalk/smalltalk.js +141 -0
  475. data/public/libs/codemirror/mode/smarty/index.html +83 -0
  476. data/public/libs/codemirror/mode/smarty/smarty.js +148 -0
  477. data/public/libs/codemirror/mode/sparql/index.html +42 -0
  478. data/public/libs/codemirror/mode/sparql/sparql.js +143 -0
  479. data/public/libs/codemirror/mode/sql/index.html +68 -0
  480. data/public/libs/codemirror/mode/sql/sql.js +268 -0
  481. data/public/libs/codemirror/mode/stex/index.html +98 -0
  482. data/public/libs/codemirror/mode/stex/stex.js +246 -0
  483. data/public/libs/codemirror/mode/stex/test.js +117 -0
  484. data/public/libs/codemirror/mode/tcl/index.html +129 -0
  485. data/public/libs/codemirror/mode/tcl/tcl.js +131 -0
  486. data/public/libs/codemirror/mode/tiddlywiki/index.html +142 -0
  487. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  488. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.js +353 -0
  489. data/public/libs/codemirror/mode/tiki/index.html +81 -0
  490. data/public/libs/codemirror/mode/tiki/tiki.css +26 -0
  491. data/public/libs/codemirror/mode/tiki/tiki.js +308 -0
  492. data/public/libs/codemirror/mode/turtle/index.html +39 -0
  493. data/public/libs/codemirror/mode/turtle/turtle.js +145 -0
  494. data/public/libs/codemirror/mode/vb/LICENSE.txt +21 -0
  495. data/public/libs/codemirror/mode/vb/index.html +88 -0
  496. data/public/libs/codemirror/mode/vb/vb.js +259 -0
  497. data/public/libs/codemirror/mode/vbscript/index.html +42 -0
  498. data/public/libs/codemirror/mode/vbscript/vbscript.js +26 -0
  499. data/public/libs/codemirror/mode/velocity/index.html +103 -0
  500. data/public/libs/codemirror/mode/velocity/velocity.js +144 -0
  501. data/public/libs/codemirror/mode/verilog/index.html +121 -0
  502. data/public/libs/codemirror/mode/verilog/verilog.js +182 -0
  503. data/public/libs/codemirror/mode/xml/index.html +45 -0
  504. data/public/libs/codemirror/mode/xml/xml.js +328 -0
  505. data/public/libs/codemirror/mode/xquery/LICENSE +20 -0
  506. data/public/libs/codemirror/mode/xquery/index.html +221 -0
  507. data/public/libs/codemirror/mode/xquery/test.js +64 -0
  508. data/public/libs/codemirror/mode/xquery/xquery.js +450 -0
  509. data/public/libs/codemirror/mode/yaml/index.html +68 -0
  510. data/public/libs/codemirror/mode/yaml/yaml.js +95 -0
  511. data/public/libs/codemirror/mode/z80/index.html +39 -0
  512. data/public/libs/codemirror/mode/z80/z80.js +85 -0
  513. data/public/libs/codemirror/package.json +21 -0
  514. data/public/libs/codemirror/test/doc_test.js +329 -0
  515. data/public/libs/codemirror/test/driver.js +138 -0
  516. data/public/libs/codemirror/test/index.html +182 -0
  517. data/public/libs/codemirror/test/lint/acorn.js +1593 -0
  518. data/public/libs/codemirror/test/lint/lint.js +112 -0
  519. data/public/libs/codemirror/test/lint/parse-js.js +1372 -0
  520. data/public/libs/codemirror/test/lint/walk.js +216 -0
  521. data/public/libs/codemirror/test/mode_test.css +10 -0
  522. data/public/libs/codemirror/test/mode_test.js +192 -0
  523. data/public/libs/codemirror/test/phantom_driver.js +31 -0
  524. data/public/libs/codemirror/test/run.js +33 -0
  525. data/public/libs/codemirror/test/test.js +1400 -0
  526. data/public/libs/codemirror/test/vim_test.js +1688 -0
  527. data/public/libs/codemirror/theme/ambiance-mobile.css +5 -0
  528. data/public/libs/codemirror/theme/ambiance.css +75 -0
  529. data/public/libs/codemirror/theme/blackboard.css +25 -0
  530. data/public/libs/codemirror/theme/cobalt.css +18 -0
  531. data/public/libs/codemirror/theme/eclipse.css +25 -0
  532. data/public/libs/codemirror/theme/elegant.css +10 -0
  533. data/public/libs/codemirror/theme/erlang-dark.css +21 -0
  534. data/public/libs/codemirror/theme/lesser-dark.css +44 -0
  535. data/public/libs/codemirror/theme/midnight.css +52 -0
  536. data/public/libs/codemirror/theme/monokai.css +28 -0
  537. data/public/libs/codemirror/theme/neat.css +9 -0
  538. data/public/libs/codemirror/theme/night.css +21 -0
  539. data/public/libs/codemirror/theme/rubyblue.css +21 -0
  540. data/public/libs/codemirror/theme/solarized.css +207 -0
  541. data/public/libs/codemirror/theme/twilight.css +26 -0
  542. data/public/libs/codemirror/theme/vibrant-ink.css +27 -0
  543. data/public/libs/codemirror/theme/xq-dark.css +46 -0
  544. data/public/libs/codemirror/theme/xq-light.css +43 -0
  545. data/public/libs/font-awesome/css/font-awesome-ie7.css +983 -0
  546. data/public/libs/font-awesome/css/font-awesome-ie7.min.css +24 -0
  547. data/public/libs/font-awesome/css/font-awesome.css +1268 -0
  548. data/public/libs/font-awesome/css/font-awesome.min.css +24 -0
  549. data/public/libs/font-awesome/font/FontAwesome.otf +0 -0
  550. data/public/libs/font-awesome/font/fontawesome-webfont.eot +0 -0
  551. data/public/libs/font-awesome/font/fontawesome-webfont.svg +339 -0
  552. data/public/libs/font-awesome/font/fontawesome-webfont.ttf +0 -0
  553. data/public/libs/font-awesome/font/fontawesome-webfont.woff +0 -0
  554. data/public/libs/font-awesome/less/bootstrap.less +78 -0
  555. data/public/libs/font-awesome/less/core.less +132 -0
  556. data/public/libs/font-awesome/less/extras.less +79 -0
  557. data/public/libs/font-awesome/less/font-awesome-ie7.less +413 -0
  558. data/public/libs/font-awesome/less/font-awesome.less +32 -0
  559. data/public/libs/font-awesome/less/icons.less +330 -0
  560. data/public/libs/font-awesome/less/mixins.less +34 -0
  561. data/public/libs/font-awesome/less/path.less +15 -0
  562. data/public/libs/font-awesome/less/variables.less +9 -0
  563. data/public/libs/jquery-1.10.0.min.js +6 -0
  564. data/public/libs/jquery-ui.min.js +12 -0
  565. data/public/libs/jquery.jsPlumb-1.4.0-all.js +9571 -0
  566. data/public/libs/jquery.livequery.js +226 -0
  567. data/public/libs/jsPlumbInitializer.js +72 -0
  568. data/public/libs/jstree/README.txt +10 -0
  569. data/public/libs/jstree/_demo/_dump.sql +20 -0
  570. data/public/libs/jstree/_demo/_inc/__mysql_errors.log +0 -0
  571. data/public/libs/jstree/_demo/_inc/class._database.php +146 -0
  572. data/public/libs/jstree/_demo/_inc/class._database_i.php +152 -0
  573. data/public/libs/jstree/_demo/_inc/class.tree.php +602 -0
  574. data/public/libs/jstree/_demo/_install.txt +6 -0
  575. data/public/libs/jstree/_demo/config.php +14 -0
  576. data/public/libs/jstree/_demo/file.png +0 -0
  577. data/public/libs/jstree/_demo/folder.png +0 -0
  578. data/public/libs/jstree/_demo/index.html +461 -0
  579. data/public/libs/jstree/_demo/root.png +0 -0
  580. data/public/libs/jstree/_demo/server.php +69 -0
  581. data/public/libs/jstree/_docs/!style.css +48 -0
  582. data/public/libs/jstree/_docs/_drive.png +0 -0
  583. data/public/libs/jstree/_docs/_html_data.html +2 -0
  584. data/public/libs/jstree/_docs/_json_data.json +4 -0
  585. data/public/libs/jstree/_docs/_search_data.json +6 -0
  586. data/public/libs/jstree/_docs/_search_result.json +1 -0
  587. data/public/libs/jstree/_docs/_xml_flat.xml +12 -0
  588. data/public/libs/jstree/_docs/_xml_nest.xml +18 -0
  589. data/public/libs/jstree/_docs/checkbox.html +171 -0
  590. data/public/libs/jstree/_docs/contextmenu.html +121 -0
  591. data/public/libs/jstree/_docs/cookies.html +97 -0
  592. data/public/libs/jstree/_docs/core.html +689 -0
  593. data/public/libs/jstree/_docs/crrm.html +316 -0
  594. data/public/libs/jstree/_docs/dnd.html +199 -0
  595. data/public/libs/jstree/_docs/hotkeys.html +82 -0
  596. data/public/libs/jstree/_docs/html_data.html +175 -0
  597. data/public/libs/jstree/_docs/index.html +86 -0
  598. data/public/libs/jstree/_docs/json_data.html +249 -0
  599. data/public/libs/jstree/_docs/languages.html +152 -0
  600. data/public/libs/jstree/_docs/logo.png +0 -0
  601. data/public/libs/jstree/_docs/search.html +153 -0
  602. data/public/libs/jstree/_docs/sort.html +85 -0
  603. data/public/libs/jstree/_docs/syntax/!script.js +2232 -0
  604. data/public/libs/jstree/_docs/syntax/!style.css +511 -0
  605. data/public/libs/jstree/_docs/syntax/clipboard.swf +0 -0
  606. data/public/libs/jstree/_docs/syntax/help.png +0 -0
  607. data/public/libs/jstree/_docs/syntax/magnifier.png +0 -0
  608. data/public/libs/jstree/_docs/syntax/page_white_code.png +0 -0
  609. data/public/libs/jstree/_docs/syntax/page_white_copy.png +0 -0
  610. data/public/libs/jstree/_docs/syntax/printer.png +0 -0
  611. data/public/libs/jstree/_docs/syntax/wrapping.png +0 -0
  612. data/public/libs/jstree/_docs/themeroller.html +107 -0
  613. data/public/libs/jstree/_docs/themes.html +127 -0
  614. data/public/libs/jstree/_docs/types.html +178 -0
  615. data/public/libs/jstree/_docs/ui.html +197 -0
  616. data/public/libs/jstree/_docs/unique.html +85 -0
  617. data/public/libs/jstree/_docs/xml_data.html +218 -0
  618. data/public/libs/jstree/_lib/jquery.cookie.js +96 -0
  619. data/public/libs/jstree/_lib/jquery.hotkeys.js +99 -0
  620. data/public/libs/jstree/_lib/jquery.js +5 -0
  621. data/public/libs/jstree/jquery.jstree.js +4564 -0
  622. data/public/libs/jstree/themes/apple/bg.jpg +0 -0
  623. data/public/libs/jstree/themes/apple/d.png +0 -0
  624. data/public/libs/jstree/themes/apple/dot_for_ie.gif +0 -0
  625. data/public/libs/jstree/themes/apple/style.css +61 -0
  626. data/public/libs/jstree/themes/apple/throbber.gif +0 -0
  627. data/public/libs/jstree/themes/classic/d.gif +0 -0
  628. data/public/libs/jstree/themes/classic/d.png +0 -0
  629. data/public/libs/jstree/themes/classic/dot_for_ie.gif +0 -0
  630. data/public/libs/jstree/themes/classic/style.css +77 -0
  631. data/public/libs/jstree/themes/classic/throbber.gif +0 -0
  632. data/public/libs/jstree/themes/default-rtl/d.gif +0 -0
  633. data/public/libs/jstree/themes/default-rtl/d.png +0 -0
  634. data/public/libs/jstree/themes/default-rtl/dots.gif +0 -0
  635. data/public/libs/jstree/themes/default-rtl/style.css +84 -0
  636. data/public/libs/jstree/themes/default-rtl/throbber.gif +0 -0
  637. data/public/libs/jstree/themes/default/d.gif +0 -0
  638. data/public/libs/jstree/themes/default/d.png +0 -0
  639. data/public/libs/jstree/themes/default/style.css +74 -0
  640. data/public/libs/jstree/themes/default/throbber.gif +0 -0
  641. data/public/themes/geo-bootstrap/README.md +25 -0
  642. data/public/themes/geo-bootstrap/img/flames.gif +0 -0
  643. data/public/themes/geo-bootstrap/img/glyphicons-halflings-white.png +0 -0
  644. data/public/themes/geo-bootstrap/img/glyphicons-halflings.png +0 -0
  645. data/public/themes/geo-bootstrap/img/microfab.gif +0 -0
  646. data/public/themes/geo-bootstrap/img/progress.gif +0 -0
  647. data/public/themes/geo-bootstrap/img/rainbow.gif +0 -0
  648. data/public/themes/geo-bootstrap/img/stars.gif +0 -0
  649. data/public/themes/geo-bootstrap/img/test/7upspot.gif +0 -0
  650. data/public/themes/geo-bootstrap/img/test/americanflag.gif +0 -0
  651. data/public/themes/geo-bootstrap/img/test/community.gif +0 -0
  652. data/public/themes/geo-bootstrap/img/test/computer-01.gif +0 -0
  653. data/public/themes/geo-bootstrap/img/test/computer.gif +0 -0
  654. data/public/themes/geo-bootstrap/img/test/construction.gif +0 -0
  655. data/public/themes/geo-bootstrap/img/test/counter.gif +0 -0
  656. data/public/themes/geo-bootstrap/img/test/counter2.gif +0 -0
  657. data/public/themes/geo-bootstrap/img/test/divider.gif +0 -0
  658. data/public/themes/geo-bootstrap/img/test/divider1.gif +0 -0
  659. data/public/themes/geo-bootstrap/img/test/divider2.gif +0 -0
  660. data/public/themes/geo-bootstrap/img/test/divider3.gif +0 -0
  661. data/public/themes/geo-bootstrap/img/test/divider4.gif +0 -0
  662. data/public/themes/geo-bootstrap/img/test/drudgesiren.gif +0 -0
  663. data/public/themes/geo-bootstrap/img/test/emailme.gif +0 -0
  664. data/public/themes/geo-bootstrap/img/test/funky.gif +0 -0
  665. data/public/themes/geo-bootstrap/img/test/geocities.jpg +0 -0
  666. data/public/themes/geo-bootstrap/img/test/hacker.gif +0 -0
  667. data/public/themes/geo-bootstrap/img/test/heart.gif +0 -0
  668. data/public/themes/geo-bootstrap/img/test/hot.gif +0 -0
  669. data/public/themes/geo-bootstrap/img/test/ie_logo.gif +0 -0
  670. data/public/themes/geo-bootstrap/img/test/mailkitten.gif +0 -0
  671. data/public/themes/geo-bootstrap/img/test/mchammer.gif +0 -0
  672. data/public/themes/geo-bootstrap/img/test/new.gif +0 -0
  673. data/public/themes/geo-bootstrap/img/test/new2.gif +0 -0
  674. data/public/themes/geo-bootstrap/img/test/noframes.gif +0 -0
  675. data/public/themes/geo-bootstrap/img/test/notepad.gif +0 -0
  676. data/public/themes/geo-bootstrap/img/test/ns_logo.gif +0 -0
  677. data/public/themes/geo-bootstrap/img/test/sign-in.gif +0 -0
  678. data/public/themes/geo-bootstrap/img/test/spinningearth.gif +0 -0
  679. data/public/themes/geo-bootstrap/img/test/underconstruction.gif +0 -0
  680. data/public/themes/geo-bootstrap/img/test/wabwalk.gif +0 -0
  681. data/public/themes/geo-bootstrap/img/test/webtrips.gif +0 -0
  682. data/public/themes/geo-bootstrap/img/test/yahooweek.gif +0 -0
  683. data/public/themes/geo-bootstrap/package.json +21 -0
  684. data/public/themes/geo-bootstrap/swatch/bootstrap-responsive.css +1109 -0
  685. data/public/themes/geo-bootstrap/swatch/bootstrap-responsive.min.css +9 -0
  686. data/public/themes/geo-bootstrap/swatch/bootstrap.css +6462 -0
  687. data/public/themes/geo-bootstrap/swatch/bootstrap.min.css +9 -0
  688. metadata +791 -0
@@ -0,0 +1,1445 @@
1
+ Smalltalk current createPackage: 'Compiler' properties: #{}!
2
+ Object subclass: #ChunkParser
3
+ instanceVariableNames: 'stream'
4
+ package: 'Compiler'!
5
+
6
+ !ChunkParser methodsFor: 'accessing'!
7
+
8
+ stream: aStream
9
+ stream := aStream
10
+ ! !
11
+
12
+ !ChunkParser methodsFor: 'reading'!
13
+
14
+ nextChunk
15
+ "The chunk format (Smalltalk Interchange Format or Fileout format)
16
+ is a trivial format but can be a bit tricky to understand:
17
+ - Uses the exclamation mark as delimiter of chunks.
18
+ - Inside a chunk a normal exclamation mark must be doubled.
19
+ - A non empty chunk must be a valid Smalltalk expression.
20
+ - A chunk on top level with a preceding empty chunk is an instruction chunk:
21
+ - The object created by the expression then takes over reading chunks.
22
+
23
+ This metod returns next chunk as a String (trimmed), empty String (all whitespace) or nil."
24
+
25
+ | char result chunk |
26
+ result := '' writeStream.
27
+ [char := stream next.
28
+ char notNil] whileTrue: [
29
+ char = '!!' ifTrue: [
30
+ stream peek = '!!'
31
+ ifTrue: [stream next "skipping the escape double"]
32
+ ifFalse: [^result contents trimBoth "chunk end marker found"]].
33
+ result nextPut: char].
34
+ ^nil "a chunk needs to end with !!"
35
+ ! !
36
+
37
+ !ChunkParser class methodsFor: 'not yet classified'!
38
+
39
+ on: aStream
40
+ ^self new stream: aStream
41
+ ! !
42
+
43
+ Object subclass: #DoIt
44
+ instanceVariableNames: ''
45
+ package: 'Compiler'!
46
+
47
+ Object subclass: #Exporter
48
+ instanceVariableNames: ''
49
+ package: 'Compiler'!
50
+
51
+ !Exporter methodsFor: 'fileOut'!
52
+
53
+ exportAll
54
+ "Export all packages in the system."
55
+
56
+ ^String streamContents: [:stream |
57
+ Smalltalk current packages do: [:pkg |
58
+ stream nextPutAll: (self exportPackage: pkg name)]]
59
+ !
60
+
61
+ exportClass: aClass
62
+ "Export a single class. Subclasses override these methods."
63
+
64
+ ^String streamContents: [:stream |
65
+ self exportDefinitionOf: aClass on: stream.
66
+ self exportMethodsOf: aClass on: stream.
67
+ self exportMetaDefinitionOf: aClass on: stream.
68
+ self exportMethodsOf: aClass class on: stream]
69
+ !
70
+
71
+ exportPackage: packageName
72
+ "Export a given package by name."
73
+
74
+ | package |
75
+ ^String streamContents: [:stream |
76
+ package := Smalltalk current packageAt: packageName.
77
+ self exportPackageDefinitionOf: package on: stream.
78
+
79
+ "Export classes in dependency order.
80
+ Update (issue #171): Remove duplicates for export"
81
+ package sortedClasses asSet do: [:each |
82
+ stream nextPutAll: (self exportClass: each)].
83
+ self exportPackageExtensionsOf: package on: stream]
84
+ ! !
85
+
86
+ !Exporter methodsFor: 'private'!
87
+
88
+ classNameFor: aClass
89
+ ^aClass isMetaclass
90
+ ifTrue: [aClass instanceClass name, '.klass']
91
+ ifFalse: [
92
+ aClass isNil
93
+ ifTrue: ['nil']
94
+ ifFalse: [aClass name]]
95
+ !
96
+
97
+ exportDefinitionOf: aClass on: aStream
98
+ aStream
99
+ nextPutAll: 'smalltalk.addClass(';
100
+ nextPutAll: '''', (self classNameFor: aClass), ''', ';
101
+ nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass);
102
+ nextPutAll: ', ['.
103
+ aClass instanceVariableNames
104
+ do: [:each | aStream nextPutAll: '''', each, '''']
105
+ separatedBy: [aStream nextPutAll: ', '].
106
+ aStream
107
+ nextPutAll: '], ''';
108
+ nextPutAll: aClass category, '''';
109
+ nextPutAll: ');'.
110
+ aClass comment notEmpty ifTrue: [
111
+ aStream
112
+ lf;
113
+ nextPutAll: 'smalltalk.';
114
+ nextPutAll: (self classNameFor: aClass);
115
+ nextPutAll: '.comment=';
116
+ nextPutAll: 'unescape(''', aClass comment escaped, ''')'].
117
+ aStream lf
118
+ !
119
+
120
+ exportMetaDefinitionOf: aClass on: aStream
121
+ aClass class instanceVariableNames isEmpty ifFalse: [
122
+ aStream
123
+ nextPutAll: 'smalltalk.', (self classNameFor: aClass class);
124
+ nextPutAll: '.iVarNames = ['.
125
+ aClass class instanceVariableNames
126
+ do: [:each | aStream nextPutAll: '''', each, '''']
127
+ separatedBy: [aStream nextPutAll: ','].
128
+ aStream nextPutAll: '];', String lf]
129
+ !
130
+
131
+ exportMethod: aMethod of: aClass on: aStream
132
+ aStream
133
+ nextPutAll: 'smalltalk.addMethod(';lf;
134
+ nextPutAll: 'unescape(''', aMethod selector asSelector escaped, '''),';lf;
135
+ nextPutAll: 'smalltalk.method({';lf;
136
+ nextPutAll: 'selector: unescape(''', aMethod selector escaped, '''),';lf;
137
+ nextPutAll: 'category: ''', aMethod category, ''',';lf;
138
+ nextPutAll: 'fn: ', aMethod fn compiledSource, ',';lf;
139
+ nextPutAll: 'args: ', aMethod arguments asJavascript, ','; lf;
140
+ nextPutAll: 'source: unescape(''', aMethod source escaped, '''),';lf;
141
+ nextPutAll: 'messageSends: ', aMethod messageSends asJavascript, ',';lf;
142
+ nextPutAll: 'referencedClasses: ', aMethod referencedClasses asJavascript.
143
+ aStream
144
+ lf;
145
+ nextPutAll: '}),';lf;
146
+ nextPutAll: 'smalltalk.', (self classNameFor: aClass);
147
+ nextPutAll: ');';lf;lf
148
+ !
149
+
150
+ exportMethodsOf: aClass on: aStream
151
+ "Issue #143: sort methods alphabetically"
152
+
153
+ ((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector]) do: [:each |
154
+ (each category match: '^\*') ifFalse: [
155
+ self exportMethod: each of: aClass on: aStream]].
156
+ aStream lf
157
+ !
158
+
159
+ exportPackageDefinitionOf: package on: aStream
160
+ aStream
161
+ nextPutAll: 'smalltalk.addPackage(';
162
+ nextPutAll: '''', package name, ''', ', package propertiesAsJSON , ');'.
163
+ aStream lf
164
+ !
165
+
166
+ exportPackageExtensionsOf: package on: aStream
167
+ "Issue #143: sort classes and methods alphabetically"
168
+
169
+ | name |
170
+ name := package name.
171
+ (Package sortedClasses: Smalltalk current classes) do: [:each |
172
+ {each. each class} do: [:aClass |
173
+ ((aClass methodDictionary values) sorted: [:a :b | a selector <= b selector]) do: [:method |
174
+ (method category match: '^\*', name) ifTrue: [
175
+ self exportMethod: method of: aClass on: aStream ]]]]
176
+ ! !
177
+
178
+ Exporter subclass: #ChunkExporter
179
+ instanceVariableNames: ''
180
+ package: 'Compiler'!
181
+
182
+ !ChunkExporter methodsFor: 'not yet classified'!
183
+
184
+ chunkEscape: aString
185
+ "Replace all occurrences of !! with !!!! and trim at both ends."
186
+
187
+ ^(aString replace: '!!' with: '!!!!') trimBoth
188
+ !
189
+
190
+ classNameFor: aClass
191
+ ^aClass isMetaclass
192
+ ifTrue: [aClass instanceClass name, ' class']
193
+ ifFalse: [
194
+ aClass isNil
195
+ ifTrue: ['nil']
196
+ ifFalse: [aClass name]]
197
+ !
198
+
199
+ exportDefinitionOf: aClass on: aStream
200
+ "Chunk format."
201
+
202
+ aStream
203
+ nextPutAll: (self classNameFor: aClass superclass);
204
+ nextPutAll: ' subclass: #', (self classNameFor: aClass); lf;
205
+ nextPutAll: ' instanceVariableNames: '''.
206
+ aClass instanceVariableNames
207
+ do: [:each | aStream nextPutAll: each]
208
+ separatedBy: [aStream nextPutAll: ' '].
209
+ aStream
210
+ nextPutAll: ''''; lf;
211
+ nextPutAll: ' package: ''', aClass category, '''!!'; lf.
212
+ aClass comment notEmpty ifTrue: [
213
+ aStream
214
+ nextPutAll: '!!', (self classNameFor: aClass), ' commentStamp!!';lf;
215
+ nextPutAll: (self chunkEscape: aClass comment), '!!';lf].
216
+ aStream lf
217
+ !
218
+
219
+ exportMetaDefinitionOf: aClass on: aStream
220
+
221
+ aClass class instanceVariableNames isEmpty ifFalse: [
222
+ aStream
223
+ nextPutAll: (self classNameFor: aClass class);
224
+ nextPutAll: ' instanceVariableNames: '''.
225
+ aClass class instanceVariableNames
226
+ do: [:each | aStream nextPutAll: each]
227
+ separatedBy: [aStream nextPutAll: ' '].
228
+ aStream
229
+ nextPutAll: '''!!'; lf; lf]
230
+ !
231
+
232
+ exportMethod: aMethod of: aClass on: aStream
233
+ aStream
234
+ lf; lf; nextPutAll: (self chunkEscape: aMethod source); lf;
235
+ nextPutAll: '!!'
236
+ !
237
+
238
+ exportMethods: methods category: category of: aClass on: aStream
239
+ "Issue #143: sort methods alphabetically"
240
+
241
+ aStream
242
+ nextPutAll: '!!', (self classNameFor: aClass);
243
+ nextPutAll: ' methodsFor: ''', category, '''!!'.
244
+ (methods sorted: [:a :b | a selector <= b selector]) do: [:each |
245
+ self exportMethod: each of: aClass on: aStream].
246
+ aStream nextPutAll: ' !!'; lf; lf
247
+ !
248
+
249
+ exportMethodsOf: aClass on: aStream
250
+ "Issue #143: sort protocol alphabetically"
251
+
252
+ | map |
253
+ map := Dictionary new.
254
+ aClass protocolsDo: [:category :methods |
255
+ (category match: '^\*') ifFalse: [ map at: category put: methods ]].
256
+ (map keys sorted: [:a :b | a <= b ]) do: [:category | | methods |
257
+ methods := map at: category.
258
+ self
259
+ exportMethods: methods
260
+ category: category
261
+ of: aClass
262
+ on: aStream ]
263
+ !
264
+
265
+ exportPackageDefinitionOf: package on: aStream
266
+ "Chunk format."
267
+
268
+ aStream
269
+ nextPutAll: 'Smalltalk current createPackage: ''', package name,
270
+ ''' properties: ', package properties storeString, '!!'; lf.
271
+ !
272
+
273
+ exportPackageExtensionsOf: package on: aStream
274
+ "We need to override this one too since we need to group
275
+ all methods in a given protocol under a leading methodsFor: chunk
276
+ for that class."
277
+
278
+ "Issue #143: sort protocol alphabetically"
279
+
280
+ | name map |
281
+ name := package name.
282
+ (Package sortedClasses: Smalltalk current classes) do: [:each |
283
+ {each. each class} do: [:aClass |
284
+ map := Dictionary new.
285
+ aClass protocolsDo: [:category :methods |
286
+ (category match: '^\*', name) ifTrue: [ map at: category put: methods ]].
287
+ (map keys sorted: [:a :b | a <= b ]) do: [:category | | methods |
288
+ methods := map at: category.
289
+ self exportMethods: methods category: category of: aClass on: aStream ]]]
290
+ ! !
291
+
292
+ Exporter subclass: #StrippedExporter
293
+ instanceVariableNames: ''
294
+ package: 'Compiler'!
295
+
296
+ !StrippedExporter methodsFor: 'private'!
297
+
298
+ exportDefinitionOf: aClass on: aStream
299
+ aStream
300
+ nextPutAll: 'smalltalk.addClass(';
301
+ nextPutAll: '''', (self classNameFor: aClass), ''', ';
302
+ nextPutAll: 'smalltalk.', (self classNameFor: aClass superclass);
303
+ nextPutAll: ', ['.
304
+ aClass instanceVariableNames
305
+ do: [:each | aStream nextPutAll: '''', each, '''']
306
+ separatedBy: [aStream nextPutAll: ', '].
307
+ aStream
308
+ nextPutAll: '], ''';
309
+ nextPutAll: aClass category, '''';
310
+ nextPutAll: ');'.
311
+ aStream lf
312
+ !
313
+
314
+ exportMethod: aMethod of: aClass on: aStream
315
+ aStream
316
+ nextPutAll: 'smalltalk.addMethod(';lf;
317
+ nextPutAll: 'unescape(''', aMethod selector asSelector escaped, '''),';lf;
318
+ nextPutAll: 'smalltalk.method({';lf;
319
+ nextPutAll: 'selector: unescape(''', aMethod selector escaped, '''),';lf;
320
+ nextPutAll: 'fn: ', aMethod fn compiledSource;lf;
321
+ nextPutAll: '}),';lf;
322
+ nextPutAll: 'smalltalk.', (self classNameFor: aClass);
323
+ nextPutAll: ');';lf;lf
324
+ ! !
325
+
326
+ Object subclass: #Importer
327
+ instanceVariableNames: ''
328
+ package: 'Compiler'!
329
+
330
+ !Importer methodsFor: 'fileIn'!
331
+
332
+ import: aStream
333
+ | chunk result parser lastEmpty |
334
+ parser := ChunkParser on: aStream.
335
+ lastEmpty := false.
336
+ [chunk := parser nextChunk.
337
+ chunk isNil] whileFalse: [
338
+ chunk isEmpty
339
+ ifTrue: [lastEmpty := true]
340
+ ifFalse: [
341
+ result := Compiler new loadExpression: chunk.
342
+ lastEmpty
343
+ ifTrue: [
344
+ lastEmpty := false.
345
+ result scanFrom: parser]]]
346
+ ! !
347
+
348
+ Object subclass: #Node
349
+ instanceVariableNames: 'nodes'
350
+ package: 'Compiler'!
351
+
352
+ !Node methodsFor: 'accessing'!
353
+
354
+ addNode: aNode
355
+ self nodes add: aNode
356
+ !
357
+
358
+ nodes
359
+ ^nodes ifNil: [nodes := Array new]
360
+ ! !
361
+
362
+ !Node methodsFor: 'building'!
363
+
364
+ nodes: aCollection
365
+ nodes := aCollection
366
+ ! !
367
+
368
+ !Node methodsFor: 'testing'!
369
+
370
+ isBlockNode
371
+ ^false
372
+ !
373
+
374
+ isBlockSequenceNode
375
+ ^false
376
+ !
377
+
378
+ isValueNode
379
+ ^false
380
+ ! !
381
+
382
+ !Node methodsFor: 'visiting'!
383
+
384
+ accept: aVisitor
385
+ aVisitor visitNode: self
386
+ ! !
387
+
388
+ Node subclass: #AssignmentNode
389
+ instanceVariableNames: 'left right'
390
+ package: 'Compiler'!
391
+
392
+ !AssignmentNode methodsFor: 'accessing'!
393
+
394
+ left
395
+ ^left
396
+ !
397
+
398
+ left: aNode
399
+ left := aNode.
400
+ left assigned: true
401
+ !
402
+
403
+ right
404
+ ^right
405
+ !
406
+
407
+ right: aNode
408
+ right := aNode
409
+ ! !
410
+
411
+ !AssignmentNode methodsFor: 'visiting'!
412
+
413
+ accept: aVisitor
414
+ aVisitor visitAssignmentNode: self
415
+ ! !
416
+
417
+ Node subclass: #BlockNode
418
+ instanceVariableNames: 'parameters inlined'
419
+ package: 'Compiler'!
420
+
421
+ !BlockNode methodsFor: 'accessing'!
422
+
423
+ inlined
424
+ ^inlined ifNil: [false]
425
+ !
426
+
427
+ inlined: aBoolean
428
+ inlined := aBoolean
429
+ !
430
+
431
+ parameters
432
+ ^parameters ifNil: [parameters := Array new]
433
+ !
434
+
435
+ parameters: aCollection
436
+ parameters := aCollection
437
+ ! !
438
+
439
+ !BlockNode methodsFor: 'testing'!
440
+
441
+ isBlockNode
442
+ ^true
443
+ ! !
444
+
445
+ !BlockNode methodsFor: 'visiting'!
446
+
447
+ accept: aVisitor
448
+ aVisitor visitBlockNode: self
449
+ ! !
450
+
451
+ Node subclass: #CascadeNode
452
+ instanceVariableNames: 'receiver'
453
+ package: 'Compiler'!
454
+
455
+ !CascadeNode methodsFor: 'accessing'!
456
+
457
+ receiver
458
+ ^receiver
459
+ !
460
+
461
+ receiver: aNode
462
+ receiver := aNode
463
+ ! !
464
+
465
+ !CascadeNode methodsFor: 'visiting'!
466
+
467
+ accept: aVisitor
468
+ aVisitor visitCascadeNode: self
469
+ ! !
470
+
471
+ Node subclass: #DynamicArrayNode
472
+ instanceVariableNames: ''
473
+ package: 'Compiler'!
474
+
475
+ !DynamicArrayNode methodsFor: 'visiting'!
476
+
477
+ accept: aVisitor
478
+ aVisitor visitDynamicArrayNode: self
479
+ ! !
480
+
481
+ Node subclass: #DynamicDictionaryNode
482
+ instanceVariableNames: ''
483
+ package: 'Compiler'!
484
+
485
+ !DynamicDictionaryNode methodsFor: 'visiting'!
486
+
487
+ accept: aVisitor
488
+ aVisitor visitDynamicDictionaryNode: self
489
+ ! !
490
+
491
+ Node subclass: #JSStatementNode
492
+ instanceVariableNames: 'source'
493
+ package: 'Compiler'!
494
+
495
+ !JSStatementNode methodsFor: 'accessing'!
496
+
497
+ source
498
+ ^source ifNil: ['']
499
+ !
500
+
501
+ source: aString
502
+ source := aString
503
+ ! !
504
+
505
+ !JSStatementNode methodsFor: 'visiting'!
506
+
507
+ accept: aVisitor
508
+ aVisitor visitJSStatementNode: self
509
+ ! !
510
+
511
+ Node subclass: #MethodNode
512
+ instanceVariableNames: 'selector arguments source'
513
+ package: 'Compiler'!
514
+
515
+ !MethodNode methodsFor: 'accessing'!
516
+
517
+ arguments
518
+ ^arguments ifNil: [#()]
519
+ !
520
+
521
+ arguments: aCollection
522
+ arguments := aCollection
523
+ !
524
+
525
+ selector
526
+ ^selector
527
+ !
528
+
529
+ selector: aString
530
+ selector := aString
531
+ !
532
+
533
+ source
534
+ ^source
535
+ !
536
+
537
+ source: aString
538
+ source := aString
539
+ ! !
540
+
541
+ !MethodNode methodsFor: 'visiting'!
542
+
543
+ accept: aVisitor
544
+ aVisitor visitMethodNode: self
545
+ ! !
546
+
547
+ Node subclass: #ReturnNode
548
+ instanceVariableNames: ''
549
+ package: 'Compiler'!
550
+
551
+ !ReturnNode methodsFor: 'visiting'!
552
+
553
+ accept: aVisitor
554
+ aVisitor visitReturnNode: self
555
+ ! !
556
+
557
+ Node subclass: #SendNode
558
+ instanceVariableNames: 'selector arguments receiver'
559
+ package: 'Compiler'!
560
+
561
+ !SendNode methodsFor: 'accessing'!
562
+
563
+ arguments
564
+ ^arguments ifNil: [arguments := #()]
565
+ !
566
+
567
+ arguments: aCollection
568
+ arguments := aCollection
569
+ !
570
+
571
+ cascadeNodeWithMessages: aCollection
572
+ | first |
573
+ first := SendNode new
574
+ selector: self selector;
575
+ arguments: self arguments;
576
+ yourself.
577
+ ^CascadeNode new
578
+ receiver: self receiver;
579
+ nodes: (Array with: first), aCollection;
580
+ yourself
581
+ !
582
+
583
+ receiver
584
+ ^receiver
585
+ !
586
+
587
+ receiver: aNode
588
+ receiver := aNode
589
+ !
590
+
591
+ selector
592
+ ^selector
593
+ !
594
+
595
+ selector: aString
596
+ selector := aString
597
+ !
598
+
599
+ valueForReceiver: anObject
600
+ ^SendNode new
601
+ receiver: (self receiver
602
+ ifNil: [anObject]
603
+ ifNotNil: [self receiver valueForReceiver: anObject]);
604
+ selector: self selector;
605
+ arguments: self arguments;
606
+ yourself
607
+ ! !
608
+
609
+ !SendNode methodsFor: 'visiting'!
610
+
611
+ accept: aVisitor
612
+ aVisitor visitSendNode: self
613
+ ! !
614
+
615
+ Node subclass: #SequenceNode
616
+ instanceVariableNames: 'temps'
617
+ package: 'Compiler'!
618
+
619
+ !SequenceNode methodsFor: 'accessing'!
620
+
621
+ temps
622
+ ^temps ifNil: [#()]
623
+ !
624
+
625
+ temps: aCollection
626
+ temps := aCollection
627
+ ! !
628
+
629
+ !SequenceNode methodsFor: 'testing'!
630
+
631
+ asBlockSequenceNode
632
+ ^BlockSequenceNode new
633
+ nodes: self nodes;
634
+ temps: self temps;
635
+ yourself
636
+ ! !
637
+
638
+ !SequenceNode methodsFor: 'visiting'!
639
+
640
+ accept: aVisitor
641
+ aVisitor visitSequenceNode: self
642
+ ! !
643
+
644
+ SequenceNode subclass: #BlockSequenceNode
645
+ instanceVariableNames: ''
646
+ package: 'Compiler'!
647
+
648
+ !BlockSequenceNode methodsFor: 'testing'!
649
+
650
+ isBlockSequenceNode
651
+ ^true
652
+ ! !
653
+
654
+ !BlockSequenceNode methodsFor: 'visiting'!
655
+
656
+ accept: aVisitor
657
+ aVisitor visitBlockSequenceNode: self
658
+ ! !
659
+
660
+ Node subclass: #ValueNode
661
+ instanceVariableNames: 'value'
662
+ package: 'Compiler'!
663
+
664
+ !ValueNode methodsFor: 'accessing'!
665
+
666
+ value
667
+ ^value
668
+ !
669
+
670
+ value: anObject
671
+ value := anObject
672
+ ! !
673
+
674
+ !ValueNode methodsFor: 'testing'!
675
+
676
+ isValueNode
677
+ ^true
678
+ ! !
679
+
680
+ !ValueNode methodsFor: 'visiting'!
681
+
682
+ accept: aVisitor
683
+ aVisitor visitValueNode: self
684
+ ! !
685
+
686
+ ValueNode subclass: #VariableNode
687
+ instanceVariableNames: 'assigned'
688
+ package: 'Compiler'!
689
+
690
+ !VariableNode methodsFor: 'accessing'!
691
+
692
+ assigned
693
+ ^assigned ifNil: [false]
694
+ !
695
+
696
+ assigned: aBoolean
697
+ assigned := aBoolean
698
+ ! !
699
+
700
+ !VariableNode methodsFor: 'visiting'!
701
+
702
+ accept: aVisitor
703
+ aVisitor visitVariableNode: self
704
+ ! !
705
+
706
+ VariableNode subclass: #ClassReferenceNode
707
+ instanceVariableNames: ''
708
+ package: 'Compiler'!
709
+
710
+ !ClassReferenceNode methodsFor: 'visiting'!
711
+
712
+ accept: aVisitor
713
+ aVisitor visitClassReferenceNode: self
714
+ ! !
715
+
716
+ Object subclass: #NodeVisitor
717
+ instanceVariableNames: ''
718
+ package: 'Compiler'!
719
+
720
+ !NodeVisitor methodsFor: 'visiting'!
721
+
722
+ visit: aNode
723
+ aNode accept: self
724
+ !
725
+
726
+ visitAssignmentNode: aNode
727
+ self visitNode: aNode
728
+ !
729
+
730
+ visitBlockNode: aNode
731
+ self visitNode: aNode
732
+ !
733
+
734
+ visitBlockSequenceNode: aNode
735
+ self visitSequenceNode: aNode
736
+ !
737
+
738
+ visitCascadeNode: aNode
739
+ self visitNode: aNode
740
+ !
741
+
742
+ visitClassReferenceNode: aNode
743
+ self
744
+ nextPutAll: 'smalltalk.';
745
+ nextPutAll: aNode value
746
+ !
747
+
748
+ visitDynamicArrayNode: aNode
749
+ self visitNode: aNode
750
+ !
751
+
752
+ visitDynamicDictionaryNode: aNode
753
+ self visitNode: aNode
754
+ !
755
+
756
+ visitJSStatementNode: aNode
757
+ self
758
+ nextPutAll: 'function(){';
759
+ nextPutAll: aNode source;
760
+ nextPutAll: '})()'
761
+ !
762
+
763
+ visitMethodNode: aNode
764
+ self visitNode: aNode
765
+ !
766
+
767
+ visitNode: aNode
768
+ !
769
+
770
+ visitReturnNode: aNode
771
+ self visitNode: aNode
772
+ !
773
+
774
+ visitSendNode: aNode
775
+ self visitNode: aNode
776
+ !
777
+
778
+ visitSequenceNode: aNode
779
+ self visitNode: aNode
780
+ !
781
+
782
+ visitValueNode: aNode
783
+ self visitNode: aNode
784
+ !
785
+
786
+ visitVariableNode: aNode
787
+ ! !
788
+
789
+ NodeVisitor subclass: #Compiler
790
+ instanceVariableNames: 'stream nestedBlocks earlyReturn currentClass currentSelector unknownVariables tempVariables messageSends referencedClasses classReferenced source argVariables'
791
+ package: 'Compiler'!
792
+
793
+ !Compiler methodsFor: 'accessing'!
794
+
795
+ argVariables
796
+ ^argVariables copy
797
+ !
798
+
799
+ classNameFor: aClass
800
+ ^aClass isMetaclass
801
+ ifTrue: [aClass instanceClass name, '.klass']
802
+ ifFalse: [
803
+ aClass isNil
804
+ ifTrue: ['nil']
805
+ ifFalse: [aClass name]]
806
+ !
807
+
808
+ currentClass
809
+ ^currentClass
810
+ !
811
+
812
+ currentClass: aClass
813
+ currentClass := aClass
814
+ !
815
+
816
+ knownVariables
817
+ ^self pseudoVariables
818
+ addAll: self tempVariables;
819
+ addAll: self argVariables;
820
+ yourself
821
+ !
822
+
823
+ parser
824
+ ^SmalltalkParser new
825
+ !
826
+
827
+ pseudoVariables
828
+ ^#('self' 'super' 'true' 'false' 'nil' 'thisContext')
829
+ !
830
+
831
+ safeVariableNameFor: aString
832
+ ^(Smalltalk current reservedWords includes: aString)
833
+ ifTrue: [aString, '_']
834
+ ifFalse: [aString]
835
+ !
836
+
837
+ source
838
+ ^source ifNil: ['']
839
+ !
840
+
841
+ source: aString
842
+ source := aString
843
+ !
844
+
845
+ tempVariables
846
+ ^tempVariables copy
847
+ !
848
+
849
+ unknownVariables
850
+ ^unknownVariables copy
851
+ ! !
852
+
853
+ !Compiler methodsFor: 'compiling'!
854
+
855
+ compile: aString
856
+ ^self compileNode: (self parse: aString)
857
+ !
858
+
859
+ compile: aString forClass: aClass
860
+ self currentClass: aClass.
861
+ self source: aString.
862
+ ^self compile: aString
863
+ !
864
+
865
+ compileExpression: aString
866
+ self currentClass: DoIt.
867
+ self source: 'doIt ^[', aString, '] value'.
868
+ ^self compileNode: (self parse: self source)
869
+ !
870
+
871
+ compileNode: aNode
872
+ stream := '' writeStream.
873
+ self visit: aNode.
874
+ ^stream contents
875
+ !
876
+
877
+ eval: aString
878
+ <return eval(aString)>
879
+ !
880
+
881
+ load: aString forClass: aClass
882
+ | compiled |
883
+ compiled := self eval: (self compile: aString forClass: aClass).
884
+ self setupClass: aClass.
885
+ ^compiled
886
+ !
887
+
888
+ loadExpression: aString
889
+ | result |
890
+ DoIt addCompiledMethod: (self eval: (self compileExpression: aString)).
891
+ result := DoIt new doIt.
892
+ DoIt removeCompiledMethod: (DoIt methodDictionary at: 'doIt').
893
+ ^result
894
+ !
895
+
896
+ parse: aString
897
+ ^Smalltalk current parse: aString
898
+ !
899
+
900
+ parseExpression: aString
901
+ ^self parse: 'doIt ^[', aString, '] value'
902
+ !
903
+
904
+ recompile: aClass
905
+ aClass methodDictionary do: [:each || method |
906
+ method := self load: each source forClass: aClass.
907
+ method category: each category.
908
+ aClass addCompiledMethod: method].
909
+ aClass isMetaclass ifFalse: [self recompile: aClass class]
910
+ !
911
+
912
+ recompileAll
913
+ Smalltalk current classes do: [:each |
914
+ Transcript show: each; cr.
915
+ [self recompile: each] valueWithTimeout: 100]
916
+ !
917
+
918
+ setupClass: aClass
919
+ <smalltalk.init(aClass)>
920
+ ! !
921
+
922
+ !Compiler methodsFor: 'initialization'!
923
+
924
+ initialize
925
+ super initialize.
926
+ stream := '' writeStream.
927
+ unknownVariables := #().
928
+ tempVariables := #().
929
+ argVariables := #().
930
+ messageSends := #().
931
+ classReferenced := #()
932
+ ! !
933
+
934
+ !Compiler methodsFor: 'optimizations'!
935
+
936
+ checkClass: aClassName for: receiver
937
+ stream nextPutAll: '((($receiver = ', receiver, ').klass === smalltalk.', aClassName, ') ? '
938
+ !
939
+
940
+ inline: aSelector receiver: receiver argumentNodes: aCollection
941
+ | inlined |
942
+ inlined := false.
943
+
944
+ "-- Booleans --"
945
+
946
+ (aSelector = 'ifFalse:') ifTrue: [
947
+ aCollection first isBlockNode ifTrue: [
948
+ self checkClass: 'Boolean' for: receiver.
949
+ stream nextPutAll: '(!! $receiver ? '.
950
+ self visit: aCollection first.
951
+ stream nextPutAll: '() : nil)'.
952
+ inlined := true]].
953
+
954
+ (aSelector = 'ifTrue:') ifTrue: [
955
+ aCollection first isBlockNode ifTrue: [
956
+ self checkClass: 'Boolean' for: receiver.
957
+ stream nextPutAll: '($receiver ? '.
958
+ self visit: aCollection first.
959
+ stream nextPutAll: '() : nil)'.
960
+ inlined := true]].
961
+
962
+ (aSelector = 'ifTrue:ifFalse:') ifTrue: [
963
+ (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
964
+ self checkClass: 'Boolean' for: receiver.
965
+ stream nextPutAll: '($receiver ? '.
966
+ self visit: aCollection first.
967
+ stream nextPutAll: '() : '.
968
+ self visit: aCollection second.
969
+ stream nextPutAll: '())'.
970
+ inlined := true]].
971
+
972
+ (aSelector = 'ifFalse:ifTrue:') ifTrue: [
973
+ (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
974
+ self checkClass: 'Boolean' for: receiver.
975
+ stream nextPutAll: '(!! $receiver ? '.
976
+ self visit: aCollection first.
977
+ stream nextPutAll: '() : '.
978
+ self visit: aCollection second.
979
+ stream nextPutAll: '())'.
980
+ inlined := true]].
981
+
982
+ "-- Numbers --"
983
+
984
+ (aSelector = '<') ifTrue: [
985
+ self checkClass: 'Number' for: receiver.
986
+ stream nextPutAll: '$receiver <'.
987
+ self visit: aCollection first.
988
+ inlined := true].
989
+
990
+ (aSelector = '<=') ifTrue: [
991
+ self checkClass: 'Number' for: receiver.
992
+ stream nextPutAll: '$receiver <='.
993
+ self visit: aCollection first.
994
+ inlined := true].
995
+
996
+ (aSelector = '>') ifTrue: [
997
+ self checkClass: 'Number' for: receiver.
998
+ stream nextPutAll: '$receiver >'.
999
+ self visit: aCollection first.
1000
+ inlined := true].
1001
+
1002
+ (aSelector = '>=') ifTrue: [
1003
+ self checkClass: 'Number' for: receiver.
1004
+ stream nextPutAll: '$receiver >='.
1005
+ self visit: aCollection first.
1006
+ inlined := true].
1007
+
1008
+ (aSelector = '+') ifTrue: [
1009
+ self checkClass: 'Number' for: receiver.
1010
+ stream nextPutAll: '$receiver +'.
1011
+ self visit: aCollection first.
1012
+ inlined := true].
1013
+
1014
+ (aSelector = '-') ifTrue: [
1015
+ self checkClass: 'Number' for: receiver.
1016
+ stream nextPutAll: '$receiver -'.
1017
+ self visit: aCollection first.
1018
+ inlined := true].
1019
+
1020
+ (aSelector = '*') ifTrue: [
1021
+ self checkClass: 'Number' for: receiver.
1022
+ stream nextPutAll: '$receiver *'.
1023
+ self visit: aCollection first.
1024
+ inlined := true].
1025
+
1026
+ (aSelector = '/') ifTrue: [
1027
+ self checkClass: 'Number' for: receiver.
1028
+ stream nextPutAll: '$receiver /'.
1029
+ self visit: aCollection first.
1030
+ inlined := true].
1031
+
1032
+ ^inlined
1033
+ !
1034
+
1035
+ inlineLiteral: aSelector receiverNode: anObject argumentNodes: aCollection
1036
+ | inlined |
1037
+ inlined := false.
1038
+
1039
+ "-- BlockClosures --"
1040
+
1041
+ (aSelector = 'whileTrue:') ifTrue: [
1042
+ (anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [
1043
+ stream nextPutAll: '(function(){while('.
1044
+ self visit: anObject.
1045
+ stream nextPutAll: '()) {'.
1046
+ self visit: aCollection first.
1047
+ stream nextPutAll: '()}})()'.
1048
+ inlined := true]].
1049
+
1050
+ (aSelector = 'whileFalse:') ifTrue: [
1051
+ (anObject isBlockNode and: [aCollection first isBlockNode]) ifTrue: [
1052
+ stream nextPutAll: '(function(){while(!!'.
1053
+ self visit: anObject.
1054
+ stream nextPutAll: '()) {'.
1055
+ self visit: aCollection first.
1056
+ stream nextPutAll: '()}})()'.
1057
+ inlined := true]].
1058
+
1059
+ (aSelector = 'whileTrue') ifTrue: [
1060
+ anObject isBlockNode ifTrue: [
1061
+ stream nextPutAll: '(function(){while('.
1062
+ self visit: anObject.
1063
+ stream nextPutAll: '()) {}})()'.
1064
+ inlined := true]].
1065
+
1066
+ (aSelector = 'whileFalse') ifTrue: [
1067
+ anObject isBlockNode ifTrue: [
1068
+ stream nextPutAll: '(function(){while(!!'.
1069
+ self visit: anObject.
1070
+ stream nextPutAll: '()) {}})()'.
1071
+ inlined := true]].
1072
+
1073
+ "-- Numbers --"
1074
+
1075
+ (aSelector = '+') ifTrue: [
1076
+ (self isNode: anObject ofClass: Number) ifTrue: [
1077
+ self visit: anObject.
1078
+ stream nextPutAll: ' + '.
1079
+ self visit: aCollection first.
1080
+ inlined := true]].
1081
+
1082
+ (aSelector = '-') ifTrue: [
1083
+ (self isNode: anObject ofClass: Number) ifTrue: [
1084
+ self visit: anObject.
1085
+ stream nextPutAll: ' - '.
1086
+ self visit: aCollection first.
1087
+ inlined := true]].
1088
+
1089
+ (aSelector = '*') ifTrue: [
1090
+ (self isNode: anObject ofClass: Number) ifTrue: [
1091
+ self visit: anObject.
1092
+ stream nextPutAll: ' * '.
1093
+ self visit: aCollection first.
1094
+ inlined := true]].
1095
+
1096
+ (aSelector = '/') ifTrue: [
1097
+ (self isNode: anObject ofClass: Number) ifTrue: [
1098
+ self visit: anObject.
1099
+ stream nextPutAll: ' / '.
1100
+ self visit: aCollection first.
1101
+ inlined := true]].
1102
+
1103
+ (aSelector = '<') ifTrue: [
1104
+ (self isNode: anObject ofClass: Number) ifTrue: [
1105
+ self visit: anObject.
1106
+ stream nextPutAll: ' < '.
1107
+ self visit: aCollection first.
1108
+ inlined := true]].
1109
+
1110
+ (aSelector = '<=') ifTrue: [
1111
+ (self isNode: anObject ofClass: Number) ifTrue: [
1112
+ self visit: anObject.
1113
+ stream nextPutAll: ' <= '.
1114
+ self visit: aCollection first.
1115
+ inlined := true]].
1116
+
1117
+ (aSelector = '>') ifTrue: [
1118
+ (self isNode: anObject ofClass: Number) ifTrue: [
1119
+ self visit: anObject.
1120
+ stream nextPutAll: ' > '.
1121
+ self visit: aCollection first.
1122
+ inlined := true]].
1123
+
1124
+ (aSelector = '>=') ifTrue: [
1125
+ (self isNode: anObject ofClass: Number) ifTrue: [
1126
+ self visit: anObject.
1127
+ stream nextPutAll: ' >= '.
1128
+ self visit: aCollection first.
1129
+ inlined := true]].
1130
+
1131
+ "-- UndefinedObject --"
1132
+
1133
+ (aSelector = 'ifNil:') ifTrue: [
1134
+ aCollection first isBlockNode ifTrue: [
1135
+ stream nextPutAll: '(($receiver = '.
1136
+ self visit: anObject.
1137
+ stream nextPutAll: ') == nil || $receiver == undefined) ? '.
1138
+ self visit: aCollection first.
1139
+ stream nextPutAll: '() : $receiver'.
1140
+ inlined := true]].
1141
+
1142
+ (aSelector = 'ifNotNil:') ifTrue: [
1143
+ aCollection first isBlockNode ifTrue: [
1144
+ stream nextPutAll: '(($receiver = '.
1145
+ self visit: anObject.
1146
+ stream nextPutAll: ') !!= nil && $receiver !!= undefined) ? '.
1147
+ self visit: aCollection first.
1148
+ stream nextPutAll: '() : nil'.
1149
+ inlined := true]].
1150
+
1151
+ (aSelector = 'ifNil:ifNotNil:') ifTrue: [
1152
+ (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
1153
+ stream nextPutAll: '(($receiver = '.
1154
+ self visit: anObject.
1155
+ stream nextPutAll: ') == nil || $receiver == undefined) ? '.
1156
+ self visit: aCollection first.
1157
+ stream nextPutAll: '() : '.
1158
+ self visit: aCollection second.
1159
+ stream nextPutAll: '()'.
1160
+ inlined := true]].
1161
+
1162
+ (aSelector = 'ifNotNil:ifNil:') ifTrue: [
1163
+ (aCollection first isBlockNode and: [aCollection second isBlockNode]) ifTrue: [
1164
+ stream nextPutAll: '(($receiver = '.
1165
+ self visit: anObject.
1166
+ stream nextPutAll: ') == nil || $receiver == undefined) ? '.
1167
+ self visit: aCollection second.
1168
+ stream nextPutAll: '() : '.
1169
+ self visit: aCollection first.
1170
+ stream nextPutAll: '()'.
1171
+ inlined := true]].
1172
+
1173
+ ^inlined
1174
+ !
1175
+
1176
+ isNode: aNode ofClass: aClass
1177
+ ^aNode isValueNode and: [
1178
+ aNode value class = aClass or: [
1179
+ aNode value = 'self' and: [self currentClass = aClass]]]
1180
+ ! !
1181
+
1182
+ !Compiler methodsFor: 'testing'!
1183
+
1184
+ performOptimizations
1185
+ ^self class performOptimizations
1186
+ ! !
1187
+
1188
+ !Compiler methodsFor: 'visiting'!
1189
+
1190
+ send: aSelector to: aReceiver arguments: aCollection superSend: aBoolean
1191
+ ^String streamContents: [:str || tmp |
1192
+ tmp := stream.
1193
+ str nextPutAll: 'smalltalk.send('.
1194
+ str nextPutAll: aReceiver.
1195
+ str nextPutAll: ', "', aSelector asSelector, '", ['.
1196
+ stream := str.
1197
+ aCollection
1198
+ do: [:each | self visit: each]
1199
+ separatedBy: [stream nextPutAll: ', '].
1200
+ stream := tmp.
1201
+ str nextPutAll: ']'.
1202
+ aBoolean ifTrue: [
1203
+ str nextPutAll: ', smalltalk.', (self classNameFor: self currentClass superclass)].
1204
+ str nextPutAll: ')']
1205
+ !
1206
+
1207
+ visit: aNode
1208
+ aNode accept: self
1209
+ !
1210
+
1211
+ visitAssignmentNode: aNode
1212
+ stream nextPutAll: '('.
1213
+ self visit: aNode left.
1214
+ stream nextPutAll: '='.
1215
+ self visit: aNode right.
1216
+ stream nextPutAll: ')'
1217
+ !
1218
+
1219
+ visitBlockNode: aNode
1220
+ stream nextPutAll: '(function('.
1221
+ aNode parameters
1222
+ do: [:each |
1223
+ tempVariables add: each.
1224
+ stream nextPutAll: each]
1225
+ separatedBy: [stream nextPutAll: ', '].
1226
+ stream nextPutAll: '){'.
1227
+ aNode nodes do: [:each | self visit: each].
1228
+ stream nextPutAll: '})'
1229
+ !
1230
+
1231
+ visitBlockSequenceNode: aNode
1232
+ | index |
1233
+ nestedBlocks := nestedBlocks + 1.
1234
+ aNode nodes isEmpty
1235
+ ifTrue: [
1236
+ stream nextPutAll: 'return nil;']
1237
+ ifFalse: [
1238
+ aNode temps do: [:each | | temp |
1239
+ temp := self safeVariableNameFor: each.
1240
+ tempVariables add: temp.
1241
+ stream nextPutAll: 'var ', temp, '=nil;'; lf].
1242
+ index := 0.
1243
+ aNode nodes do: [:each |
1244
+ index := index + 1.
1245
+ index = aNode nodes size ifTrue: [
1246
+ stream nextPutAll: 'return '].
1247
+ self visit: each.
1248
+ stream nextPutAll: ';']].
1249
+ nestedBlocks := nestedBlocks - 1
1250
+ !
1251
+
1252
+ visitCascadeNode: aNode
1253
+ | index |
1254
+ index := 0.
1255
+ (tempVariables includes: '$rec') ifFalse: [
1256
+ tempVariables add: '$rec'].
1257
+ stream nextPutAll: '(function($rec){'.
1258
+ aNode nodes do: [:each |
1259
+ index := index + 1.
1260
+ index = aNode nodes size ifTrue: [
1261
+ stream nextPutAll: 'return '].
1262
+ each receiver: (VariableNode new value: '$rec').
1263
+ self visit: each.
1264
+ stream nextPutAll: ';'].
1265
+ stream nextPutAll: '})('.
1266
+ self visit: aNode receiver.
1267
+ stream nextPutAll: ')'
1268
+ !
1269
+
1270
+ visitClassReferenceNode: aNode
1271
+ (referencedClasses includes: aNode value) ifFalse: [
1272
+ referencedClasses add: aNode value].
1273
+ stream nextPutAll: '(smalltalk.', aNode value, ' || ', aNode value, ')'
1274
+ !
1275
+
1276
+ visitDynamicArrayNode: aNode
1277
+ stream nextPutAll: '['.
1278
+ aNode nodes
1279
+ do: [:each | self visit: each]
1280
+ separatedBy: [stream nextPutAll: ','].
1281
+ stream nextPutAll: ']'
1282
+ !
1283
+
1284
+ visitDynamicDictionaryNode: aNode
1285
+ stream nextPutAll: 'smalltalk.HashedCollection._fromPairs_(['.
1286
+ aNode nodes
1287
+ do: [:each | self visit: each]
1288
+ separatedBy: [stream nextPutAll: ','].
1289
+ stream nextPutAll: '])'
1290
+ !
1291
+
1292
+ visitFailure: aFailure
1293
+ self error: aFailure asString
1294
+ !
1295
+
1296
+ visitJSStatementNode: aNode
1297
+ stream nextPutAll: (aNode source replace: '>>' with: '>')
1298
+ !
1299
+
1300
+ visitMethodNode: aNode
1301
+ | str currentSelector |
1302
+ currentSelector := aNode selector asSelector.
1303
+ nestedBlocks := 0.
1304
+ earlyReturn := false.
1305
+ messageSends := #().
1306
+ referencedClasses := #().
1307
+ unknownVariables := #().
1308
+ tempVariables := #().
1309
+ argVariables := #().
1310
+ stream
1311
+ nextPutAll: 'smalltalk.method({'; lf;
1312
+ nextPutAll: 'selector: "', aNode selector, '",'; lf.
1313
+ stream nextPutAll: 'source: unescape("', self source escaped, '"),';lf.
1314
+ stream nextPutAll: 'fn: function('.
1315
+ aNode arguments
1316
+ do: [:each |
1317
+ argVariables add: each.
1318
+ stream nextPutAll: each]
1319
+ separatedBy: [stream nextPutAll: ', '].
1320
+ stream
1321
+ nextPutAll: '){'; lf;
1322
+ nextPutAll: 'var self=this;'; lf.
1323
+ str := stream.
1324
+ stream := '' writeStream.
1325
+ aNode nodes do: [:each |
1326
+ self visit: each].
1327
+ earlyReturn ifTrue: [
1328
+ str nextPutAll: 'try{'].
1329
+ str nextPutAll: stream contents.
1330
+ stream := str.
1331
+ stream
1332
+ lf;
1333
+ nextPutAll: 'return self;'.
1334
+ earlyReturn ifTrue: [
1335
+ stream lf; nextPutAll: '} catch(e) {if(e.name === ''stReturn'' && e.selector === ', currentSelector printString, '){return e.fn()} throw(e)}'].
1336
+ stream nextPutAll: '}'.
1337
+ stream
1338
+ nextPutAll: ',', String lf, 'messageSends: ';
1339
+ nextPutAll: messageSends asJavascript, ','; lf;
1340
+ nextPutAll: 'args: ', argVariables asJavascript, ','; lf;
1341
+ nextPutAll: 'referencedClasses: ['.
1342
+ referencedClasses
1343
+ do: [:each | stream nextPutAll: each printString]
1344
+ separatedBy: [stream nextPutAll: ','].
1345
+ stream nextPutAll: ']'.
1346
+ stream nextPutAll: '})'
1347
+ !
1348
+
1349
+ visitReturnNode: aNode
1350
+ nestedBlocks > 0 ifTrue: [
1351
+ earlyReturn := true].
1352
+ earlyReturn
1353
+ ifTrue: [
1354
+ stream
1355
+ nextPutAll: '(function(){throw(';
1356
+ nextPutAll: '{name: ''stReturn'', selector: ';
1357
+ nextPutAll: currentSelector printString;
1358
+ nextPutAll: ', fn: function(){return ']
1359
+ ifFalse: [stream nextPutAll: 'return '].
1360
+ aNode nodes do: [:each |
1361
+ self visit: each].
1362
+ earlyReturn ifTrue: [
1363
+ stream nextPutAll: '}})})()']
1364
+ !
1365
+
1366
+ visitSendNode: aNode
1367
+ | str receiver superSend inlined |
1368
+ str := stream.
1369
+ (messageSends includes: aNode selector) ifFalse: [
1370
+ messageSends add: aNode selector].
1371
+ stream := '' writeStream.
1372
+ self visit: aNode receiver.
1373
+ superSend := stream contents = 'super'.
1374
+ receiver := superSend ifTrue: ['self'] ifFalse: [stream contents].
1375
+ stream := str.
1376
+
1377
+ self performOptimizations
1378
+ ifTrue: [
1379
+ (self inlineLiteral: aNode selector receiverNode: aNode receiver argumentNodes: aNode arguments) ifFalse: [
1380
+ (self inline: aNode selector receiver: receiver argumentNodes: aNode arguments)
1381
+ ifTrue: [stream nextPutAll: ' : ', (self send: aNode selector to: '$receiver' arguments: aNode arguments superSend: superSend), ')']
1382
+ ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]]]
1383
+ ifFalse: [stream nextPutAll: (self send: aNode selector to: receiver arguments: aNode arguments superSend: superSend)]
1384
+ !
1385
+
1386
+ visitSequenceNode: aNode
1387
+ aNode temps do: [:each || temp |
1388
+ temp := self safeVariableNameFor: each.
1389
+ tempVariables add: temp.
1390
+ stream nextPutAll: 'var ', temp, '=nil;'; lf].
1391
+ aNode nodes do: [:each |
1392
+ self visit: each.
1393
+ stream nextPutAll: ';']
1394
+ separatedBy: [stream lf]
1395
+ !
1396
+
1397
+ visitValueNode: aNode
1398
+ stream nextPutAll: aNode value asJavascript
1399
+ !
1400
+
1401
+ visitVariableNode: aNode
1402
+ | varName |
1403
+ (self currentClass allInstanceVariableNames includes: aNode value)
1404
+ ifTrue: [stream nextPutAll: 'self[''@', aNode value, ''']']
1405
+ ifFalse: [
1406
+ varName := self safeVariableNameFor: aNode value.
1407
+ (self knownVariables includes: varName)
1408
+ ifFalse: [
1409
+ unknownVariables add: aNode value.
1410
+ aNode assigned
1411
+ ifTrue: [stream nextPutAll: varName]
1412
+ ifFalse: [stream nextPutAll: '(typeof ', varName, ' == ''undefined'' ? nil : ', varName, ')']]
1413
+ ifTrue: [
1414
+ aNode value = 'thisContext'
1415
+ ifTrue: [stream nextPutAll: '(smalltalk.getThisContext())']
1416
+ ifFalse: [stream nextPutAll: varName]]]
1417
+ ! !
1418
+
1419
+ Compiler class instanceVariableNames: 'performOptimizations'!
1420
+
1421
+ !Compiler class methodsFor: 'accessing'!
1422
+
1423
+ performOptimizations
1424
+ ^performOptimizations ifNil: [true]
1425
+ !
1426
+
1427
+ performOptimizations: aBoolean
1428
+ performOptimizations := aBoolean
1429
+ ! !
1430
+
1431
+ !Compiler class methodsFor: 'compiling'!
1432
+
1433
+ recompile: aClass
1434
+ aClass methodDictionary do: [:each || method |
1435
+ method := self new load: each source forClass: aClass.
1436
+ method category: each category.
1437
+ aClass addCompiledMethod: method].
1438
+ aClass isMetaclass ifFalse: [self recompile: aClass class]
1439
+ !
1440
+
1441
+ recompileAll
1442
+ Smalltalk current classes do: [:each |
1443
+ self recompile: each]
1444
+ ! !
1445
+