maglev-database-explorer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (688) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README.rdoc +3 -0
  3. data/Rakefile +40 -0
  4. data/app/assets/javascripts/maglev-database-explorer/application.js +17 -0
  5. data/app/assets/javascripts/maglev_database_explorer/def.js +2 -0
  6. data/app/assets/stylesheets/maglev-database-explorer/application.css +13 -0
  7. data/app/assets/stylesheets/maglev_database_explorer/def.css +4 -0
  8. data/app/controllers/maglev_database_explorer/application_controller.rb +4 -0
  9. data/app/controllers/maglev_database_explorer/code_controller.rb +101 -0
  10. data/app/controllers/maglev_database_explorer/object_controller.rb +60 -0
  11. data/app/controllers/maglev_database_explorer/object_explorer_controller.rb +9 -0
  12. data/app/helpers/maglev_database_explorer/application_helper.rb +4 -0
  13. data/app/views/layouts/maglev-database-explorer/application.html.erb +14 -0
  14. data/app/views/maglev_database_explorer/object_explorer/_workspace.html.erb +28 -0
  15. data/app/views/maglev_database_explorer/object_explorer/index.html.erb +92 -0
  16. data/config/routes.rb +15 -0
  17. data/lib/maglev-database-explorer.rb +17 -0
  18. data/lib/maglev-database-explorer/code_evaluation.rb +36 -0
  19. data/lib/maglev-database-explorer/database_views.rb +29 -0
  20. data/lib/maglev-database-explorer/database_views/abstract_dictionary.rb +69 -0
  21. data/lib/maglev-database-explorer/database_views/abstract_exception.rb +25 -0
  22. data/lib/maglev-database-explorer/database_views/array.rb +28 -0
  23. data/lib/maglev-database-explorer/database_views/boolean.rb +12 -0
  24. data/lib/maglev-database-explorer/database_views/class.rb +46 -0
  25. data/lib/maglev-database-explorer/database_views/exception.rb +3 -0
  26. data/lib/maglev-database-explorer/database_views/execblock.rb +5 -0
  27. data/lib/maglev-database-explorer/database_views/fixnum.rb +5 -0
  28. data/lib/maglev-database-explorer/database_views/float.rb +6 -0
  29. data/lib/maglev-database-explorer/database_views/globals.rb +2 -0
  30. data/lib/maglev-database-explorer/database_views/gsnmethod.rb +29 -0
  31. data/lib/maglev-database-explorer/database_views/hash.rb +5 -0
  32. data/lib/maglev-database-explorer/database_views/maglev_record.rb +43 -0
  33. data/lib/maglev-database-explorer/database_views/module.rb +104 -0
  34. data/lib/maglev-database-explorer/database_views/nilclass.rb +6 -0
  35. data/lib/maglev-database-explorer/database_views/object.rb +77 -0
  36. data/lib/maglev-database-explorer/database_views/proc.rb +4 -0
  37. data/lib/maglev-database-explorer/database_views/repository.rb +4 -0
  38. data/lib/maglev-database-explorer/database_views/ruby_workspace.rb +6 -0
  39. data/lib/maglev-database-explorer/database_views/smalltalk_classes.rb +35 -0
  40. data/lib/maglev-database-explorer/database_views/smalltalk_classes.st +60 -0
  41. data/lib/maglev-database-explorer/database_views/string.rb +27 -0
  42. data/lib/maglev-database-explorer/database_views/symbol.rb +33 -0
  43. data/lib/maglev-database-explorer/database_views/system.rb +48 -0
  44. data/lib/maglev-database-explorer/database_views/thread.rb +101 -0
  45. data/lib/maglev-database-explorer/debug_server.rb +22 -0
  46. data/lib/maglev-database-explorer/engine.rb +23 -0
  47. data/lib/maglev-database-explorer/engine_symlinks.rb +19 -0
  48. data/lib/maglev-database-explorer/halt.rb +33 -0
  49. data/lib/maglev-database-explorer/ruby_workspace.rb +31 -0
  50. data/lib/maglev-database-explorer/version.rb +3 -0
  51. data/lib/tasks/maglev-database-explorer_tasks.rake +4 -0
  52. data/public/LICENSE +35 -0
  53. data/public/amber/CHANGELOG +65 -0
  54. data/public/amber/LICENSE +22 -0
  55. data/public/amber/Makefile +53 -0
  56. data/public/amber/README.md +30 -0
  57. data/public/amber/bin/amber +3 -0
  58. data/public/amber/bin/amberc +352 -0
  59. data/public/amber/bin/nodecompile.js +33 -0
  60. data/public/amber/bin/server +3 -0
  61. data/public/amber/bin/server.bat +3 -0
  62. data/public/amber/css/amber-normalize.css +468 -0
  63. data/public/amber/css/amber-normalize.less +501 -0
  64. data/public/amber/css/amber.css +539 -0
  65. data/public/amber/css/documentation.css +84 -0
  66. data/public/amber/css/profstef.css +75 -0
  67. data/public/amber/css/style.css +313 -0
  68. data/public/amber/documentation.html +37 -0
  69. data/public/amber/examples/Makefile +23 -0
  70. data/public/amber/examples/README +4 -0
  71. data/public/amber/examples/android/helloamber/AndroidManifest.xml +19 -0
  72. data/public/amber/examples/android/helloamber/HelloAmber.st +13 -0
  73. data/public/amber/examples/android/helloamber/Makefile +56 -0
  74. data/public/amber/examples/android/helloamber/README.md +80 -0
  75. data/public/amber/examples/android/helloamber/ant.properties +17 -0
  76. data/public/amber/examples/android/helloamber/assets/index.html +15 -0
  77. data/public/amber/examples/android/helloamber/assets/jquery-1.7.2.min.js +4 -0
  78. data/public/amber/examples/android/helloamber/build.xml +83 -0
  79. data/public/amber/examples/android/helloamber/local.properties +10 -0
  80. data/public/amber/examples/android/helloamber/proguard-project.txt +20 -0
  81. data/public/amber/examples/android/helloamber/project.properties +14 -0
  82. data/public/amber/examples/android/helloamber/res/layout/main.xml +6 -0
  83. data/public/amber/examples/android/helloamber/res/values/strings.xml +4 -0
  84. data/public/amber/examples/android/helloamber/src/org/amberlang/android/helloamber/HelloAmber.java +59 -0
  85. data/public/amber/examples/myproject/index.html +16 -0
  86. data/public/amber/examples/nodejs/README +9 -0
  87. data/public/amber/examples/nodejs/benchfib/Benchfib.st +124 -0
  88. data/public/amber/examples/nodejs/benchfib/Makefile +8 -0
  89. data/public/amber/examples/nodejs/benchfib/benchfib +1 -0
  90. data/public/amber/examples/nodejs/hello/Hello.st +9 -0
  91. data/public/amber/examples/nodejs/hello/Makefile +8 -0
  92. data/public/amber/examples/nodejs/hello/README +13 -0
  93. data/public/amber/examples/nodejs/hello/hello +1 -0
  94. data/public/amber/examples/nodejs/meta/Makefile +8 -0
  95. data/public/amber/examples/nodejs/meta/MyScript.st +27 -0
  96. data/public/amber/examples/nodejs/meta/meta +1 -0
  97. data/public/amber/examples/nodejs/pystone/Makefile +8 -0
  98. data/public/amber/examples/nodejs/pystone/Pystone.st +306 -0
  99. data/public/amber/examples/nodejs/pystone/pystone +1 -0
  100. data/public/amber/examples/nodejs/trivialserver/Makefile +8 -0
  101. data/public/amber/examples/nodejs/trivialserver/TrivialServer.st +51 -0
  102. data/public/amber/examples/nodejs/trivialserver/trivial +1 -0
  103. data/public/amber/examples/presentation/esug2011/images/asterix.png +0 -0
  104. data/public/amber/examples/presentation/esug2011/images/background_box.png +0 -0
  105. data/public/amber/examples/presentation/esug2011/images/background_header.png +0 -0
  106. data/public/amber/examples/presentation/esug2011/images/balloon.jpg +0 -0
  107. data/public/amber/examples/presentation/esug2011/images/balloon_header.png +0 -0
  108. data/public/amber/examples/presentation/esug2011/images/devices.jpg +0 -0
  109. data/public/amber/examples/presentation/esug2011/images/enyo.png +0 -0
  110. data/public/amber/examples/presentation/esug2011/images/ide_star_wars.png +0 -0
  111. data/public/amber/examples/presentation/esug2011/images/nodejs.png +0 -0
  112. data/public/amber/examples/presentation/esug2011/images/terminal.png +0 -0
  113. data/public/amber/examples/presentation/esug2011/images/webos.png +0 -0
  114. data/public/amber/examples/presentation/fosdem2012/images/amber.png +0 -0
  115. data/public/amber/examples/presentation/fosdem2012/images/ambrhino.jpg +0 -0
  116. data/public/amber/examples/presentation/fosdem2012/images/nodejs.png +0 -0
  117. data/public/amber/examples/presentation/fosdem2012/images/pharo.png +0 -0
  118. data/public/amber/examples/presentation/fosdem2012/images/php.gif +0 -0
  119. data/public/amber/examples/presentation/fosdem2012/images/rails.png +0 -0
  120. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-next.png +0 -0
  121. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/arrow-prev.png +0 -0
  122. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/closedhand.cur +0 -0
  123. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/openhand.cur +0 -0
  124. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-back.png +0 -0
  125. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow-top-forward.png +0 -0
  126. data/public/amber/examples/presentation/fosdem2012/lib/booklet/images/shadow.png +0 -0
  127. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.css +100 -0
  128. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.js +1232 -0
  129. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.booklet.1.2.0.min.js +13 -0
  130. data/public/amber/examples/presentation/fosdem2012/lib/booklet/jquery.easing.1.3.js +38 -0
  131. data/public/amber/examples/presentation/index.html +17 -0
  132. data/public/amber/examples/presentation/js/Presentation.deploy.js +1922 -0
  133. data/public/amber/examples/presentation/js/Presentation.js +2712 -0
  134. data/public/amber/examples/presentation/st/Presentation.st +1996 -0
  135. data/public/amber/examples/trysmalltalk/index.html +18 -0
  136. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.deploy.js +837 -0
  137. data/public/amber/examples/trysmalltalk/js/TrySmalltalk.js +1206 -0
  138. data/public/amber/examples/trysmalltalk/st/TrySmalltalk.st +964 -0
  139. data/public/amber/examples/twitterwall/css/twitterwall.css +19 -0
  140. data/public/amber/examples/twitterwall/index.html +35 -0
  141. data/public/amber/examples/twitterwall/js/TwitterWall.deploy.js +116 -0
  142. data/public/amber/examples/twitterwall/js/TwitterWall.js +146 -0
  143. data/public/amber/examples/twitterwall/st/TwitterWall.st +91 -0
  144. data/public/amber/examples/webos/README +11 -0
  145. data/public/amber/examples/webos/eris/DuckQwaq.wav +0 -0
  146. data/public/amber/examples/webos/eris/EnyoAmber.st +36 -0
  147. data/public/amber/examples/webos/eris/Eris.css +0 -0
  148. data/public/amber/examples/webos/eris/Eris.st +86 -0
  149. data/public/amber/examples/webos/eris/Makefile +37 -0
  150. data/public/amber/examples/webos/eris/README +3 -0
  151. data/public/amber/examples/webos/eris/appinfo.json +10 -0
  152. data/public/amber/examples/webos/eris/depends.js +4 -0
  153. data/public/amber/examples/webos/eris/index.html +12 -0
  154. data/public/amber/examples/webos/helloamber/EnyoAmber.st +36 -0
  155. data/public/amber/examples/webos/helloamber/HelloAmber.st +86 -0
  156. data/public/amber/examples/webos/helloamber/Makefile +38 -0
  157. data/public/amber/examples/webos/helloamber/README +5 -0
  158. data/public/amber/examples/webos/helloamber/appinfo.json +10 -0
  159. data/public/amber/examples/webos/helloamber/depends.js +3 -0
  160. data/public/amber/examples/webos/helloamber/index.html +12 -0
  161. data/public/amber/favicon.ico +0 -0
  162. data/public/amber/images/amber.png +0 -0
  163. data/public/amber/images/amber.svg +706 -0
  164. data/public/amber/images/amber_small.png +0 -0
  165. data/public/amber/images/off.amber.png +0 -0
  166. data/public/amber/images/off.png +0 -0
  167. data/public/amber/images/offHover.amber.png +0 -0
  168. data/public/amber/images/offHover.png +0 -0
  169. data/public/amber/images/presentation.png +0 -0
  170. data/public/amber/images/profstef.png +0 -0
  171. data/public/amber/images/sprite.amber.png +0 -0
  172. data/public/amber/images/sprite.png +0 -0
  173. data/public/amber/images/tinylogo.amber.png +0 -0
  174. data/public/amber/images/tinylogo.png +0 -0
  175. data/public/amber/images/twitterwall.png +0 -0
  176. data/public/amber/index.html +55 -0
  177. data/public/amber/js/Additional-Examples.deploy.js +15 -0
  178. data/public/amber/js/Additional-Examples.js +21 -0
  179. data/public/amber/js/Benchfib.deploy.js +132 -0
  180. data/public/amber/js/Benchfib.js +167 -0
  181. data/public/amber/js/Canvas.deploy.js +2446 -0
  182. data/public/amber/js/Canvas.js +3547 -0
  183. data/public/amber/js/Compiler-Tests.deploy.js +97 -0
  184. data/public/amber/js/Compiler-Tests.js +137 -0
  185. data/public/amber/js/Compiler.deploy.js +1877 -0
  186. data/public/amber/js/Compiler.js +2622 -0
  187. data/public/amber/js/Documentation.deploy.js +961 -0
  188. data/public/amber/js/Documentation.js +1376 -0
  189. data/public/amber/js/Examples.deploy.js +53 -0
  190. data/public/amber/js/Examples.js +73 -0
  191. data/public/amber/js/IDE.deploy.js +3557 -0
  192. data/public/amber/js/IDE.js +5002 -0
  193. data/public/amber/js/Kernel-Announcements.deploy.js +107 -0
  194. data/public/amber/js/Kernel-Announcements.js +152 -0
  195. data/public/amber/js/Kernel-Classes.deploy.js +774 -0
  196. data/public/amber/js/Kernel-Classes.js +1095 -0
  197. data/public/amber/js/Kernel-Collections.deploy.js +3121 -0
  198. data/public/amber/js/Kernel-Collections.js +4427 -0
  199. data/public/amber/js/Kernel-Exceptions.deploy.js +244 -0
  200. data/public/amber/js/Kernel-Exceptions.js +349 -0
  201. data/public/amber/js/Kernel-Methods.deploy.js +573 -0
  202. data/public/amber/js/Kernel-Methods.js +807 -0
  203. data/public/amber/js/Kernel-Objects.deploy.js +2877 -0
  204. data/public/amber/js/Kernel-Objects.js +4107 -0
  205. data/public/amber/js/Kernel-Tests.deploy.js +1513 -0
  206. data/public/amber/js/Kernel-Tests.js +2053 -0
  207. data/public/amber/js/Kernel-Transcript.deploy.js +142 -0
  208. data/public/amber/js/Kernel-Transcript.js +202 -0
  209. data/public/amber/js/Maglev-Core.deploy.js +2967 -0
  210. data/public/amber/js/Maglev-Core.js +4202 -0
  211. data/public/amber/js/Maglev-Database-Explorer.deploy.js +4426 -0
  212. data/public/amber/js/Maglev-Database-Explorer.js +6162 -0
  213. data/public/amber/js/Maglev-Vendor.deploy.js +350 -0
  214. data/public/amber/js/Maglev-Vendor.js +465 -0
  215. data/public/amber/js/README.md +5 -0
  216. data/public/amber/js/SUnit.deploy.js +351 -0
  217. data/public/amber/js/SUnit.js +501 -0
  218. data/public/amber/js/amber.js +273 -0
  219. data/public/amber/js/boot.js +602 -0
  220. data/public/amber/js/compat.js +22 -0
  221. data/public/amber/js/init.js +9 -0
  222. data/public/amber/js/lib/CodeMirror/LICENSE +19 -0
  223. data/public/amber/js/lib/CodeMirror/active-line.js +39 -0
  224. data/public/amber/js/lib/CodeMirror/amber.css +21 -0
  225. data/public/amber/js/lib/CodeMirror/codemirror.css +67 -0
  226. data/public/amber/js/lib/CodeMirror/codemirror.js +2144 -0
  227. data/public/amber/js/lib/CodeMirror/smalltalk.js +134 -0
  228. data/public/amber/js/lib/jQuery/jquery-1.4.4.min.js +167 -0
  229. data/public/amber/js/lib/jQuery/jquery-1.6.4.min.js +4 -0
  230. data/public/amber/js/lib/jQuery/jquery-ui-1.8.16.custom.min.js +791 -0
  231. data/public/amber/js/lib/jQuery/jquery.textarea.js +267 -0
  232. data/public/amber/js/lib/peg-0.6.2.min.js +2 -0
  233. data/public/amber/js/lib/showdown.js +419 -0
  234. data/public/amber/js/parser.js +4222 -0
  235. data/public/amber/js/parser.pegjs +223 -0
  236. data/public/amber/learn.html +40 -0
  237. data/public/amber/repl/Makefile +8 -0
  238. data/public/amber/repl/REPL.js +124 -0
  239. data/public/amber/repl/REPL.st +56 -0
  240. data/public/amber/repl/amber.js +18085 -0
  241. data/public/amber/server/FileServer.st +576 -0
  242. data/public/amber/server/Makefile +8 -0
  243. data/public/amber/server/server.js +13049 -0
  244. data/public/amber/st/Benchfib.st +124 -0
  245. data/public/amber/st/Canvas.st +968 -0
  246. data/public/amber/st/Compiler-Tests.st +471 -0
  247. data/public/amber/st/Compiler.st +1445 -0
  248. data/public/amber/st/Documentation.st +758 -0
  249. data/public/amber/st/Examples.st +38 -0
  250. data/public/amber/st/IDE.st +2404 -0
  251. data/public/amber/st/Kernel-Announcements.st +61 -0
  252. data/public/amber/st/Kernel-Classes.st +462 -0
  253. data/public/amber/st/Kernel-Collections.st +1611 -0
  254. data/public/amber/st/Kernel-Exceptions.st +124 -0
  255. data/public/amber/st/Kernel-Methods.st +291 -0
  256. data/public/amber/st/Kernel-Objects.st +1587 -0
  257. data/public/amber/st/Kernel-Tests.st +953 -0
  258. data/public/amber/st/Kernel-Transcript.st +70 -0
  259. data/public/amber/st/Maglev-Core.st +1659 -0
  260. data/public/amber/st/Maglev-Database-Explorer.st +3085 -0
  261. data/public/amber/st/Maglev-Vendor.st +213 -0
  262. data/public/amber/st/Makefile +104 -0
  263. data/public/amber/st/README.md +4 -0
  264. data/public/amber/st/SUnit.st +172 -0
  265. data/public/css/bootstrap-combined.no-icons.min.css +731 -0
  266. data/public/css/bootstrap.css +6811 -0
  267. data/public/css/jquery-ui.min.css +5 -0
  268. data/public/css/smalltalk_code.css +42 -0
  269. data/public/css/style.css +209 -0
  270. data/public/images/maglev-logo.gif +0 -0
  271. data/public/images/rails_tiny.png +0 -0
  272. data/public/images/ruby.png +0 -0
  273. data/public/images/ruby_smalltalk_bridge.png +0 -0
  274. data/public/images/smalltalk.png +0 -0
  275. data/public/libs/bootstrap.min.js +7 -0
  276. data/public/libs/codemirror/CONTRIBUTING.md +72 -0
  277. data/public/libs/codemirror/LICENSE +23 -0
  278. data/public/libs/codemirror/README.md +11 -0
  279. data/public/libs/codemirror/addon/dialog/dialog.css +32 -0
  280. data/public/libs/codemirror/addon/dialog/dialog.js +80 -0
  281. data/public/libs/codemirror/addon/display/placeholder.js +54 -0
  282. data/public/libs/codemirror/addon/edit/closebrackets.js +54 -0
  283. data/public/libs/codemirror/addon/edit/closetag.js +86 -0
  284. data/public/libs/codemirror/addon/edit/continuecomment.js +44 -0
  285. data/public/libs/codemirror/addon/edit/continuelist.js +25 -0
  286. data/public/libs/codemirror/addon/edit/matchbrackets.js +82 -0
  287. data/public/libs/codemirror/addon/fold/brace-fold.js +31 -0
  288. data/public/libs/codemirror/addon/fold/foldcode.js +32 -0
  289. data/public/libs/codemirror/addon/fold/indent-fold.js +11 -0
  290. data/public/libs/codemirror/addon/fold/xml-fold.js +64 -0
  291. data/public/libs/codemirror/addon/hint/html-hint.js +582 -0
  292. data/public/libs/codemirror/addon/hint/javascript-hint.js +142 -0
  293. data/public/libs/codemirror/addon/hint/pig-hint.js +117 -0
  294. data/public/libs/codemirror/addon/hint/python-hint.js +93 -0
  295. data/public/libs/codemirror/addon/hint/show-hint.css +38 -0
  296. data/public/libs/codemirror/addon/hint/show-hint.js +180 -0
  297. data/public/libs/codemirror/addon/hint/xml-hint.js +118 -0
  298. data/public/libs/codemirror/addon/lint/javascript-lint.js +127 -0
  299. data/public/libs/codemirror/addon/lint/json-lint.js +14 -0
  300. data/public/libs/codemirror/addon/lint/lint.css +96 -0
  301. data/public/libs/codemirror/addon/lint/lint.js +197 -0
  302. data/public/libs/codemirror/addon/mode/loadmode.js +51 -0
  303. data/public/libs/codemirror/addon/mode/multiplex.js +95 -0
  304. data/public/libs/codemirror/addon/mode/overlay.js +59 -0
  305. data/public/libs/codemirror/addon/runmode/colorize.js +29 -0
  306. data/public/libs/codemirror/addon/runmode/runmode-standalone.js +130 -0
  307. data/public/libs/codemirror/addon/runmode/runmode.js +52 -0
  308. data/public/libs/codemirror/addon/runmode/runmode.node.js +89 -0
  309. data/public/libs/codemirror/addon/search/match-highlighter.js +60 -0
  310. data/public/libs/codemirror/addon/search/search.js +131 -0
  311. data/public/libs/codemirror/addon/search/searchcursor.js +133 -0
  312. data/public/libs/codemirror/addon/selection/active-line.js +39 -0
  313. data/public/libs/codemirror/addon/selection/mark-selection.js +34 -0
  314. data/public/libs/codemirror/bin/compress +91 -0
  315. data/public/libs/codemirror/bin/lint +11 -0
  316. data/public/libs/codemirror/demo/activeline.html +70 -0
  317. data/public/libs/codemirror/demo/bidi.html +61 -0
  318. data/public/libs/codemirror/demo/btree.html +87 -0
  319. data/public/libs/codemirror/demo/buffers.html +98 -0
  320. data/public/libs/codemirror/demo/changemode.html +50 -0
  321. data/public/libs/codemirror/demo/closebrackets.html +63 -0
  322. data/public/libs/codemirror/demo/closetag.html +37 -0
  323. data/public/libs/codemirror/demo/complete.html +70 -0
  324. data/public/libs/codemirror/demo/emacs.html +60 -0
  325. data/public/libs/codemirror/demo/folding.html +69 -0
  326. data/public/libs/codemirror/demo/fullscreen.html +147 -0
  327. data/public/libs/codemirror/demo/html5complete.html +92 -0
  328. data/public/libs/codemirror/demo/indentwrap.html +49 -0
  329. data/public/libs/codemirror/demo/lint.html +90 -0
  330. data/public/libs/codemirror/demo/loadmode.html +40 -0
  331. data/public/libs/codemirror/demo/marker.html +59 -0
  332. data/public/libs/codemirror/demo/markselection.html +36 -0
  333. data/public/libs/codemirror/demo/matchhighlighter.html +38 -0
  334. data/public/libs/codemirror/demo/multiplex.html +60 -0
  335. data/public/libs/codemirror/demo/mustache.html +59 -0
  336. data/public/libs/codemirror/demo/placeholder.html +36 -0
  337. data/public/libs/codemirror/demo/preview.html +76 -0
  338. data/public/libs/codemirror/demo/resize.html +49 -0
  339. data/public/libs/codemirror/demo/runmode.html +50 -0
  340. data/public/libs/codemirror/demo/search.html +85 -0
  341. data/public/libs/codemirror/demo/spanaffectswrapping_shim.html +73 -0
  342. data/public/libs/codemirror/demo/theme.html +89 -0
  343. data/public/libs/codemirror/demo/variableheight.html +52 -0
  344. data/public/libs/codemirror/demo/vim.html +65 -0
  345. data/public/libs/codemirror/demo/visibletabs.html +53 -0
  346. data/public/libs/codemirror/demo/widget.html +74 -0
  347. data/public/libs/codemirror/demo/xmlcomplete.html +81 -0
  348. data/public/libs/codemirror/doc/baboon.png +0 -0
  349. data/public/libs/codemirror/doc/baboon_vector.svg +153 -0
  350. data/public/libs/codemirror/doc/compress.html +200 -0
  351. data/public/libs/codemirror/doc/docs.css +167 -0
  352. data/public/libs/codemirror/doc/internals.html +505 -0
  353. data/public/libs/codemirror/doc/manual.html +1897 -0
  354. data/public/libs/codemirror/doc/modes.html +94 -0
  355. data/public/libs/codemirror/doc/oldrelease.html +492 -0
  356. data/public/libs/codemirror/doc/realworld.html +100 -0
  357. data/public/libs/codemirror/doc/reporting.html +60 -0
  358. data/public/libs/codemirror/doc/upgrade_v2.2.html +98 -0
  359. data/public/libs/codemirror/doc/upgrade_v3.html +227 -0
  360. data/public/libs/codemirror/index.html +487 -0
  361. data/public/libs/codemirror/keymap/emacs.js +30 -0
  362. data/public/libs/codemirror/keymap/vim.js +3044 -0
  363. data/public/libs/codemirror/lib/codemirror.css +253 -0
  364. data/public/libs/codemirror/lib/codemirror.js +5585 -0
  365. data/public/libs/codemirror/mode/apl/apl.js +160 -0
  366. data/public/libs/codemirror/mode/apl/index.html +61 -0
  367. data/public/libs/codemirror/mode/asterisk/asterisk.js +183 -0
  368. data/public/libs/codemirror/mode/asterisk/index.html +142 -0
  369. data/public/libs/codemirror/mode/clike/clike.js +302 -0
  370. data/public/libs/codemirror/mode/clike/index.html +103 -0
  371. data/public/libs/codemirror/mode/clike/scala.html +767 -0
  372. data/public/libs/codemirror/mode/clojure/clojure.js +222 -0
  373. data/public/libs/codemirror/mode/clojure/index.html +76 -0
  374. data/public/libs/codemirror/mode/coffeescript/LICENSE +22 -0
  375. data/public/libs/codemirror/mode/coffeescript/coffeescript.js +346 -0
  376. data/public/libs/codemirror/mode/coffeescript/index.html +728 -0
  377. data/public/libs/codemirror/mode/commonlisp/commonlisp.js +101 -0
  378. data/public/libs/codemirror/mode/commonlisp/index.html +165 -0
  379. data/public/libs/codemirror/mode/css/css.js +567 -0
  380. data/public/libs/codemirror/mode/css/index.html +58 -0
  381. data/public/libs/codemirror/mode/css/scss.html +145 -0
  382. data/public/libs/codemirror/mode/css/scss_test.js +80 -0
  383. data/public/libs/codemirror/mode/css/test.js +113 -0
  384. data/public/libs/codemirror/mode/d/d.js +205 -0
  385. data/public/libs/codemirror/mode/d/index.html +262 -0
  386. data/public/libs/codemirror/mode/diff/diff.js +32 -0
  387. data/public/libs/codemirror/mode/diff/index.html +105 -0
  388. data/public/libs/codemirror/mode/ecl/ecl.js +192 -0
  389. data/public/libs/codemirror/mode/ecl/index.html +39 -0
  390. data/public/libs/codemirror/mode/erlang/erlang.js +463 -0
  391. data/public/libs/codemirror/mode/erlang/index.html +64 -0
  392. data/public/libs/codemirror/mode/gas/gas.js +326 -0
  393. data/public/libs/codemirror/mode/gas/index.html +57 -0
  394. data/public/libs/codemirror/mode/gfm/gfm.js +96 -0
  395. data/public/libs/codemirror/mode/gfm/index.html +74 -0
  396. data/public/libs/codemirror/mode/gfm/test.js +112 -0
  397. data/public/libs/codemirror/mode/go/go.js +165 -0
  398. data/public/libs/codemirror/mode/go/index.html +74 -0
  399. data/public/libs/codemirror/mode/groovy/groovy.js +210 -0
  400. data/public/libs/codemirror/mode/groovy/index.html +73 -0
  401. data/public/libs/codemirror/mode/haskell/haskell.js +242 -0
  402. data/public/libs/codemirror/mode/haskell/index.html +62 -0
  403. data/public/libs/codemirror/mode/haxe/haxe.js +429 -0
  404. data/public/libs/codemirror/mode/haxe/index.html +90 -0
  405. data/public/libs/codemirror/mode/htmlembedded/htmlembedded.js +73 -0
  406. data/public/libs/codemirror/mode/htmlembedded/index.html +49 -0
  407. data/public/libs/codemirror/mode/htmlmixed/htmlmixed.js +104 -0
  408. data/public/libs/codemirror/mode/htmlmixed/index.html +73 -0
  409. data/public/libs/codemirror/mode/http/http.js +98 -0
  410. data/public/libs/codemirror/mode/http/index.html +32 -0
  411. data/public/libs/codemirror/mode/javascript/index.html +92 -0
  412. data/public/libs/codemirror/mode/javascript/javascript.js +467 -0
  413. data/public/libs/codemirror/mode/javascript/typescript.html +48 -0
  414. data/public/libs/codemirror/mode/jinja2/index.html +38 -0
  415. data/public/libs/codemirror/mode/jinja2/jinja2.js +42 -0
  416. data/public/libs/codemirror/mode/less/index.html +741 -0
  417. data/public/libs/codemirror/mode/less/less.js +266 -0
  418. data/public/libs/codemirror/mode/livescript/LICENSE +23 -0
  419. data/public/libs/codemirror/mode/livescript/index.html +446 -0
  420. data/public/libs/codemirror/mode/livescript/livescript.js +267 -0
  421. data/public/libs/codemirror/mode/livescript/livescript.ls +266 -0
  422. data/public/libs/codemirror/mode/lua/index.html +74 -0
  423. data/public/libs/codemirror/mode/lua/lua.js +140 -0
  424. data/public/libs/codemirror/mode/markdown/index.html +344 -0
  425. data/public/libs/codemirror/mode/markdown/markdown.js +526 -0
  426. data/public/libs/codemirror/mode/markdown/test.js +636 -0
  427. data/public/libs/codemirror/mode/meta.js +75 -0
  428. data/public/libs/codemirror/mode/mirc/index.html +149 -0
  429. data/public/libs/codemirror/mode/mirc/mirc.js +177 -0
  430. data/public/libs/codemirror/mode/ntriples/index.html +33 -0
  431. data/public/libs/codemirror/mode/ntriples/ntriples.js +170 -0
  432. data/public/libs/codemirror/mode/ocaml/index.html +131 -0
  433. data/public/libs/codemirror/mode/ocaml/ocaml.js +113 -0
  434. data/public/libs/codemirror/mode/pascal/LICENSE +7 -0
  435. data/public/libs/codemirror/mode/pascal/index.html +48 -0
  436. data/public/libs/codemirror/mode/pascal/pascal.js +94 -0
  437. data/public/libs/codemirror/mode/perl/LICENSE +19 -0
  438. data/public/libs/codemirror/mode/perl/index.html +62 -0
  439. data/public/libs/codemirror/mode/perl/perl.js +816 -0
  440. data/public/libs/codemirror/mode/php/index.html +51 -0
  441. data/public/libs/codemirror/mode/php/php.js +129 -0
  442. data/public/libs/codemirror/mode/pig/index.html +42 -0
  443. data/public/libs/codemirror/mode/pig/pig.js +171 -0
  444. data/public/libs/codemirror/mode/properties/index.html +41 -0
  445. data/public/libs/codemirror/mode/properties/properties.js +63 -0
  446. data/public/libs/codemirror/mode/python/LICENSE.txt +21 -0
  447. data/public/libs/codemirror/mode/python/index.html +135 -0
  448. data/public/libs/codemirror/mode/python/python.js +340 -0
  449. data/public/libs/codemirror/mode/q/index.html +131 -0
  450. data/public/libs/codemirror/mode/q/q.js +124 -0
  451. data/public/libs/codemirror/mode/r/LICENSE +24 -0
  452. data/public/libs/codemirror/mode/r/index.html +74 -0
  453. data/public/libs/codemirror/mode/r/r.js +141 -0
  454. data/public/libs/codemirror/mode/rpm/changes/changes.js +19 -0
  455. data/public/libs/codemirror/mode/rpm/changes/index.html +53 -0
  456. data/public/libs/codemirror/mode/rpm/spec/index.html +99 -0
  457. data/public/libs/codemirror/mode/rpm/spec/spec.css +5 -0
  458. data/public/libs/codemirror/mode/rpm/spec/spec.js +66 -0
  459. data/public/libs/codemirror/mode/rst/LICENSE.txt +21 -0
  460. data/public/libs/codemirror/mode/rst/index.html +524 -0
  461. data/public/libs/codemirror/mode/rst/rst.js +550 -0
  462. data/public/libs/codemirror/mode/ruby/LICENSE +24 -0
  463. data/public/libs/codemirror/mode/ruby/index.html +173 -0
  464. data/public/libs/codemirror/mode/ruby/ruby.js +197 -0
  465. data/public/libs/codemirror/mode/rust/index.html +48 -0
  466. data/public/libs/codemirror/mode/rust/rust.js +432 -0
  467. data/public/libs/codemirror/mode/sass/index.html +54 -0
  468. data/public/libs/codemirror/mode/sass/sass.js +349 -0
  469. data/public/libs/codemirror/mode/scheme/index.html +65 -0
  470. data/public/libs/codemirror/mode/scheme/scheme.js +230 -0
  471. data/public/libs/codemirror/mode/shell/index.html +51 -0
  472. data/public/libs/codemirror/mode/shell/shell.js +118 -0
  473. data/public/libs/codemirror/mode/sieve/LICENSE +19 -0
  474. data/public/libs/codemirror/mode/sieve/index.html +81 -0
  475. data/public/libs/codemirror/mode/sieve/sieve.js +183 -0
  476. data/public/libs/codemirror/mode/smalltalk/index.html +57 -0
  477. data/public/libs/codemirror/mode/smalltalk/smalltalk.js +141 -0
  478. data/public/libs/codemirror/mode/smarty/index.html +83 -0
  479. data/public/libs/codemirror/mode/smarty/smarty.js +148 -0
  480. data/public/libs/codemirror/mode/sparql/index.html +42 -0
  481. data/public/libs/codemirror/mode/sparql/sparql.js +143 -0
  482. data/public/libs/codemirror/mode/sql/index.html +68 -0
  483. data/public/libs/codemirror/mode/sql/sql.js +268 -0
  484. data/public/libs/codemirror/mode/stex/index.html +98 -0
  485. data/public/libs/codemirror/mode/stex/stex.js +246 -0
  486. data/public/libs/codemirror/mode/stex/test.js +117 -0
  487. data/public/libs/codemirror/mode/tcl/index.html +129 -0
  488. data/public/libs/codemirror/mode/tcl/tcl.js +131 -0
  489. data/public/libs/codemirror/mode/tiddlywiki/index.html +142 -0
  490. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.css +14 -0
  491. data/public/libs/codemirror/mode/tiddlywiki/tiddlywiki.js +353 -0
  492. data/public/libs/codemirror/mode/tiki/index.html +81 -0
  493. data/public/libs/codemirror/mode/tiki/tiki.css +26 -0
  494. data/public/libs/codemirror/mode/tiki/tiki.js +308 -0
  495. data/public/libs/codemirror/mode/turtle/index.html +39 -0
  496. data/public/libs/codemirror/mode/turtle/turtle.js +145 -0
  497. data/public/libs/codemirror/mode/vb/LICENSE.txt +21 -0
  498. data/public/libs/codemirror/mode/vb/index.html +88 -0
  499. data/public/libs/codemirror/mode/vb/vb.js +259 -0
  500. data/public/libs/codemirror/mode/vbscript/index.html +42 -0
  501. data/public/libs/codemirror/mode/vbscript/vbscript.js +26 -0
  502. data/public/libs/codemirror/mode/velocity/index.html +103 -0
  503. data/public/libs/codemirror/mode/velocity/velocity.js +144 -0
  504. data/public/libs/codemirror/mode/verilog/index.html +121 -0
  505. data/public/libs/codemirror/mode/verilog/verilog.js +182 -0
  506. data/public/libs/codemirror/mode/xml/index.html +45 -0
  507. data/public/libs/codemirror/mode/xml/xml.js +328 -0
  508. data/public/libs/codemirror/mode/xquery/LICENSE +20 -0
  509. data/public/libs/codemirror/mode/xquery/index.html +221 -0
  510. data/public/libs/codemirror/mode/xquery/test.js +64 -0
  511. data/public/libs/codemirror/mode/xquery/xquery.js +450 -0
  512. data/public/libs/codemirror/mode/yaml/index.html +68 -0
  513. data/public/libs/codemirror/mode/yaml/yaml.js +95 -0
  514. data/public/libs/codemirror/mode/z80/index.html +39 -0
  515. data/public/libs/codemirror/mode/z80/z80.js +85 -0
  516. data/public/libs/codemirror/package.json +21 -0
  517. data/public/libs/codemirror/test/doc_test.js +329 -0
  518. data/public/libs/codemirror/test/driver.js +138 -0
  519. data/public/libs/codemirror/test/index.html +182 -0
  520. data/public/libs/codemirror/test/lint/acorn.js +1593 -0
  521. data/public/libs/codemirror/test/lint/lint.js +112 -0
  522. data/public/libs/codemirror/test/lint/parse-js.js +1372 -0
  523. data/public/libs/codemirror/test/lint/walk.js +216 -0
  524. data/public/libs/codemirror/test/mode_test.css +10 -0
  525. data/public/libs/codemirror/test/mode_test.js +192 -0
  526. data/public/libs/codemirror/test/phantom_driver.js +31 -0
  527. data/public/libs/codemirror/test/run.js +33 -0
  528. data/public/libs/codemirror/test/test.js +1400 -0
  529. data/public/libs/codemirror/test/vim_test.js +1688 -0
  530. data/public/libs/codemirror/theme/ambiance-mobile.css +5 -0
  531. data/public/libs/codemirror/theme/ambiance.css +75 -0
  532. data/public/libs/codemirror/theme/blackboard.css +25 -0
  533. data/public/libs/codemirror/theme/cobalt.css +18 -0
  534. data/public/libs/codemirror/theme/eclipse.css +25 -0
  535. data/public/libs/codemirror/theme/elegant.css +10 -0
  536. data/public/libs/codemirror/theme/erlang-dark.css +21 -0
  537. data/public/libs/codemirror/theme/lesser-dark.css +44 -0
  538. data/public/libs/codemirror/theme/midnight.css +52 -0
  539. data/public/libs/codemirror/theme/monokai.css +28 -0
  540. data/public/libs/codemirror/theme/neat.css +9 -0
  541. data/public/libs/codemirror/theme/night.css +21 -0
  542. data/public/libs/codemirror/theme/rubyblue.css +21 -0
  543. data/public/libs/codemirror/theme/solarized.css +207 -0
  544. data/public/libs/codemirror/theme/twilight.css +26 -0
  545. data/public/libs/codemirror/theme/vibrant-ink.css +27 -0
  546. data/public/libs/codemirror/theme/xq-dark.css +46 -0
  547. data/public/libs/codemirror/theme/xq-light.css +43 -0
  548. data/public/libs/font-awesome/css/font-awesome-ie7.css +983 -0
  549. data/public/libs/font-awesome/css/font-awesome-ie7.min.css +24 -0
  550. data/public/libs/font-awesome/css/font-awesome.css +1268 -0
  551. data/public/libs/font-awesome/css/font-awesome.min.css +24 -0
  552. data/public/libs/font-awesome/font/FontAwesome.otf +0 -0
  553. data/public/libs/font-awesome/font/fontawesome-webfont.eot +0 -0
  554. data/public/libs/font-awesome/font/fontawesome-webfont.svg +339 -0
  555. data/public/libs/font-awesome/font/fontawesome-webfont.ttf +0 -0
  556. data/public/libs/font-awesome/font/fontawesome-webfont.woff +0 -0
  557. data/public/libs/font-awesome/less/bootstrap.less +78 -0
  558. data/public/libs/font-awesome/less/core.less +132 -0
  559. data/public/libs/font-awesome/less/extras.less +79 -0
  560. data/public/libs/font-awesome/less/font-awesome-ie7.less +413 -0
  561. data/public/libs/font-awesome/less/font-awesome.less +32 -0
  562. data/public/libs/font-awesome/less/icons.less +330 -0
  563. data/public/libs/font-awesome/less/mixins.less +34 -0
  564. data/public/libs/font-awesome/less/path.less +15 -0
  565. data/public/libs/font-awesome/less/variables.less +9 -0
  566. data/public/libs/jquery-1.10.0.min.js +6 -0
  567. data/public/libs/jquery-ui.min.js +12 -0
  568. data/public/libs/jquery.jsPlumb-1.4.0-all.js +9571 -0
  569. data/public/libs/jquery.livequery.js +226 -0
  570. data/public/libs/jsPlumbInitializer.js +72 -0
  571. data/public/libs/jstree/README.txt +10 -0
  572. data/public/libs/jstree/_demo/_dump.sql +20 -0
  573. data/public/libs/jstree/_demo/_inc/__mysql_errors.log +0 -0
  574. data/public/libs/jstree/_demo/_inc/class._database.php +146 -0
  575. data/public/libs/jstree/_demo/_inc/class._database_i.php +152 -0
  576. data/public/libs/jstree/_demo/_inc/class.tree.php +602 -0
  577. data/public/libs/jstree/_demo/_install.txt +6 -0
  578. data/public/libs/jstree/_demo/config.php +14 -0
  579. data/public/libs/jstree/_demo/file.png +0 -0
  580. data/public/libs/jstree/_demo/folder.png +0 -0
  581. data/public/libs/jstree/_demo/index.html +461 -0
  582. data/public/libs/jstree/_demo/root.png +0 -0
  583. data/public/libs/jstree/_demo/server.php +69 -0
  584. data/public/libs/jstree/_docs/!style.css +48 -0
  585. data/public/libs/jstree/_docs/_drive.png +0 -0
  586. data/public/libs/jstree/_docs/_html_data.html +2 -0
  587. data/public/libs/jstree/_docs/_json_data.json +4 -0
  588. data/public/libs/jstree/_docs/_search_data.json +6 -0
  589. data/public/libs/jstree/_docs/_search_result.json +1 -0
  590. data/public/libs/jstree/_docs/_xml_flat.xml +12 -0
  591. data/public/libs/jstree/_docs/_xml_nest.xml +18 -0
  592. data/public/libs/jstree/_docs/checkbox.html +171 -0
  593. data/public/libs/jstree/_docs/contextmenu.html +121 -0
  594. data/public/libs/jstree/_docs/cookies.html +97 -0
  595. data/public/libs/jstree/_docs/core.html +689 -0
  596. data/public/libs/jstree/_docs/crrm.html +316 -0
  597. data/public/libs/jstree/_docs/dnd.html +199 -0
  598. data/public/libs/jstree/_docs/hotkeys.html +82 -0
  599. data/public/libs/jstree/_docs/html_data.html +175 -0
  600. data/public/libs/jstree/_docs/index.html +86 -0
  601. data/public/libs/jstree/_docs/json_data.html +249 -0
  602. data/public/libs/jstree/_docs/languages.html +152 -0
  603. data/public/libs/jstree/_docs/logo.png +0 -0
  604. data/public/libs/jstree/_docs/search.html +153 -0
  605. data/public/libs/jstree/_docs/sort.html +85 -0
  606. data/public/libs/jstree/_docs/syntax/!script.js +2232 -0
  607. data/public/libs/jstree/_docs/syntax/!style.css +511 -0
  608. data/public/libs/jstree/_docs/syntax/clipboard.swf +0 -0
  609. data/public/libs/jstree/_docs/syntax/help.png +0 -0
  610. data/public/libs/jstree/_docs/syntax/magnifier.png +0 -0
  611. data/public/libs/jstree/_docs/syntax/page_white_code.png +0 -0
  612. data/public/libs/jstree/_docs/syntax/page_white_copy.png +0 -0
  613. data/public/libs/jstree/_docs/syntax/printer.png +0 -0
  614. data/public/libs/jstree/_docs/syntax/wrapping.png +0 -0
  615. data/public/libs/jstree/_docs/themeroller.html +107 -0
  616. data/public/libs/jstree/_docs/themes.html +127 -0
  617. data/public/libs/jstree/_docs/types.html +178 -0
  618. data/public/libs/jstree/_docs/ui.html +197 -0
  619. data/public/libs/jstree/_docs/unique.html +85 -0
  620. data/public/libs/jstree/_docs/xml_data.html +218 -0
  621. data/public/libs/jstree/_lib/jquery.cookie.js +96 -0
  622. data/public/libs/jstree/_lib/jquery.hotkeys.js +99 -0
  623. data/public/libs/jstree/_lib/jquery.js +5 -0
  624. data/public/libs/jstree/jquery.jstree.js +4564 -0
  625. data/public/libs/jstree/themes/apple/bg.jpg +0 -0
  626. data/public/libs/jstree/themes/apple/d.png +0 -0
  627. data/public/libs/jstree/themes/apple/dot_for_ie.gif +0 -0
  628. data/public/libs/jstree/themes/apple/style.css +61 -0
  629. data/public/libs/jstree/themes/apple/throbber.gif +0 -0
  630. data/public/libs/jstree/themes/classic/d.gif +0 -0
  631. data/public/libs/jstree/themes/classic/d.png +0 -0
  632. data/public/libs/jstree/themes/classic/dot_for_ie.gif +0 -0
  633. data/public/libs/jstree/themes/classic/style.css +77 -0
  634. data/public/libs/jstree/themes/classic/throbber.gif +0 -0
  635. data/public/libs/jstree/themes/default-rtl/d.gif +0 -0
  636. data/public/libs/jstree/themes/default-rtl/d.png +0 -0
  637. data/public/libs/jstree/themes/default-rtl/dots.gif +0 -0
  638. data/public/libs/jstree/themes/default-rtl/style.css +84 -0
  639. data/public/libs/jstree/themes/default-rtl/throbber.gif +0 -0
  640. data/public/libs/jstree/themes/default/d.gif +0 -0
  641. data/public/libs/jstree/themes/default/d.png +0 -0
  642. data/public/libs/jstree/themes/default/style.css +74 -0
  643. data/public/libs/jstree/themes/default/throbber.gif +0 -0
  644. data/test/dummy/README.rdoc +261 -0
  645. data/test/dummy/Rakefile +7 -0
  646. data/test/dummy/app/assets/javascripts/application.js +15 -0
  647. data/test/dummy/app/assets/javascripts/demo_app.js +2 -0
  648. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  649. data/test/dummy/app/assets/stylesheets/demo_app.css +4 -0
  650. data/test/dummy/app/controllers/application_controller.rb +3 -0
  651. data/test/dummy/app/controllers/demo_app_controller.rb +6 -0
  652. data/test/dummy/app/helpers/application_helper.rb +2 -0
  653. data/test/dummy/app/helpers/demo_app_helper.rb +2 -0
  654. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  655. data/test/dummy/config.ru +4 -0
  656. data/test/dummy/config/application.rb +59 -0
  657. data/test/dummy/config/boot.rb +10 -0
  658. data/test/dummy/config/database.yml +25 -0
  659. data/test/dummy/config/environment.rb +5 -0
  660. data/test/dummy/config/environments/development.rb +37 -0
  661. data/test/dummy/config/environments/production.rb +67 -0
  662. data/test/dummy/config/environments/test.rb +37 -0
  663. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  664. data/test/dummy/config/initializers/inflections.rb +15 -0
  665. data/test/dummy/config/initializers/mime_types.rb +5 -0
  666. data/test/dummy/config/initializers/secret_token.rb +7 -0
  667. data/test/dummy/config/initializers/session_store.rb +8 -0
  668. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  669. data/test/dummy/config/locales/en.yml +5 -0
  670. data/test/dummy/config/routes.rb +6 -0
  671. data/test/dummy/db/test.sqlite3 +0 -0
  672. data/test/dummy/log/development.log +17606 -0
  673. data/test/dummy/public/404.html +26 -0
  674. data/test/dummy/public/422.html +26 -0
  675. data/test/dummy/public/500.html +25 -0
  676. data/test/dummy/public/favicon.ico +0 -0
  677. data/test/dummy/script/rails +6 -0
  678. data/test/dummy/test/functional/demo_app_controller_test.rb +7 -0
  679. data/test/dummy/test/unit/helpers/demo_app_helper_test.rb +4 -0
  680. data/test/dummy/tmp/cache/assets/D26/980/sprockets%2Fe04a37a0fa7f26c1183a1a4436e2a9c1 +0 -0
  681. data/test/dummy/tmp/cache/assets/D32/4F0/sprockets%2Fbd5441f3593e4ea157222202f3fddad6 +0 -0
  682. data/test/dummy/tmp/pids/server.pid +1 -0
  683. data/test/functional/maglev_database_explorer/def_controller_test.rb +9 -0
  684. data/test/integration/navigation_test.rb +10 -0
  685. data/test/maglev-database-explorer_test.rb +7 -0
  686. data/test/test_helper.rb +15 -0
  687. data/test/unit/helpers/maglev_database_explorer/def_helper_test.rb +6 -0
  688. metadata +813 -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
+