Kernel-Exceptions.js 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. define(["amber/boot", "amber_core/Kernel-Objects"], function($boot){"use strict";
  2. var $core=$boot.api,nil=$boot.nil,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. if(!$boot.nilAsClass)$boot.nilAsClass=$boot.dnu;
  4. $core.addPackage('Kernel-Exceptions');
  5. $core.packages["Kernel-Exceptions"].innerEval = function (expr) { return eval(expr); };
  6. $core.packages["Kernel-Exceptions"].transport = {"type":"amd","amdNamespace":"amber_core"};
  7. $core.addClass('Error', $globals.Object, ['messageText'], 'Kernel-Exceptions');
  8. //>>excludeStart("ide", pragmas.excludeIdeData);
  9. $globals.Error.comment="From the ANSI standard:\x0a\x0aThis protocol describes the behavior of instances of class `Error`.\x0aThese are used to represent error conditions that prevent the normal continuation of processing.\x0aActual error exceptions used by an application may be subclasses of this class.\x0aAs `Error` is explicitly specified to be subclassable, conforming implementations must implement its behavior in a non-fragile manner.";
  10. //>>excludeEnd("ide");
  11. $core.addMethod(
  12. $core.method({
  13. selector: "beHandled",
  14. protocol: 'accessing',
  15. fn: function (){
  16. var self=this;
  17. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  18. return $core.withContext(function($ctx1) {
  19. //>>excludeEnd("ctx");
  20. self.amberHandled = true;
  21. return self;
  22. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  23. }, function($ctx1) {$ctx1.fill(self,"beHandled",{},$globals.Error)});
  24. //>>excludeEnd("ctx");
  25. },
  26. //>>excludeStart("ide", pragmas.excludeIdeData);
  27. args: [],
  28. source: "beHandled\x0a\x09<self.amberHandled = true>",
  29. referencedClasses: [],
  30. //>>excludeEnd("ide");
  31. messageSends: []
  32. }),
  33. $globals.Error);
  34. $core.addMethod(
  35. $core.method({
  36. selector: "beUnhandled",
  37. protocol: 'accessing',
  38. fn: function (){
  39. var self=this;
  40. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  41. return $core.withContext(function($ctx1) {
  42. //>>excludeEnd("ctx");
  43. self.amberHandled = false;
  44. return self;
  45. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  46. }, function($ctx1) {$ctx1.fill(self,"beUnhandled",{},$globals.Error)});
  47. //>>excludeEnd("ctx");
  48. },
  49. //>>excludeStart("ide", pragmas.excludeIdeData);
  50. args: [],
  51. source: "beUnhandled\x0a\x09<self.amberHandled = false>",
  52. referencedClasses: [],
  53. //>>excludeEnd("ide");
  54. messageSends: []
  55. }),
  56. $globals.Error);
  57. $core.addMethod(
  58. $core.method({
  59. selector: "context",
  60. protocol: 'accessing',
  61. fn: function (){
  62. var self=this;
  63. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  64. return $core.withContext(function($ctx1) {
  65. //>>excludeEnd("ctx");
  66. return self.context;
  67. return self;
  68. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  69. }, function($ctx1) {$ctx1.fill(self,"context",{},$globals.Error)});
  70. //>>excludeEnd("ctx");
  71. },
  72. //>>excludeStart("ide", pragmas.excludeIdeData);
  73. args: [],
  74. source: "context\x0a\x09<return self.context>",
  75. referencedClasses: [],
  76. //>>excludeEnd("ide");
  77. messageSends: []
  78. }),
  79. $globals.Error);
  80. $core.addMethod(
  81. $core.method({
  82. selector: "initialize",
  83. protocol: 'initialization',
  84. fn: function (){
  85. var self=this;
  86. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  87. return $core.withContext(function($ctx1) {
  88. //>>excludeEnd("ctx");
  89. self._messageText_("Errorclass: ".__comma($recv(self._class())._name()));
  90. return self;
  91. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  92. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Error)});
  93. //>>excludeEnd("ctx");
  94. },
  95. //>>excludeStart("ide", pragmas.excludeIdeData);
  96. args: [],
  97. source: "initialize\x0a\x09self messageText: 'Errorclass: ', (self class name).",
  98. referencedClasses: [],
  99. //>>excludeEnd("ide");
  100. messageSends: ["messageText:", ",", "name", "class"]
  101. }),
  102. $globals.Error);
  103. $core.addMethod(
  104. $core.method({
  105. selector: "isSmalltalkError",
  106. protocol: 'testing',
  107. fn: function (){
  108. var self=this;
  109. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  110. return $core.withContext(function($ctx1) {
  111. //>>excludeEnd("ctx");
  112. return self.smalltalkError === true;
  113. return self;
  114. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  115. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkError",{},$globals.Error)});
  116. //>>excludeEnd("ctx");
  117. },
  118. //>>excludeStart("ide", pragmas.excludeIdeData);
  119. args: [],
  120. source: "isSmalltalkError\x0a\x09<return self.smalltalkError === true>",
  121. referencedClasses: [],
  122. //>>excludeEnd("ide");
  123. messageSends: []
  124. }),
  125. $globals.Error);
  126. $core.addMethod(
  127. $core.method({
  128. selector: "jsStack",
  129. protocol: 'accessing',
  130. fn: function (){
  131. var self=this;
  132. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  133. return $core.withContext(function($ctx1) {
  134. //>>excludeEnd("ctx");
  135. return self.stack;
  136. return self;
  137. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  138. }, function($ctx1) {$ctx1.fill(self,"jsStack",{},$globals.Error)});
  139. //>>excludeEnd("ctx");
  140. },
  141. //>>excludeStart("ide", pragmas.excludeIdeData);
  142. args: [],
  143. source: "jsStack\x0a\x09<return self.stack>",
  144. referencedClasses: [],
  145. //>>excludeEnd("ide");
  146. messageSends: []
  147. }),
  148. $globals.Error);
  149. $core.addMethod(
  150. $core.method({
  151. selector: "messageText",
  152. protocol: 'accessing',
  153. fn: function (){
  154. var self=this;
  155. return self["@messageText"];
  156. },
  157. //>>excludeStart("ide", pragmas.excludeIdeData);
  158. args: [],
  159. source: "messageText\x0a\x09^ messageText",
  160. referencedClasses: [],
  161. //>>excludeEnd("ide");
  162. messageSends: []
  163. }),
  164. $globals.Error);
  165. $core.addMethod(
  166. $core.method({
  167. selector: "messageText:",
  168. protocol: 'accessing',
  169. fn: function (aString){
  170. var self=this;
  171. self["@messageText"]=aString;
  172. return self;
  173. },
  174. //>>excludeStart("ide", pragmas.excludeIdeData);
  175. args: ["aString"],
  176. source: "messageText: aString\x0a\x09messageText := aString",
  177. referencedClasses: [],
  178. //>>excludeEnd("ide");
  179. messageSends: []
  180. }),
  181. $globals.Error);
  182. $core.addMethod(
  183. $core.method({
  184. selector: "resignal",
  185. protocol: 'signaling',
  186. fn: function (){
  187. var self=this;
  188. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  189. return $core.withContext(function($ctx1) {
  190. //>>excludeEnd("ctx");
  191. self.amberHandled = false;
  192. throw(self);
  193. ;
  194. return self;
  195. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  196. }, function($ctx1) {$ctx1.fill(self,"resignal",{},$globals.Error)});
  197. //>>excludeEnd("ctx");
  198. },
  199. //>>excludeStart("ide", pragmas.excludeIdeData);
  200. args: [],
  201. source: "resignal\x0a\x09\x22Resignal the receiver without changing its exception context\x22\x0a\x09\x0a\x09<\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09throw(self);\x0a\x09>",
  202. referencedClasses: [],
  203. //>>excludeEnd("ide");
  204. messageSends: []
  205. }),
  206. $globals.Error);
  207. $core.addMethod(
  208. $core.method({
  209. selector: "signal",
  210. protocol: 'signaling',
  211. fn: function (){
  212. var self=this;
  213. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  214. return $core.withContext(function($ctx1) {
  215. //>>excludeEnd("ctx");
  216. self.amberHandled = false;
  217. self.context = $core.getThisContext();
  218. self.smalltalkError = true;
  219. throw self;
  220. ;
  221. return self;
  222. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  223. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error)});
  224. //>>excludeEnd("ctx");
  225. },
  226. //>>excludeStart("ide", pragmas.excludeIdeData);
  227. args: [],
  228. source: "signal\x0a\x09<\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09self.context = $core.getThisContext(); \x0a\x09\x09self.smalltalkError = true;\x0a\x09\x09throw self;\x0a\x09>",
  229. referencedClasses: [],
  230. //>>excludeEnd("ide");
  231. messageSends: []
  232. }),
  233. $globals.Error);
  234. $core.addMethod(
  235. $core.method({
  236. selector: "signal:",
  237. protocol: 'signaling',
  238. fn: function (aString){
  239. var self=this;
  240. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  241. return $core.withContext(function($ctx1) {
  242. //>>excludeEnd("ctx");
  243. self._messageText_(aString);
  244. self._signal();
  245. return self;
  246. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  247. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error)});
  248. //>>excludeEnd("ctx");
  249. },
  250. //>>excludeStart("ide", pragmas.excludeIdeData);
  251. args: ["aString"],
  252. source: "signal: aString\x0a\x09self messageText: aString.\x0a\x09self signal",
  253. referencedClasses: [],
  254. //>>excludeEnd("ide");
  255. messageSends: ["messageText:", "signal"]
  256. }),
  257. $globals.Error);
  258. $core.addMethod(
  259. $core.method({
  260. selector: "signalerContext",
  261. protocol: 'accessing',
  262. fn: function (){
  263. var self=this;
  264. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  265. return $core.withContext(function($ctx1) {
  266. //>>excludeEnd("ctx");
  267. return self._signalerContextFrom_(self._context());
  268. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  269. }, function($ctx1) {$ctx1.fill(self,"signalerContext",{},$globals.Error)});
  270. //>>excludeEnd("ctx");
  271. },
  272. //>>excludeStart("ide", pragmas.excludeIdeData);
  273. args: [],
  274. source: "signalerContext\x0a\x09^ self signalerContextFrom: self context",
  275. referencedClasses: [],
  276. //>>excludeEnd("ide");
  277. messageSends: ["signalerContextFrom:", "context"]
  278. }),
  279. $globals.Error);
  280. $core.addMethod(
  281. $core.method({
  282. selector: "signalerContextFrom:",
  283. protocol: 'accessing',
  284. fn: function (aContext){
  285. var self=this;
  286. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  287. return $core.withContext(function($ctx1) {
  288. //>>excludeEnd("ctx");
  289. var $3,$2,$1;
  290. return $recv(aContext)._findContextSuchThat_((function(context){
  291. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  292. return $core.withContext(function($ctx2) {
  293. //>>excludeEnd("ctx");
  294. $3=$recv(context)._receiver();
  295. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  296. $ctx2.sendIdx["receiver"]=1;
  297. //>>excludeEnd("ctx");
  298. $2=$recv($3).__eq_eq(self);
  299. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  300. $ctx2.sendIdx["=="]=1;
  301. //>>excludeEnd("ctx");
  302. $1=$recv($2)._or_((function(){
  303. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  304. return $core.withContext(function($ctx3) {
  305. //>>excludeEnd("ctx");
  306. return $recv($recv(context)._receiver()).__eq_eq(self._class());
  307. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  308. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  309. //>>excludeEnd("ctx");
  310. }));
  311. return $recv($1)._not();
  312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  313. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  314. //>>excludeEnd("ctx");
  315. }));
  316. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  317. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Error)});
  318. //>>excludeEnd("ctx");
  319. },
  320. //>>excludeStart("ide", pragmas.excludeIdeData);
  321. args: ["aContext"],
  322. source: "signalerContextFrom: aContext\x0a\x09\x22Find the first sender of signal(:), the first context which is neither \x0a\x09for an instance method nor for a class side method of Exception (or subclass).\x0a\x09This will make sure that the same context is found for both, `Error signal` \x0a\x09and `Error new signal`\x22\x0a\x0a\x09^ aContext findContextSuchThat: [ :context |\x0a\x09\x09(context receiver == self \x0a\x09\x09or: [ context receiver == self class ]) not ]",
  323. referencedClasses: [],
  324. //>>excludeEnd("ide");
  325. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class"]
  326. }),
  327. $globals.Error);
  328. $core.addMethod(
  329. $core.method({
  330. selector: "wasHandled",
  331. protocol: 'testing',
  332. fn: function (){
  333. var self=this;
  334. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  335. return $core.withContext(function($ctx1) {
  336. //>>excludeEnd("ctx");
  337. return self.amberHandled || false;
  338. return self;
  339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  340. }, function($ctx1) {$ctx1.fill(self,"wasHandled",{},$globals.Error)});
  341. //>>excludeEnd("ctx");
  342. },
  343. //>>excludeStart("ide", pragmas.excludeIdeData);
  344. args: [],
  345. source: "wasHandled\x0a\x09<return self.amberHandled || false>",
  346. referencedClasses: [],
  347. //>>excludeEnd("ide");
  348. messageSends: []
  349. }),
  350. $globals.Error);
  351. $core.addMethod(
  352. $core.method({
  353. selector: "classTag",
  354. protocol: 'accessing',
  355. fn: function (){
  356. var self=this;
  357. return "exception";
  358. },
  359. //>>excludeStart("ide", pragmas.excludeIdeData);
  360. args: [],
  361. source: "classTag\x0a\x09\x22Returns a tag or general category for this class.\x0a\x09Typically used to help tools do some reflection.\x0a\x09Helios, for example, uses this to decide what icon the class should display.\x22\x0a\x09\x0a\x09^ 'exception'",
  362. referencedClasses: [],
  363. //>>excludeEnd("ide");
  364. messageSends: []
  365. }),
  366. $globals.Error.klass);
  367. $core.addMethod(
  368. $core.method({
  369. selector: "signal",
  370. protocol: 'instance creation',
  371. fn: function (){
  372. var self=this;
  373. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  374. return $core.withContext(function($ctx1) {
  375. //>>excludeEnd("ctx");
  376. return $recv(self._new())._signal();
  377. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  378. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error.klass)});
  379. //>>excludeEnd("ctx");
  380. },
  381. //>>excludeStart("ide", pragmas.excludeIdeData);
  382. args: [],
  383. source: "signal\x0a\x09^ self new signal",
  384. referencedClasses: [],
  385. //>>excludeEnd("ide");
  386. messageSends: ["signal", "new"]
  387. }),
  388. $globals.Error.klass);
  389. $core.addMethod(
  390. $core.method({
  391. selector: "signal:",
  392. protocol: 'instance creation',
  393. fn: function (aString){
  394. var self=this;
  395. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  396. return $core.withContext(function($ctx1) {
  397. //>>excludeEnd("ctx");
  398. return $recv(self._new())._signal_(aString);
  399. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  400. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error.klass)});
  401. //>>excludeEnd("ctx");
  402. },
  403. //>>excludeStart("ide", pragmas.excludeIdeData);
  404. args: ["aString"],
  405. source: "signal: aString\x0a\x09^ self new\x0a\x09\x09signal: aString",
  406. referencedClasses: [],
  407. //>>excludeEnd("ide");
  408. messageSends: ["signal:", "new"]
  409. }),
  410. $globals.Error.klass);
  411. $core.addClass('Halt', $globals.Error, [], 'Kernel-Exceptions');
  412. //>>excludeStart("ide", pragmas.excludeIdeData);
  413. $globals.Halt.comment="I am provided to support `Object>>#halt`.";
  414. //>>excludeEnd("ide");
  415. $core.addMethod(
  416. $core.method({
  417. selector: "messageText",
  418. protocol: 'accessing',
  419. fn: function (){
  420. var self=this;
  421. return "Halt encountered";
  422. },
  423. //>>excludeStart("ide", pragmas.excludeIdeData);
  424. args: [],
  425. source: "messageText\x0a\x09^ 'Halt encountered'",
  426. referencedClasses: [],
  427. //>>excludeEnd("ide");
  428. messageSends: []
  429. }),
  430. $globals.Halt);
  431. $core.addMethod(
  432. $core.method({
  433. selector: "signalerContextFrom:",
  434. protocol: 'accessing',
  435. fn: function (aContext){
  436. var self=this;
  437. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  438. return $core.withContext(function($ctx1) {
  439. //>>excludeEnd("ctx");
  440. var $3,$2,$1;
  441. return $recv(aContext)._findContextSuchThat_((function(context){
  442. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  443. return $core.withContext(function($ctx2) {
  444. //>>excludeEnd("ctx");
  445. $3=$recv(context)._receiver();
  446. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  447. $ctx2.sendIdx["receiver"]=1;
  448. //>>excludeEnd("ctx");
  449. $2=$recv($3).__eq_eq(self);
  450. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  451. $ctx2.sendIdx["=="]=1;
  452. //>>excludeEnd("ctx");
  453. $1=$recv($2)._or_((function(){
  454. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  455. return $core.withContext(function($ctx3) {
  456. //>>excludeEnd("ctx");
  457. return $recv($recv($recv(context)._receiver()).__eq_eq(self._class()))._or_((function(){
  458. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  459. return $core.withContext(function($ctx4) {
  460. //>>excludeEnd("ctx");
  461. return $recv($recv($recv(context)._method())._selector()).__eq("halt");
  462. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  463. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  464. //>>excludeEnd("ctx");
  465. }));
  466. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  467. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  468. //>>excludeEnd("ctx");
  469. }));
  470. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  471. $ctx2.sendIdx["or:"]=1;
  472. //>>excludeEnd("ctx");
  473. return $recv($1)._not();
  474. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  475. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  476. //>>excludeEnd("ctx");
  477. }));
  478. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  479. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Halt)});
  480. //>>excludeEnd("ctx");
  481. },
  482. //>>excludeStart("ide", pragmas.excludeIdeData);
  483. args: ["aContext"],
  484. source: "signalerContextFrom: aContext\x0a\x09\x22specialized version to find the proper context to open the debugger on.\x0a\x09This will find the first context whose method is no longer on `Halt` or \x0a\x09`Halt class` nor is `#halt` method itself.\x22\x0a\x09\x0a\x09^ aContext findContextSuchThat: [ :context |\x0a\x09\x09(context receiver == self \x0a\x09\x09or: [ (context receiver == self class) \x0a\x09\x09or: [ context method selector = #halt ]]) not ]",
  485. referencedClasses: [],
  486. //>>excludeEnd("ide");
  487. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class", "=", "selector", "method"]
  488. }),
  489. $globals.Halt);
  490. $core.addClass('JavaScriptException', $globals.Error, ['exception'], 'Kernel-Exceptions');
  491. //>>excludeStart("ide", pragmas.excludeIdeData);
  492. $globals.JavaScriptException.comment="A JavaScriptException is thrown when a non-Smalltalk exception occurs while in the Smalltalk stack.\x0aSee `boot.js` `inContext()` and `BlockClosure >> on:do:`";
  493. //>>excludeEnd("ide");
  494. $core.addMethod(
  495. $core.method({
  496. selector: "context:",
  497. protocol: 'accessing',
  498. fn: function (aMethodContext){
  499. var self=this;
  500. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  501. return $core.withContext(function($ctx1) {
  502. //>>excludeEnd("ctx");
  503. self.context = aMethodContext;
  504. return self;
  505. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  506. }, function($ctx1) {$ctx1.fill(self,"context:",{aMethodContext:aMethodContext},$globals.JavaScriptException)});
  507. //>>excludeEnd("ctx");
  508. },
  509. //>>excludeStart("ide", pragmas.excludeIdeData);
  510. args: ["aMethodContext"],
  511. source: "context: aMethodContext\x0a\x09\x22Set the context from the outside.\x0a\x09See boot.js `inContext()` exception handling\x22\x0a\x09\x0a\x09<self.context = aMethodContext>",
  512. referencedClasses: [],
  513. //>>excludeEnd("ide");
  514. messageSends: []
  515. }),
  516. $globals.JavaScriptException);
  517. $core.addMethod(
  518. $core.method({
  519. selector: "exception",
  520. protocol: 'accessing',
  521. fn: function (){
  522. var self=this;
  523. return self["@exception"];
  524. },
  525. //>>excludeStart("ide", pragmas.excludeIdeData);
  526. args: [],
  527. source: "exception\x0a\x09^ exception",
  528. referencedClasses: [],
  529. //>>excludeEnd("ide");
  530. messageSends: []
  531. }),
  532. $globals.JavaScriptException);
  533. $core.addMethod(
  534. $core.method({
  535. selector: "exception:",
  536. protocol: 'accessing',
  537. fn: function (anException){
  538. var self=this;
  539. self["@exception"]=anException;
  540. return self;
  541. },
  542. //>>excludeStart("ide", pragmas.excludeIdeData);
  543. args: ["anException"],
  544. source: "exception: anException\x0a\x09exception := anException",
  545. referencedClasses: [],
  546. //>>excludeEnd("ide");
  547. messageSends: []
  548. }),
  549. $globals.JavaScriptException);
  550. $core.addMethod(
  551. $core.method({
  552. selector: "messageText",
  553. protocol: 'accessing',
  554. fn: function (){
  555. var self=this;
  556. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  557. return $core.withContext(function($ctx1) {
  558. //>>excludeEnd("ctx");
  559. return 'JavaScript exception: ' + self["@exception"].toString();
  560. return self;
  561. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  562. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.JavaScriptException)});
  563. //>>excludeEnd("ctx");
  564. },
  565. //>>excludeStart("ide", pragmas.excludeIdeData);
  566. args: [],
  567. source: "messageText\x0a\x09<return 'JavaScript exception: ' + self[\x22@exception\x22].toString()>",
  568. referencedClasses: [],
  569. //>>excludeEnd("ide");
  570. messageSends: []
  571. }),
  572. $globals.JavaScriptException);
  573. $core.addMethod(
  574. $core.method({
  575. selector: "on:",
  576. protocol: 'instance creation',
  577. fn: function (anException){
  578. var self=this;
  579. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  580. return $core.withContext(function($ctx1) {
  581. //>>excludeEnd("ctx");
  582. var $1;
  583. $1=self._new();
  584. $recv($1)._exception_(anException);
  585. return $recv($1)._yourself();
  586. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  587. }, function($ctx1) {$ctx1.fill(self,"on:",{anException:anException},$globals.JavaScriptException.klass)});
  588. //>>excludeEnd("ctx");
  589. },
  590. //>>excludeStart("ide", pragmas.excludeIdeData);
  591. args: ["anException"],
  592. source: "on: anException\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09yourself",
  593. referencedClasses: [],
  594. //>>excludeEnd("ide");
  595. messageSends: ["exception:", "new", "yourself"]
  596. }),
  597. $globals.JavaScriptException.klass);
  598. $core.addMethod(
  599. $core.method({
  600. selector: "on:context:",
  601. protocol: 'instance creation',
  602. fn: function (anException,aMethodContext){
  603. var self=this;
  604. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  605. return $core.withContext(function($ctx1) {
  606. //>>excludeEnd("ctx");
  607. var $1;
  608. $1=self._new();
  609. $recv($1)._exception_(anException);
  610. $recv($1)._context_(aMethodContext);
  611. return $recv($1)._yourself();
  612. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  613. }, function($ctx1) {$ctx1.fill(self,"on:context:",{anException:anException,aMethodContext:aMethodContext},$globals.JavaScriptException.klass)});
  614. //>>excludeEnd("ctx");
  615. },
  616. //>>excludeStart("ide", pragmas.excludeIdeData);
  617. args: ["anException", "aMethodContext"],
  618. source: "on: anException context: aMethodContext\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09context: aMethodContext;\x0a\x09\x09yourself",
  619. referencedClasses: [],
  620. //>>excludeEnd("ide");
  621. messageSends: ["exception:", "new", "context:", "yourself"]
  622. }),
  623. $globals.JavaScriptException.klass);
  624. $core.addClass('MessageNotUnderstood', $globals.Error, ['message', 'receiver'], 'Kernel-Exceptions');
  625. //>>excludeStart("ide", pragmas.excludeIdeData);
  626. $globals.MessageNotUnderstood.comment="This exception is provided to support `Object>>doesNotUnderstand:`.";
  627. //>>excludeEnd("ide");
  628. $core.addMethod(
  629. $core.method({
  630. selector: "message",
  631. protocol: 'accessing',
  632. fn: function (){
  633. var self=this;
  634. return self["@message"];
  635. },
  636. //>>excludeStart("ide", pragmas.excludeIdeData);
  637. args: [],
  638. source: "message\x0a\x09^ message",
  639. referencedClasses: [],
  640. //>>excludeEnd("ide");
  641. messageSends: []
  642. }),
  643. $globals.MessageNotUnderstood);
  644. $core.addMethod(
  645. $core.method({
  646. selector: "message:",
  647. protocol: 'accessing',
  648. fn: function (aMessage){
  649. var self=this;
  650. self["@message"]=aMessage;
  651. return self;
  652. },
  653. //>>excludeStart("ide", pragmas.excludeIdeData);
  654. args: ["aMessage"],
  655. source: "message: aMessage\x0a\x09message := aMessage",
  656. referencedClasses: [],
  657. //>>excludeEnd("ide");
  658. messageSends: []
  659. }),
  660. $globals.MessageNotUnderstood);
  661. $core.addMethod(
  662. $core.method({
  663. selector: "messageText",
  664. protocol: 'accessing',
  665. fn: function (){
  666. var self=this;
  667. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  668. return $core.withContext(function($ctx1) {
  669. //>>excludeEnd("ctx");
  670. var $1;
  671. $1=$recv($recv($recv(self._receiver())._asString()).__comma(" does not understand #")).__comma($recv(self._message())._selector());
  672. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  673. $ctx1.sendIdx[","]=1;
  674. //>>excludeEnd("ctx");
  675. return $1;
  676. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  677. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.MessageNotUnderstood)});
  678. //>>excludeEnd("ctx");
  679. },
  680. //>>excludeStart("ide", pragmas.excludeIdeData);
  681. args: [],
  682. source: "messageText\x0a\x09^ self receiver asString, ' does not understand #', self message selector",
  683. referencedClasses: [],
  684. //>>excludeEnd("ide");
  685. messageSends: [",", "asString", "receiver", "selector", "message"]
  686. }),
  687. $globals.MessageNotUnderstood);
  688. $core.addMethod(
  689. $core.method({
  690. selector: "receiver",
  691. protocol: 'accessing',
  692. fn: function (){
  693. var self=this;
  694. return self["@receiver"];
  695. },
  696. //>>excludeStart("ide", pragmas.excludeIdeData);
  697. args: [],
  698. source: "receiver\x0a\x09^ receiver",
  699. referencedClasses: [],
  700. //>>excludeEnd("ide");
  701. messageSends: []
  702. }),
  703. $globals.MessageNotUnderstood);
  704. $core.addMethod(
  705. $core.method({
  706. selector: "receiver:",
  707. protocol: 'accessing',
  708. fn: function (anObject){
  709. var self=this;
  710. self["@receiver"]=anObject;
  711. return self;
  712. },
  713. //>>excludeStart("ide", pragmas.excludeIdeData);
  714. args: ["anObject"],
  715. source: "receiver: anObject\x0a\x09receiver := anObject",
  716. referencedClasses: [],
  717. //>>excludeEnd("ide");
  718. messageSends: []
  719. }),
  720. $globals.MessageNotUnderstood);
  721. $core.addClass('NonBooleanReceiver', $globals.Error, ['object'], 'Kernel-Exceptions');
  722. //>>excludeStart("ide", pragmas.excludeIdeData);
  723. $globals.NonBooleanReceiver.comment="NonBooleanReceiver exceptions may be thrown when executing inlined methods such as `#ifTrue:` with a non boolean receiver.";
  724. //>>excludeEnd("ide");
  725. $core.addMethod(
  726. $core.method({
  727. selector: "object",
  728. protocol: 'accessing',
  729. fn: function (){
  730. var self=this;
  731. return self["@object"];
  732. },
  733. //>>excludeStart("ide", pragmas.excludeIdeData);
  734. args: [],
  735. source: "object\x0a\x09^ object",
  736. referencedClasses: [],
  737. //>>excludeEnd("ide");
  738. messageSends: []
  739. }),
  740. $globals.NonBooleanReceiver);
  741. $core.addMethod(
  742. $core.method({
  743. selector: "object:",
  744. protocol: 'accessing',
  745. fn: function (anObject){
  746. var self=this;
  747. self["@object"]=anObject;
  748. return self;
  749. },
  750. //>>excludeStart("ide", pragmas.excludeIdeData);
  751. args: ["anObject"],
  752. source: "object: anObject\x0a\x09object := anObject",
  753. referencedClasses: [],
  754. //>>excludeEnd("ide");
  755. messageSends: []
  756. }),
  757. $globals.NonBooleanReceiver);
  758. });