1
0

Kernel-Methods.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807
  1. smalltalk.addPackage('Kernel-Methods', {});
  2. smalltalk.addClass('Message', smalltalk.Object, ['selector', 'arguments'], 'Kernel-Methods');
  3. smalltalk.Message.comment=unescape('Generally%2C%20the%20system%20does%20not%20use%20instances%20of%20Message%20for%20efficiency%20reasons.%0AHowever%2C%20when%20a%20message%20is%20not%20understood%20by%20its%20receiver%2C%20the%20interpreter%20will%20make%20up%20an%20instance%20of%20it%20in%20order%20to%20capture%20the%20information%20involved%20in%20an%20actual%20message%20transmission.%20%0AThis%20instance%20is%20sent%20it%20as%20an%20argument%20with%20the%20message%20%60doesNotUnderstand%3A%60%20to%20the%20receiver.%0A%0ASee%20boot.js%2C%20%60messageNotUnderstood%60%20%20and%20its%20counterpart%20%60Object%3E%3EdoesNotUnderstand%3A%60')
  4. smalltalk.addMethod(
  5. unescape('_selector'),
  6. smalltalk.method({
  7. selector: unescape('selector'),
  8. category: 'accessing',
  9. fn: function () {
  10. var self = this;
  11. return self['@selector'];
  12. return self;
  13. },
  14. args: [],
  15. source: unescape('selector%0A%09%5Eselector'),
  16. messageSends: [],
  17. referencedClasses: []
  18. }),
  19. smalltalk.Message);
  20. smalltalk.addMethod(
  21. unescape('_selector_'),
  22. smalltalk.method({
  23. selector: unescape('selector%3A'),
  24. category: 'accessing',
  25. fn: function (aString) {
  26. var self = this;
  27. self['@selector'] = aString;
  28. return self;
  29. },
  30. args: ["aString"],
  31. source: unescape('selector%3A%20aString%0A%09selector%20%3A%3D%20aString'),
  32. messageSends: [],
  33. referencedClasses: []
  34. }),
  35. smalltalk.Message);
  36. smalltalk.addMethod(
  37. unescape('_arguments_'),
  38. smalltalk.method({
  39. selector: unescape('arguments%3A'),
  40. category: 'accessing',
  41. fn: function (anArray) {
  42. var self = this;
  43. self['@arguments'] = anArray;
  44. return self;
  45. },
  46. args: ["anArray"],
  47. source: unescape('arguments%3A%20anArray%0A%09arguments%20%3A%3D%20anArray'),
  48. messageSends: [],
  49. referencedClasses: []
  50. }),
  51. smalltalk.Message);
  52. smalltalk.addMethod(
  53. unescape('_arguments'),
  54. smalltalk.method({
  55. selector: unescape('arguments'),
  56. category: 'accessing',
  57. fn: function () {
  58. var self = this;
  59. return self['@arguments'];
  60. return self;
  61. },
  62. args: [],
  63. source: unescape('arguments%0A%09%5Earguments'),
  64. messageSends: [],
  65. referencedClasses: []
  66. }),
  67. smalltalk.Message);
  68. smalltalk.addMethod(
  69. unescape('_printString'),
  70. smalltalk.method({
  71. selector: unescape('printString'),
  72. category: 'printing',
  73. fn: function () {
  74. var self = this;
  75. return smalltalk.send(smalltalk.String || String, "_streamContents_", [function (aStream) {return function ($rec) {smalltalk.send($rec, "_nextPutAll_", [smalltalk.send(self, "_printString", [], smalltalk.Object)]);smalltalk.send($rec, "_nextPutAll_", [unescape("%28")]);smalltalk.send($rec, "_nextPutAll_", [self['@selector']]);return smalltalk.send($rec, "_nextPutAll_", [unescape("%29")]);}(aStream);}]);
  76. return self;
  77. },
  78. args: [],
  79. source: unescape('printString%0A%09%5E%20String%20streamContents%3A%20%5B%3AaStream%7C%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09aStream%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20super%20printString%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%28%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20selector%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%09%09%09%09%09nextPutAll%3A%20%27%29%27%20%09%09%09%09%5D'),
  80. messageSends: ["streamContents:", "nextPutAll:", "printString"],
  81. referencedClasses: ["String"]
  82. }),
  83. smalltalk.Message);
  84. smalltalk.addMethod(
  85. unescape('_sendTo_'),
  86. smalltalk.method({
  87. selector: unescape('sendTo%3A'),
  88. category: 'printing',
  89. fn: function (anObject) {
  90. var self = this;
  91. smalltalk.send(smalltalk.send(smalltalk.Smalltalk || Smalltalk, "_current", []), "_send_to_arguments_", [smalltalk.send(self, "_selector", []), anObject, smalltalk.send(self, "_arguments", [])]);
  92. return self;
  93. },
  94. args: ["anObject"],
  95. source: unescape('sendTo%3A%20anObject%0A%09Smalltalk%20current%20send%3A%20self%20selector%20to%3A%20anObject%20arguments%3A%20self%20arguments'),
  96. messageSends: ["send:to:arguments:", "current", "selector", "arguments"],
  97. referencedClasses: ["Smalltalk"]
  98. }),
  99. smalltalk.Message);
  100. smalltalk.addMethod(
  101. unescape('_selector_arguments_'),
  102. smalltalk.method({
  103. selector: unescape('selector%3Aarguments%3A'),
  104. category: 'instance creation',
  105. fn: function (aString, anArray) {
  106. var self = this;
  107. return function ($rec) {smalltalk.send($rec, "_selector_", [aString]);smalltalk.send($rec, "_arguments_", [anArray]);return smalltalk.send($rec, "_yourself", []);}(smalltalk.send(self, "_new", []));
  108. return self;
  109. },
  110. args: ["aString", "anArray"],
  111. source: unescape('selector%3A%20aString%20arguments%3A%20anArray%0A%09%5Eself%20new%0A%09%09selector%3A%20aString%3B%0A%09%09arguments%3A%20anArray%3B%0A%09%09yourself'),
  112. messageSends: ["selector:", "arguments:", "yourself", "new"],
  113. referencedClasses: []
  114. }),
  115. smalltalk.Message.klass);
  116. smalltalk.addClass('MethodContext', smalltalk.Object, [], 'Kernel-Methods');
  117. smalltalk.MethodContext.comment=unescape('MethodContext%20holds%20all%20the%20dynamic%20state%20associated%20with%20the%20execution%20of%20either%20a%20method%20activation%20resulting%20from%20a%20message%20send.%20That%20is%20used%20to%20build%20the%20call%20stack%20while%20debugging.%0A%20%20%0AMethodContext%20instances%20are%20JavaScript%20%60SmalltalkMethodContext%60%20objects%20defined%20in%20boot.js%20%0A%0ACurrent%20limitation%3A%20MethodContext%20instances%20are%20not%20created%20on%20Block%20evaluation.%20That%20means%20it%27s%20actually%20impossible%20to%20debug%20inside%20a%20Block.')
  118. smalltalk.addMethod(
  119. unescape('_receiver'),
  120. smalltalk.method({
  121. selector: unescape('receiver'),
  122. category: 'accessing',
  123. fn: function () {
  124. var self = this;
  125. return self.receiver;
  126. return self;
  127. },
  128. args: [],
  129. source: unescape('receiver%0A%09%3Creturn%20self.receiver%3E'),
  130. messageSends: [],
  131. referencedClasses: []
  132. }),
  133. smalltalk.MethodContext);
  134. smalltalk.addMethod(
  135. unescape('_selector'),
  136. smalltalk.method({
  137. selector: unescape('selector'),
  138. category: 'accessing',
  139. fn: function () {
  140. var self = this;
  141. return smalltalk.convertSelector(self.selector);
  142. return self;
  143. },
  144. args: [],
  145. source: unescape('selector%0A%09%3Creturn%20smalltalk.convertSelector%28self.selector%29%3E'),
  146. messageSends: [],
  147. referencedClasses: []
  148. }),
  149. smalltalk.MethodContext);
  150. smalltalk.addMethod(
  151. unescape('_home'),
  152. smalltalk.method({
  153. selector: unescape('home'),
  154. category: 'accessing',
  155. fn: function () {
  156. var self = this;
  157. return self.homeContext;
  158. return self;
  159. },
  160. args: [],
  161. source: unescape('home%0A%09%3Creturn%20self.homeContext%3E'),
  162. messageSends: [],
  163. referencedClasses: []
  164. }),
  165. smalltalk.MethodContext);
  166. smalltalk.addMethod(
  167. unescape('_temps'),
  168. smalltalk.method({
  169. selector: unescape('temps'),
  170. category: 'accessing',
  171. fn: function () {
  172. var self = this;
  173. return self.temps;
  174. return self;
  175. },
  176. args: [],
  177. source: unescape('temps%0A%09%3Creturn%20self.temps%3E'),
  178. messageSends: [],
  179. referencedClasses: []
  180. }),
  181. smalltalk.MethodContext);
  182. smalltalk.addMethod(
  183. unescape('_printString'),
  184. smalltalk.method({
  185. selector: unescape('printString'),
  186. category: 'accessing',
  187. fn: function () {
  188. var self = this;
  189. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_printString", [], smalltalk.Object), "__comma", [unescape("%28")]), "__comma", [smalltalk.send(self, "_asString", [])]), "__comma", [unescape("%29")]);
  190. return self;
  191. },
  192. args: [],
  193. source: unescape('printString%0A%09%5Esuper%20printString%2C%20%27%28%27%2C%20self%20asString%2C%20%27%29%27'),
  194. messageSends: [unescape("%2C"), "printString", "asString"],
  195. referencedClasses: []
  196. }),
  197. smalltalk.MethodContext);
  198. smalltalk.addMethod(
  199. unescape('_asString'),
  200. smalltalk.method({
  201. selector: unescape('asString'),
  202. category: 'accessing',
  203. fn: function () {
  204. var self = this;
  205. return smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(smalltalk.send(self, "_receiver", []), "_class", []), "_printString", []), "__comma", [unescape("%20%3E%3E%20")]), "__comma", [smalltalk.send(self, "_selector", [])]);
  206. return self;
  207. },
  208. args: [],
  209. source: unescape('asString%0A%09%5Eself%20receiver%20class%20printString%2C%20%27%20%3E%3E%20%27%2C%20self%20selector'),
  210. messageSends: [unescape("%2C"), "printString", "class", "receiver", "selector"],
  211. referencedClasses: []
  212. }),
  213. smalltalk.MethodContext);
  214. smalltalk.addClass('BlockClosure', smalltalk.Object, [], 'Kernel-Methods');
  215. smalltalk.BlockClosure.comment=unescape('A%20BlockClosure%20is%20a%20lexical%20closure.%0AThe%20JavaScript%20representation%20is%20a%20function.%0A%0AA%20BlockClosure%20is%20evaluated%20with%20the%20%60%23value*%60%20methods%20in%20the%20%27evaluating%27%20protocol.')
  216. smalltalk.addMethod(
  217. unescape('_compiledSource'),
  218. smalltalk.method({
  219. selector: unescape('compiledSource'),
  220. category: 'accessing',
  221. fn: function () {
  222. var self = this;
  223. return self.toString();
  224. return self;
  225. },
  226. args: [],
  227. source: unescape('compiledSource%0A%09%3Creturn%20self.toString%28%29%3E'),
  228. messageSends: [],
  229. referencedClasses: []
  230. }),
  231. smalltalk.BlockClosure);
  232. smalltalk.addMethod(
  233. unescape('_whileTrue_'),
  234. smalltalk.method({
  235. selector: unescape('whileTrue%3A'),
  236. category: 'controlling',
  237. fn: function (aBlock) {
  238. var self = this;
  239. while (self()) {
  240. aBlock();
  241. }
  242. return self;
  243. },
  244. args: ["aBlock"],
  245. source: unescape('whileTrue%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28self%28%29%29%20%7BaBlock%28%29%7D%3E'),
  246. messageSends: [],
  247. referencedClasses: []
  248. }),
  249. smalltalk.BlockClosure);
  250. smalltalk.addMethod(
  251. unescape('_whileFalse_'),
  252. smalltalk.method({
  253. selector: unescape('whileFalse%3A'),
  254. category: 'controlling',
  255. fn: function (aBlock) {
  256. var self = this;
  257. while (!self()) {
  258. aBlock();
  259. }
  260. return self;
  261. },
  262. args: ["aBlock"],
  263. source: unescape('whileFalse%3A%20aBlock%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Cwhile%28%21self%28%29%29%20%7BaBlock%28%29%7D%3E'),
  264. messageSends: [],
  265. referencedClasses: []
  266. }),
  267. smalltalk.BlockClosure);
  268. smalltalk.addMethod(
  269. unescape('_value'),
  270. smalltalk.method({
  271. selector: unescape('value'),
  272. category: 'evaluating',
  273. fn: function () {
  274. var self = this;
  275. return self();
  276. return self;
  277. },
  278. args: [],
  279. source: unescape('value%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28%29%3B%3E'),
  280. messageSends: [],
  281. referencedClasses: []
  282. }),
  283. smalltalk.BlockClosure);
  284. smalltalk.addMethod(
  285. unescape('_value_'),
  286. smalltalk.method({
  287. selector: unescape('value%3A'),
  288. category: 'evaluating',
  289. fn: function (anArg) {
  290. var self = this;
  291. return self(anArg);
  292. return self;
  293. },
  294. args: ["anArg"],
  295. source: unescape('value%3A%20anArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28anArg%29%3B%3E'),
  296. messageSends: [],
  297. referencedClasses: []
  298. }),
  299. smalltalk.BlockClosure);
  300. smalltalk.addMethod(
  301. unescape('_value_value_'),
  302. smalltalk.method({
  303. selector: unescape('value%3Avalue%3A'),
  304. category: 'evaluating',
  305. fn: function (firstArg, secondArg) {
  306. var self = this;
  307. return self(firstArg, secondArg);
  308. return self;
  309. },
  310. args: ["firstArg", "secondArg"],
  311. source: unescape('value%3A%20firstArg%20value%3A%20secondArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%29%3B%3E'),
  312. messageSends: [],
  313. referencedClasses: []
  314. }),
  315. smalltalk.BlockClosure);
  316. smalltalk.addMethod(
  317. unescape('_value_value_value_'),
  318. smalltalk.method({
  319. selector: unescape('value%3Avalue%3Avalue%3A'),
  320. category: 'evaluating',
  321. fn: function (firstArg, secondArg, thirdArg) {
  322. var self = this;
  323. return self(firstArg, secondArg, thirdArg);
  324. return self;
  325. },
  326. args: ["firstArg", "secondArg", "thirdArg"],
  327. source: unescape('value%3A%20firstArg%20value%3A%20secondArg%20value%3A%20thirdArg%0A%09%22inlined%20in%20the%20Compiler%22%0A%09%3Creturn%20self%28firstArg%2C%20secondArg%2C%20thirdArg%29%3B%3E'),
  328. messageSends: [],
  329. referencedClasses: []
  330. }),
  331. smalltalk.BlockClosure);
  332. smalltalk.addMethod(
  333. unescape('_valueWithPossibleArguments_'),
  334. smalltalk.method({
  335. selector: unescape('valueWithPossibleArguments%3A'),
  336. category: 'evaluating',
  337. fn: function (aCollection) {
  338. var self = this;
  339. return self.apply(null, aCollection);
  340. return self;
  341. },
  342. args: ["aCollection"],
  343. source: unescape('valueWithPossibleArguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28null%2C%20aCollection%29%3B%3E'),
  344. messageSends: [],
  345. referencedClasses: []
  346. }),
  347. smalltalk.BlockClosure);
  348. smalltalk.addMethod(
  349. unescape('_on_do_'),
  350. smalltalk.method({
  351. selector: unescape('on%3Ado%3A'),
  352. category: 'error handling',
  353. fn: function (anErrorClass, aBlock) {
  354. var self = this;
  355. return smalltalk.send(self, "_try_catch_", [self, function (error) {return ($receiver = smalltalk.send(error, "_isKindOf_", [anErrorClass])).klass === smalltalk.Boolean ? $receiver ? function () {return smalltalk.send(aBlock, "_value_", [error]);}() : function () {return smalltalk.send(error, "_signal", []);}() : smalltalk.send($receiver, "_ifTrue_ifFalse_", [function () {return smalltalk.send(aBlock, "_value_", [error]);}, function () {return smalltalk.send(error, "_signal", []);}]);}]);
  356. return self;
  357. },
  358. args: ["anErrorClass", "aBlock"],
  359. source: unescape('on%3A%20anErrorClass%20do%3A%20aBlock%0A%09%5Eself%20try%3A%20self%20catch%3A%20%5B%3Aerror%20%7C%0A%09%20%20%20%20%28error%20isKindOf%3A%20anErrorClass%29%20%0A%09%20%20%20%20%20ifTrue%3A%20%5BaBlock%20value%3A%20error%5D%0A%09%20%20%20%20%20ifFalse%3A%20%5Berror%20signal%5D%5D'),
  360. messageSends: ["try:catch:", "ifTrue:ifFalse:", "isKindOf:", "value:", "signal"],
  361. referencedClasses: []
  362. }),
  363. smalltalk.BlockClosure);
  364. smalltalk.addMethod(
  365. unescape('_valueWithTimeout_'),
  366. smalltalk.method({
  367. selector: unescape('valueWithTimeout%3A'),
  368. category: 'timeout/interval',
  369. fn: function (aNumber) {
  370. var self = this;
  371. return setTimeout(self, aNumber);
  372. return self;
  373. },
  374. args: ["aNumber"],
  375. source: unescape('valueWithTimeout%3A%20aNumber%0A%09%3Creturn%20setTimeout%28self%2C%20aNumber%29%3E'),
  376. messageSends: [],
  377. referencedClasses: []
  378. }),
  379. smalltalk.BlockClosure);
  380. smalltalk.addMethod(
  381. unescape('_valueWithInterval_'),
  382. smalltalk.method({
  383. selector: unescape('valueWithInterval%3A'),
  384. category: 'timeout/interval',
  385. fn: function (aNumber) {
  386. var self = this;
  387. return setInterval(self, aNumber);
  388. return self;
  389. },
  390. args: ["aNumber"],
  391. source: unescape('valueWithInterval%3A%20aNumber%0A%09%3Creturn%20setInterval%28self%2C%20aNumber%29%3E'),
  392. messageSends: [],
  393. referencedClasses: []
  394. }),
  395. smalltalk.BlockClosure);
  396. smalltalk.addMethod(
  397. unescape('_whileFalse'),
  398. smalltalk.method({
  399. selector: unescape('whileFalse'),
  400. category: 'controlling',
  401. fn: function () {
  402. var self = this;
  403. smalltalk.send(self, "_whileFalse_", [function () {return nil;}]);
  404. return self;
  405. },
  406. args: [],
  407. source: unescape('whileFalse%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileFalse%3A%20%5B%5D'),
  408. messageSends: ["whileFalse:"],
  409. referencedClasses: []
  410. }),
  411. smalltalk.BlockClosure);
  412. smalltalk.addMethod(
  413. unescape('_whileTrue'),
  414. smalltalk.method({
  415. selector: unescape('whileTrue'),
  416. category: 'controlling',
  417. fn: function () {
  418. var self = this;
  419. smalltalk.send(self, "_whileTrue_", [function () {return nil;}]);
  420. return self;
  421. },
  422. args: [],
  423. source: unescape('whileTrue%0A%09%22inlined%20in%20the%20Compiler%22%0A%09self%20whileTrue%3A%20%5B%5D'),
  424. messageSends: ["whileTrue:"],
  425. referencedClasses: []
  426. }),
  427. smalltalk.BlockClosure);
  428. smalltalk.addMethod(
  429. unescape('_new'),
  430. smalltalk.method({
  431. selector: unescape('new'),
  432. category: 'evaluating',
  433. fn: function () {
  434. var self = this;
  435. return new self;
  436. return self;
  437. },
  438. args: [],
  439. source: unescape('new%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28%29%3E'),
  440. messageSends: [],
  441. referencedClasses: []
  442. }),
  443. smalltalk.BlockClosure);
  444. smalltalk.addMethod(
  445. unescape('_applyTo_arguments_'),
  446. smalltalk.method({
  447. selector: unescape('applyTo%3Aarguments%3A'),
  448. category: 'evaluating',
  449. fn: function (anObject, aCollection) {
  450. var self = this;
  451. return self.apply(anObject, aCollection);
  452. return self;
  453. },
  454. args: ["anObject", "aCollection"],
  455. source: unescape('applyTo%3A%20anObject%20arguments%3A%20aCollection%0A%09%3Creturn%20self.apply%28anObject%2C%20aCollection%29%3E'),
  456. messageSends: [],
  457. referencedClasses: []
  458. }),
  459. smalltalk.BlockClosure);
  460. smalltalk.addMethod(
  461. unescape('_timeToRun'),
  462. smalltalk.method({
  463. selector: unescape('timeToRun'),
  464. category: 'evaluating',
  465. fn: function () {
  466. var self = this;
  467. return smalltalk.send(smalltalk.Date || Date, "_millisecondsToRun_", [self]);
  468. return self;
  469. },
  470. args: [],
  471. source: unescape('timeToRun%0A%09%22Answer%20the%20number%20of%20milliseconds%20taken%20to%20execute%20this%20block.%22%0A%0A%09%5E%20Date%20millisecondsToRun%3A%20self'),
  472. messageSends: ["millisecondsToRun:"],
  473. referencedClasses: ["Date"]
  474. }),
  475. smalltalk.BlockClosure);
  476. smalltalk.addMethod(
  477. unescape('_numArgs'),
  478. smalltalk.method({
  479. selector: unescape('numArgs'),
  480. category: 'accessing',
  481. fn: function () {
  482. var self = this;
  483. return self.length;
  484. return self;
  485. },
  486. args: [],
  487. source: unescape('numArgs%0A%09%3Creturn%20self.length%3E'),
  488. messageSends: [],
  489. referencedClasses: []
  490. }),
  491. smalltalk.BlockClosure);
  492. smalltalk.addMethod(
  493. unescape('_ensure_'),
  494. smalltalk.method({
  495. selector: unescape('ensure%3A'),
  496. category: 'evaluating',
  497. fn: function (aBlock) {
  498. var self = this;
  499. var success = nil;
  500. success = false;
  501. return smalltalk.send(function () {smalltalk.send(self, "_value", []);success = true;return smalltalk.send(aBlock, "_value", []);}, "_on_do_", [smalltalk.Error || Error, function (ex) {($receiver = success).klass === smalltalk.Boolean ? !$receiver ? function () {return smalltalk.send(aBlock, "_value", []);}() : nil : smalltalk.send($receiver, "_ifFalse_", [function () {return smalltalk.send(aBlock, "_value", []);}]);return smalltalk.send(ex, "_signal", []);}]);
  502. return self;
  503. },
  504. args: ["aBlock"],
  505. source: unescape('ensure%3A%20aBlock%0A%09%7C%20success%20%7C%0A%09success%20%3A%3D%20false.%0A%09%5E%5Bself%20value.%20success%20%3A%3D%20true.%20aBlock%20value%5D%0A%09%09on%3A%20Error%0A%09%09do%3A%20%5B%3Aex%20%7C%0A%09%09%09success%20ifFalse%3A%20%5BaBlock%20value%5D.%0A%09%09%09ex%20signal%5D'),
  506. messageSends: ["on:do:", "value", "ifFalse:", "signal"],
  507. referencedClasses: ["Error"]
  508. }),
  509. smalltalk.BlockClosure);
  510. smalltalk.addMethod(
  511. unescape('_newValue_'),
  512. smalltalk.method({
  513. selector: unescape('newValue%3A'),
  514. category: 'evaluating',
  515. fn: function (anObject) {
  516. var self = this;
  517. return new self(anObject);
  518. return self;
  519. },
  520. args: ["anObject"],
  521. source: unescape('newValue%3A%20anObject%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%29%3E'),
  522. messageSends: [],
  523. referencedClasses: []
  524. }),
  525. smalltalk.BlockClosure);
  526. smalltalk.addMethod(
  527. unescape('_newValue_value_'),
  528. smalltalk.method({
  529. selector: unescape('newValue%3Avalue%3A'),
  530. category: 'evaluating',
  531. fn: function (anObject, anObject2) {
  532. var self = this;
  533. return new self(anObject, anObject2);
  534. return self;
  535. },
  536. args: ["anObject", "anObject2"],
  537. source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
  538. messageSends: [],
  539. referencedClasses: []
  540. }),
  541. smalltalk.BlockClosure);
  542. smalltalk.addMethod(
  543. unescape('_newValue_value_value_'),
  544. smalltalk.method({
  545. selector: unescape('newValue%3Avalue%3Avalue%3A'),
  546. category: 'evaluating',
  547. fn: function (anObject, anObject2, anObject3) {
  548. var self = this;
  549. return new self(anObject, anObject2);
  550. return self;
  551. },
  552. args: ["anObject", "anObject2", "anObject3"],
  553. source: unescape('newValue%3A%20%20anObject%20value%3A%20anObject2%20value%3A%20anObject3%0A%09%22Use%20the%20receiver%20as%20a%20JS%20constructor.%20%0A%09*Do%20not*%20use%20this%20method%20to%20instanciate%20Smalltalk%20objects%21%22%0A%09%3Creturn%20new%20self%28anObject%2C%20anObject2%29%3E'),
  554. messageSends: [],
  555. referencedClasses: []
  556. }),
  557. smalltalk.BlockClosure);
  558. smalltalk.addClass('CompiledMethod', smalltalk.Object, [], 'Kernel-Methods');
  559. smalltalk.CompiledMethod.comment=unescape('CompiledMethod%20hold%20the%20source%20and%20compiled%20code%20of%20a%20class%20method.%0A%0AYou%20can%20get%20a%20CompiledMethod%20using%20%60Behavior%3E%3EmethodAt%3A%60%0A%0A%09String%20methodAt%3A%20%27lines%27%0A%0Aand%20read%20the%20source%20code%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20source%0A%0ASee%20referenced%20classes%3A%0A%0A%09%28String%20methodAt%3A%20%27lines%27%29%20referencedClasses%0A%0Aor%20messages%20sent%20from%20this%20method%3A%0A%09%0A%09%28String%20methodAt%3A%20%27lines%27%29%20%20messageSends')
  560. smalltalk.addMethod(
  561. unescape('_source'),
  562. smalltalk.method({
  563. selector: unescape('source'),
  564. category: 'accessing',
  565. fn: function () {
  566. var self = this;
  567. return ($receiver = smalltalk.send(self, "_basicAt_", ["source"])) == nil ||
  568. $receiver == undefined ? function () {return "";}() : $receiver;
  569. return self;
  570. },
  571. args: [],
  572. source: unescape('source%0A%09%5E%28self%20basicAt%3A%20%27source%27%29%20ifNil%3A%20%5B%27%27%5D'),
  573. messageSends: ["ifNil:", "basicAt:"],
  574. referencedClasses: []
  575. }),
  576. smalltalk.CompiledMethod);
  577. smalltalk.addMethod(
  578. unescape('_source_'),
  579. smalltalk.method({
  580. selector: unescape('source%3A'),
  581. category: 'accessing',
  582. fn: function (aString) {
  583. var self = this;
  584. smalltalk.send(self, "_basicAt_put_", ["source", aString]);
  585. return self;
  586. },
  587. args: ["aString"],
  588. source: unescape('source%3A%20aString%0A%09self%20basicAt%3A%20%27source%27%20put%3A%20aString'),
  589. messageSends: ["basicAt:put:"],
  590. referencedClasses: []
  591. }),
  592. smalltalk.CompiledMethod);
  593. smalltalk.addMethod(
  594. unescape('_category'),
  595. smalltalk.method({
  596. selector: unescape('category'),
  597. category: 'accessing',
  598. fn: function () {
  599. var self = this;
  600. return ($receiver = smalltalk.send(self, "_basicAt_", ["category"])) == nil ||
  601. $receiver == undefined ? function () {return "";}() : $receiver;
  602. return self;
  603. },
  604. args: [],
  605. source: unescape('category%0A%09%5E%28self%20basicAt%3A%20%27category%27%29%20ifNil%3A%20%5B%27%27%5D'),
  606. messageSends: ["ifNil:", "basicAt:"],
  607. referencedClasses: []
  608. }),
  609. smalltalk.CompiledMethod);
  610. smalltalk.addMethod(
  611. unescape('_category_'),
  612. smalltalk.method({
  613. selector: unescape('category%3A'),
  614. category: 'accessing',
  615. fn: function (aString) {
  616. var self = this;
  617. smalltalk.send(self, "_basicAt_put_", ["category", aString]);
  618. return self;
  619. },
  620. args: ["aString"],
  621. source: unescape('category%3A%20aString%0A%09self%20basicAt%3A%20%27category%27%20put%3A%20aString'),
  622. messageSends: ["basicAt:put:"],
  623. referencedClasses: []
  624. }),
  625. smalltalk.CompiledMethod);
  626. smalltalk.addMethod(
  627. unescape('_selector'),
  628. smalltalk.method({
  629. selector: unescape('selector'),
  630. category: 'accessing',
  631. fn: function () {
  632. var self = this;
  633. return smalltalk.send(self, "_basicAt_", ["selector"]);
  634. return self;
  635. },
  636. args: [],
  637. source: unescape('selector%0A%09%5Eself%20basicAt%3A%20%27selector%27'),
  638. messageSends: ["basicAt:"],
  639. referencedClasses: []
  640. }),
  641. smalltalk.CompiledMethod);
  642. smalltalk.addMethod(
  643. unescape('_selector_'),
  644. smalltalk.method({
  645. selector: unescape('selector%3A'),
  646. category: 'accessing',
  647. fn: function (aString) {
  648. var self = this;
  649. smalltalk.send(self, "_basicAt_put_", ["selector", aString]);
  650. return self;
  651. },
  652. args: ["aString"],
  653. source: unescape('selector%3A%20aString%0A%09self%20basicAt%3A%20%27selector%27%20put%3A%20aString'),
  654. messageSends: ["basicAt:put:"],
  655. referencedClasses: []
  656. }),
  657. smalltalk.CompiledMethod);
  658. smalltalk.addMethod(
  659. unescape('_fn'),
  660. smalltalk.method({
  661. selector: unescape('fn'),
  662. category: 'accessing',
  663. fn: function () {
  664. var self = this;
  665. return smalltalk.send(self, "_basicAt_", ["fn"]);
  666. return self;
  667. },
  668. args: [],
  669. source: unescape('fn%0A%09%5Eself%20basicAt%3A%20%27fn%27'),
  670. messageSends: ["basicAt:"],
  671. referencedClasses: []
  672. }),
  673. smalltalk.CompiledMethod);
  674. smalltalk.addMethod(
  675. unescape('_fn_'),
  676. smalltalk.method({
  677. selector: unescape('fn%3A'),
  678. category: 'accessing',
  679. fn: function (aBlock) {
  680. var self = this;
  681. smalltalk.send(self, "_basicAt_put_", ["fn", aBlock]);
  682. return self;
  683. },
  684. args: ["aBlock"],
  685. source: unescape('fn%3A%20aBlock%0A%09self%20basicAt%3A%20%27fn%27%20put%3A%20aBlock'),
  686. messageSends: ["basicAt:put:"],
  687. referencedClasses: []
  688. }),
  689. smalltalk.CompiledMethod);
  690. smalltalk.addMethod(
  691. unescape('_messageSends'),
  692. smalltalk.method({
  693. selector: unescape('messageSends'),
  694. category: 'accessing',
  695. fn: function () {
  696. var self = this;
  697. return smalltalk.send(self, "_basicAt_", ["messageSends"]);
  698. return self;
  699. },
  700. args: [],
  701. source: unescape('messageSends%0A%09%5Eself%20basicAt%3A%20%27messageSends%27'),
  702. messageSends: ["basicAt:"],
  703. referencedClasses: []
  704. }),
  705. smalltalk.CompiledMethod);
  706. smalltalk.addMethod(
  707. unescape('_methodClass'),
  708. smalltalk.method({
  709. selector: unescape('methodClass'),
  710. category: 'accessing',
  711. fn: function () {
  712. var self = this;
  713. return smalltalk.send(self, "_basicAt_", ["methodClass"]);
  714. return self;
  715. },
  716. args: [],
  717. source: unescape('methodClass%0A%09%5Eself%20basicAt%3A%20%27methodClass%27'),
  718. messageSends: ["basicAt:"],
  719. referencedClasses: []
  720. }),
  721. smalltalk.CompiledMethod);
  722. smalltalk.addMethod(
  723. unescape('_referencedClasses'),
  724. smalltalk.method({
  725. selector: unescape('referencedClasses'),
  726. category: 'accessing',
  727. fn: function () {
  728. var self = this;
  729. return smalltalk.send(self, "_basicAt_", ["referencedClasses"]);
  730. return self;
  731. },
  732. args: [],
  733. source: unescape('referencedClasses%0A%09%5Eself%20basicAt%3A%20%27referencedClasses%27'),
  734. messageSends: ["basicAt:"],
  735. referencedClasses: []
  736. }),
  737. smalltalk.CompiledMethod);
  738. smalltalk.addMethod(
  739. unescape('_arguments'),
  740. smalltalk.method({
  741. selector: unescape('arguments'),
  742. category: 'accessing',
  743. fn: function () {
  744. var self = this;
  745. return self.args || [];
  746. return self;
  747. },
  748. args: [],
  749. source: unescape('arguments%0A%09%3Creturn%20self.args%20%7C%7C%20%5B%5D%3E'),
  750. messageSends: [],
  751. referencedClasses: []
  752. }),
  753. smalltalk.CompiledMethod);