Kernel-Exceptions.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954
  1. define(["amber/boot", "require", "amber/core/Kernel-Objects"], function($boot,requirejs){"use strict";
  2. var $core=$boot.api,nil=$boot.nilAsValue,$nil=$boot.nilAsReceiver,$recv=$boot.asReceiver,$globals=$boot.globals;
  3. var $pkg = $core.addPackage("Kernel-Exceptions");
  4. $pkg.innerEval = function (expr) { return eval(expr); };
  5. $pkg.transport = {"type":"amd","amdNamespace":"amber/core"};
  6. $core.addClass("Error", $globals.Object, ["messageText"], "Kernel-Exceptions");
  7. //>>excludeStart("ide", pragmas.excludeIdeData);
  8. $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.";
  9. //>>excludeEnd("ide");
  10. $core.addMethod(
  11. $core.method({
  12. selector: "beHandled",
  13. protocol: "accessing",
  14. fn: function (){
  15. var self=this,$self=this;
  16. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  17. return $core.withContext(function($ctx1) {
  18. //>>excludeEnd("ctx");
  19. self.amberHandled = true;
  20. return self;
  21. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  22. }, function($ctx1) {$ctx1.fill(self,"beHandled",{},$globals.Error)});
  23. //>>excludeEnd("ctx");
  24. },
  25. //>>excludeStart("ide", pragmas.excludeIdeData);
  26. args: [],
  27. source: "beHandled\x0a\x09<inlineJS: 'self.amberHandled = true'>",
  28. referencedClasses: [],
  29. //>>excludeEnd("ide");
  30. messageSends: []
  31. }),
  32. $globals.Error);
  33. $core.addMethod(
  34. $core.method({
  35. selector: "beUnhandled",
  36. protocol: "accessing",
  37. fn: function (){
  38. var self=this,$self=this;
  39. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  40. return $core.withContext(function($ctx1) {
  41. //>>excludeEnd("ctx");
  42. self.amberHandled = false;
  43. return self;
  44. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  45. }, function($ctx1) {$ctx1.fill(self,"beUnhandled",{},$globals.Error)});
  46. //>>excludeEnd("ctx");
  47. },
  48. //>>excludeStart("ide", pragmas.excludeIdeData);
  49. args: [],
  50. source: "beUnhandled\x0a\x09<inlineJS: 'self.amberHandled = false'>",
  51. referencedClasses: [],
  52. //>>excludeEnd("ide");
  53. messageSends: []
  54. }),
  55. $globals.Error);
  56. $core.addMethod(
  57. $core.method({
  58. selector: "context",
  59. protocol: "accessing",
  60. fn: function (){
  61. var self=this,$self=this;
  62. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  63. return $core.withContext(function($ctx1) {
  64. //>>excludeEnd("ctx");
  65. return self.context;
  66. return self;
  67. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  68. }, function($ctx1) {$ctx1.fill(self,"context",{},$globals.Error)});
  69. //>>excludeEnd("ctx");
  70. },
  71. //>>excludeStart("ide", pragmas.excludeIdeData);
  72. args: [],
  73. source: "context\x0a\x09<inlineJS: 'return self.context'>",
  74. referencedClasses: [],
  75. //>>excludeEnd("ide");
  76. messageSends: []
  77. }),
  78. $globals.Error);
  79. $core.addMethod(
  80. $core.method({
  81. selector: "initialize",
  82. protocol: "initialization",
  83. fn: function (){
  84. var self=this,$self=this;
  85. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  86. return $core.withContext(function($ctx1) {
  87. //>>excludeEnd("ctx");
  88. $self._messageText_("Errorclass: ".__comma($recv($self._class())._name()));
  89. return self;
  90. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  91. }, function($ctx1) {$ctx1.fill(self,"initialize",{},$globals.Error)});
  92. //>>excludeEnd("ctx");
  93. },
  94. //>>excludeStart("ide", pragmas.excludeIdeData);
  95. args: [],
  96. source: "initialize\x0a\x09self messageText: 'Errorclass: ', (self class name).",
  97. referencedClasses: [],
  98. //>>excludeEnd("ide");
  99. messageSends: ["messageText:", ",", "name", "class"]
  100. }),
  101. $globals.Error);
  102. $core.addMethod(
  103. $core.method({
  104. selector: "isSmalltalkError",
  105. protocol: "testing",
  106. fn: function (){
  107. var self=this,$self=this;
  108. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  109. return $core.withContext(function($ctx1) {
  110. //>>excludeEnd("ctx");
  111. return self.smalltalkError === true;
  112. return self;
  113. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  114. }, function($ctx1) {$ctx1.fill(self,"isSmalltalkError",{},$globals.Error)});
  115. //>>excludeEnd("ctx");
  116. },
  117. //>>excludeStart("ide", pragmas.excludeIdeData);
  118. args: [],
  119. source: "isSmalltalkError\x0a\x09<inlineJS: 'return self.smalltalkError === true'>",
  120. referencedClasses: [],
  121. //>>excludeEnd("ide");
  122. messageSends: []
  123. }),
  124. $globals.Error);
  125. $core.addMethod(
  126. $core.method({
  127. selector: "jsStack",
  128. protocol: "accessing",
  129. fn: function (){
  130. var self=this,$self=this;
  131. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  132. return $core.withContext(function($ctx1) {
  133. //>>excludeEnd("ctx");
  134. return self.stack;
  135. return self;
  136. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  137. }, function($ctx1) {$ctx1.fill(self,"jsStack",{},$globals.Error)});
  138. //>>excludeEnd("ctx");
  139. },
  140. //>>excludeStart("ide", pragmas.excludeIdeData);
  141. args: [],
  142. source: "jsStack\x0a\x09<inlineJS: 'return self.stack'>",
  143. referencedClasses: [],
  144. //>>excludeEnd("ide");
  145. messageSends: []
  146. }),
  147. $globals.Error);
  148. $core.addMethod(
  149. $core.method({
  150. selector: "messageText",
  151. protocol: "accessing",
  152. fn: function (){
  153. var self=this,$self=this;
  154. return $self["@messageText"];
  155. },
  156. //>>excludeStart("ide", pragmas.excludeIdeData);
  157. args: [],
  158. source: "messageText\x0a\x09^ messageText",
  159. referencedClasses: [],
  160. //>>excludeEnd("ide");
  161. messageSends: []
  162. }),
  163. $globals.Error);
  164. $core.addMethod(
  165. $core.method({
  166. selector: "messageText:",
  167. protocol: "accessing",
  168. fn: function (aString){
  169. var self=this,$self=this;
  170. $self["@messageText"]=aString;
  171. return self;
  172. },
  173. //>>excludeStart("ide", pragmas.excludeIdeData);
  174. args: ["aString"],
  175. source: "messageText: aString\x0a\x09messageText := aString",
  176. referencedClasses: [],
  177. //>>excludeEnd("ide");
  178. messageSends: []
  179. }),
  180. $globals.Error);
  181. $core.addMethod(
  182. $core.method({
  183. selector: "outer",
  184. protocol: "signaling",
  185. fn: function (){
  186. var self=this,$self=this;
  187. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  188. return $core.withContext(function($ctx1) {
  189. //>>excludeEnd("ctx");
  190. return $self._pass();
  191. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  192. }, function($ctx1) {$ctx1.fill(self,"outer",{},$globals.Error)});
  193. //>>excludeEnd("ctx");
  194. },
  195. //>>excludeStart("ide", pragmas.excludeIdeData);
  196. args: [],
  197. source: "outer\x0a\x09\x22Pharo compatibility. Just sends #pass.\x22\x0a\x09\x0a\x09^ self pass",
  198. referencedClasses: [],
  199. //>>excludeEnd("ide");
  200. messageSends: ["pass"]
  201. }),
  202. $globals.Error);
  203. $core.addMethod(
  204. $core.method({
  205. selector: "pass",
  206. protocol: "signaling",
  207. fn: function (){
  208. var self=this,$self=this;
  209. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  210. return $core.withContext(function($ctx1) {
  211. //>>excludeEnd("ctx");
  212. self.amberHandled = false;
  213. throw self;
  214. ;
  215. return self;
  216. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  217. }, function($ctx1) {$ctx1.fill(self,"pass",{},$globals.Error)});
  218. //>>excludeEnd("ctx");
  219. },
  220. //>>excludeStart("ide", pragmas.excludeIdeData);
  221. args: [],
  222. source: "pass\x0a\x09\x22Let outer handler take care of this.\x22\x0a\x09\x0a\x09<inlineJS: '\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09throw self;\x0a\x09'>",
  223. referencedClasses: [],
  224. //>>excludeEnd("ide");
  225. messageSends: []
  226. }),
  227. $globals.Error);
  228. $core.addMethod(
  229. $core.method({
  230. selector: "resignal",
  231. protocol: "signaling",
  232. fn: function (){
  233. var self=this,$self=this;
  234. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  235. return $core.withContext(function($ctx1) {
  236. //>>excludeEnd("ctx");
  237. $self._deprecatedAPI_("Use #pass.");
  238. return $self._pass();
  239. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  240. }, function($ctx1) {$ctx1.fill(self,"resignal",{},$globals.Error)});
  241. //>>excludeEnd("ctx");
  242. },
  243. //>>excludeStart("ide", pragmas.excludeIdeData);
  244. args: [],
  245. source: "resignal\x0a\x09self deprecatedAPI: 'Use #pass.'.\x0a\x09^ self pass",
  246. referencedClasses: [],
  247. //>>excludeEnd("ide");
  248. messageSends: ["deprecatedAPI:", "pass"]
  249. }),
  250. $globals.Error);
  251. $core.addMethod(
  252. $core.method({
  253. selector: "signal",
  254. protocol: "signaling",
  255. fn: function (){
  256. var self=this,$self=this;
  257. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  258. return $core.withContext(function($ctx1) {
  259. //>>excludeEnd("ctx");
  260. self.amberHandled = false;
  261. self.context = $core.getThisContext();
  262. self.smalltalkError = true;
  263. throw self;
  264. ;
  265. return self;
  266. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  267. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error)});
  268. //>>excludeEnd("ctx");
  269. },
  270. //>>excludeStart("ide", pragmas.excludeIdeData);
  271. args: [],
  272. source: "signal\x0a\x09<inlineJS: '\x0a\x09\x09self.amberHandled = false;\x0a\x09\x09self.context = $core.getThisContext(); \x0a\x09\x09self.smalltalkError = true;\x0a\x09\x09throw self;\x0a\x09'>",
  273. referencedClasses: [],
  274. //>>excludeEnd("ide");
  275. messageSends: []
  276. }),
  277. $globals.Error);
  278. $core.addMethod(
  279. $core.method({
  280. selector: "signal:",
  281. protocol: "signaling",
  282. fn: function (aString){
  283. var self=this,$self=this;
  284. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  285. return $core.withContext(function($ctx1) {
  286. //>>excludeEnd("ctx");
  287. $self._messageText_(aString);
  288. $self._signal();
  289. return self;
  290. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  291. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error)});
  292. //>>excludeEnd("ctx");
  293. },
  294. //>>excludeStart("ide", pragmas.excludeIdeData);
  295. args: ["aString"],
  296. source: "signal: aString\x0a\x09self messageText: aString.\x0a\x09self signal",
  297. referencedClasses: [],
  298. //>>excludeEnd("ide");
  299. messageSends: ["messageText:", "signal"]
  300. }),
  301. $globals.Error);
  302. $core.addMethod(
  303. $core.method({
  304. selector: "signalerContext",
  305. protocol: "accessing",
  306. fn: function (){
  307. var self=this,$self=this;
  308. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  309. return $core.withContext(function($ctx1) {
  310. //>>excludeEnd("ctx");
  311. return $self._signalerContextFrom_($self._context());
  312. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  313. }, function($ctx1) {$ctx1.fill(self,"signalerContext",{},$globals.Error)});
  314. //>>excludeEnd("ctx");
  315. },
  316. //>>excludeStart("ide", pragmas.excludeIdeData);
  317. args: [],
  318. source: "signalerContext\x0a\x09^ self signalerContextFrom: self context",
  319. referencedClasses: [],
  320. //>>excludeEnd("ide");
  321. messageSends: ["signalerContextFrom:", "context"]
  322. }),
  323. $globals.Error);
  324. $core.addMethod(
  325. $core.method({
  326. selector: "signalerContextFrom:",
  327. protocol: "accessing",
  328. fn: function (aContext){
  329. var self=this,$self=this;
  330. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  331. return $core.withContext(function($ctx1) {
  332. //>>excludeEnd("ctx");
  333. var $3,$2,$1;
  334. return $recv(aContext)._findContextSuchThat_((function(context){
  335. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  336. return $core.withContext(function($ctx2) {
  337. //>>excludeEnd("ctx");
  338. $3=$recv(context)._receiver();
  339. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  340. $ctx2.sendIdx["receiver"]=1;
  341. //>>excludeEnd("ctx");
  342. $2=$recv($3).__eq_eq(self);
  343. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  344. $ctx2.sendIdx["=="]=1;
  345. //>>excludeEnd("ctx");
  346. $1=$recv($2)._or_((function(){
  347. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  348. return $core.withContext(function($ctx3) {
  349. //>>excludeEnd("ctx");
  350. return $recv($recv(context)._receiver()).__eq_eq($self._class());
  351. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  352. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  353. //>>excludeEnd("ctx");
  354. }));
  355. return $recv($1)._not();
  356. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  357. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  358. //>>excludeEnd("ctx");
  359. }));
  360. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  361. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Error)});
  362. //>>excludeEnd("ctx");
  363. },
  364. //>>excludeStart("ide", pragmas.excludeIdeData);
  365. args: ["aContext"],
  366. 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 ]",
  367. referencedClasses: [],
  368. //>>excludeEnd("ide");
  369. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class"]
  370. }),
  371. $globals.Error);
  372. $core.addMethod(
  373. $core.method({
  374. selector: "wasHandled",
  375. protocol: "testing",
  376. fn: function (){
  377. var self=this,$self=this;
  378. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  379. return $core.withContext(function($ctx1) {
  380. //>>excludeEnd("ctx");
  381. return self.amberHandled || false;
  382. return self;
  383. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  384. }, function($ctx1) {$ctx1.fill(self,"wasHandled",{},$globals.Error)});
  385. //>>excludeEnd("ctx");
  386. },
  387. //>>excludeStart("ide", pragmas.excludeIdeData);
  388. args: [],
  389. source: "wasHandled\x0a\x09<inlineJS: 'return self.amberHandled || false'>",
  390. referencedClasses: [],
  391. //>>excludeEnd("ide");
  392. messageSends: []
  393. }),
  394. $globals.Error);
  395. $core.addMethod(
  396. $core.method({
  397. selector: "classTag",
  398. protocol: "accessing",
  399. fn: function (){
  400. var self=this,$self=this;
  401. return "exception";
  402. },
  403. //>>excludeStart("ide", pragmas.excludeIdeData);
  404. args: [],
  405. 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'",
  406. referencedClasses: [],
  407. //>>excludeEnd("ide");
  408. messageSends: []
  409. }),
  410. $globals.Error.a$cls);
  411. $core.addMethod(
  412. $core.method({
  413. selector: "signal",
  414. protocol: "instance creation",
  415. fn: function (){
  416. var self=this,$self=this;
  417. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  418. return $core.withContext(function($ctx1) {
  419. //>>excludeEnd("ctx");
  420. return $recv($self._new())._signal();
  421. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  422. }, function($ctx1) {$ctx1.fill(self,"signal",{},$globals.Error.a$cls)});
  423. //>>excludeEnd("ctx");
  424. },
  425. //>>excludeStart("ide", pragmas.excludeIdeData);
  426. args: [],
  427. source: "signal\x0a\x09^ self new signal",
  428. referencedClasses: [],
  429. //>>excludeEnd("ide");
  430. messageSends: ["signal", "new"]
  431. }),
  432. $globals.Error.a$cls);
  433. $core.addMethod(
  434. $core.method({
  435. selector: "signal:",
  436. protocol: "instance creation",
  437. fn: function (aString){
  438. var self=this,$self=this;
  439. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  440. return $core.withContext(function($ctx1) {
  441. //>>excludeEnd("ctx");
  442. return $recv($self._new())._signal_(aString);
  443. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  444. }, function($ctx1) {$ctx1.fill(self,"signal:",{aString:aString},$globals.Error.a$cls)});
  445. //>>excludeEnd("ctx");
  446. },
  447. //>>excludeStart("ide", pragmas.excludeIdeData);
  448. args: ["aString"],
  449. source: "signal: aString\x0a\x09^ self new\x0a\x09\x09signal: aString",
  450. referencedClasses: [],
  451. //>>excludeEnd("ide");
  452. messageSends: ["signal:", "new"]
  453. }),
  454. $globals.Error.a$cls);
  455. $core.addClass("Halt", $globals.Error, [], "Kernel-Exceptions");
  456. //>>excludeStart("ide", pragmas.excludeIdeData);
  457. $globals.Halt.comment="I am provided to support `Object>>#halt`.";
  458. //>>excludeEnd("ide");
  459. $core.addMethod(
  460. $core.method({
  461. selector: "messageText",
  462. protocol: "accessing",
  463. fn: function (){
  464. var self=this,$self=this;
  465. return "Halt encountered";
  466. },
  467. //>>excludeStart("ide", pragmas.excludeIdeData);
  468. args: [],
  469. source: "messageText\x0a\x09^ 'Halt encountered'",
  470. referencedClasses: [],
  471. //>>excludeEnd("ide");
  472. messageSends: []
  473. }),
  474. $globals.Halt);
  475. $core.addMethod(
  476. $core.method({
  477. selector: "signalerContextFrom:",
  478. protocol: "accessing",
  479. fn: function (aContext){
  480. var self=this,$self=this;
  481. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  482. return $core.withContext(function($ctx1) {
  483. //>>excludeEnd("ctx");
  484. var $3,$2,$1;
  485. return $recv(aContext)._findContextSuchThat_((function(context){
  486. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  487. return $core.withContext(function($ctx2) {
  488. //>>excludeEnd("ctx");
  489. $3=$recv(context)._receiver();
  490. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  491. $ctx2.sendIdx["receiver"]=1;
  492. //>>excludeEnd("ctx");
  493. $2=$recv($3).__eq_eq(self);
  494. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  495. $ctx2.sendIdx["=="]=1;
  496. //>>excludeEnd("ctx");
  497. $1=$recv($2)._or_((function(){
  498. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  499. return $core.withContext(function($ctx3) {
  500. //>>excludeEnd("ctx");
  501. return $recv($recv($recv(context)._receiver()).__eq_eq($self._class()))._or_((function(){
  502. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  503. return $core.withContext(function($ctx4) {
  504. //>>excludeEnd("ctx");
  505. return $recv($recv($recv(context)._method())._selector()).__eq("halt");
  506. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  507. }, function($ctx4) {$ctx4.fillBlock({},$ctx3,3)});
  508. //>>excludeEnd("ctx");
  509. }));
  510. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  511. }, function($ctx3) {$ctx3.fillBlock({},$ctx2,2)});
  512. //>>excludeEnd("ctx");
  513. }));
  514. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  515. $ctx2.sendIdx["or:"]=1;
  516. //>>excludeEnd("ctx");
  517. return $recv($1)._not();
  518. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  519. }, function($ctx2) {$ctx2.fillBlock({context:context},$ctx1,1)});
  520. //>>excludeEnd("ctx");
  521. }));
  522. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  523. }, function($ctx1) {$ctx1.fill(self,"signalerContextFrom:",{aContext:aContext},$globals.Halt)});
  524. //>>excludeEnd("ctx");
  525. },
  526. //>>excludeStart("ide", pragmas.excludeIdeData);
  527. args: ["aContext"],
  528. 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 ]",
  529. referencedClasses: [],
  530. //>>excludeEnd("ide");
  531. messageSends: ["findContextSuchThat:", "not", "or:", "==", "receiver", "class", "=", "selector", "method"]
  532. }),
  533. $globals.Halt);
  534. $core.addClass("JavaScriptException", $globals.Error, ["exception"], "Kernel-Exceptions");
  535. //>>excludeStart("ide", pragmas.excludeIdeData);
  536. $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:`";
  537. //>>excludeEnd("ide");
  538. $core.addMethod(
  539. $core.method({
  540. selector: "context:",
  541. protocol: "accessing",
  542. fn: function (aMethodContext){
  543. var self=this,$self=this;
  544. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  545. return $core.withContext(function($ctx1) {
  546. //>>excludeEnd("ctx");
  547. self.context = aMethodContext;
  548. return self;
  549. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  550. }, function($ctx1) {$ctx1.fill(self,"context:",{aMethodContext:aMethodContext},$globals.JavaScriptException)});
  551. //>>excludeEnd("ctx");
  552. },
  553. //>>excludeStart("ide", pragmas.excludeIdeData);
  554. args: ["aMethodContext"],
  555. source: "context: aMethodContext\x0a\x09\x22Set the context from the outside.\x0a\x09See boot.js `inContext()` exception handling\x22\x0a\x09\x0a\x09<inlineJS: 'self.context = aMethodContext'>",
  556. referencedClasses: [],
  557. //>>excludeEnd("ide");
  558. messageSends: []
  559. }),
  560. $globals.JavaScriptException);
  561. $core.addMethod(
  562. $core.method({
  563. selector: "exception",
  564. protocol: "accessing",
  565. fn: function (){
  566. var self=this,$self=this;
  567. return $self["@exception"];
  568. },
  569. //>>excludeStart("ide", pragmas.excludeIdeData);
  570. args: [],
  571. source: "exception\x0a\x09^ exception",
  572. referencedClasses: [],
  573. //>>excludeEnd("ide");
  574. messageSends: []
  575. }),
  576. $globals.JavaScriptException);
  577. $core.addMethod(
  578. $core.method({
  579. selector: "exception:",
  580. protocol: "accessing",
  581. fn: function (anException){
  582. var self=this,$self=this;
  583. $self["@exception"]=anException;
  584. return self;
  585. },
  586. //>>excludeStart("ide", pragmas.excludeIdeData);
  587. args: ["anException"],
  588. source: "exception: anException\x0a\x09exception := anException",
  589. referencedClasses: [],
  590. //>>excludeEnd("ide");
  591. messageSends: []
  592. }),
  593. $globals.JavaScriptException);
  594. $core.addMethod(
  595. $core.method({
  596. selector: "messageText",
  597. protocol: "accessing",
  598. fn: function (){
  599. var self=this,$self=this;
  600. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  601. return $core.withContext(function($ctx1) {
  602. //>>excludeEnd("ctx");
  603. return "JavaScript exception: " + $self["@exception"].toString();
  604. return self;
  605. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  606. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.JavaScriptException)});
  607. //>>excludeEnd("ctx");
  608. },
  609. //>>excludeStart("ide", pragmas.excludeIdeData);
  610. args: [],
  611. source: "messageText\x0a\x09<inlineJS: 'return \x22JavaScript exception: \x22 + $self[\x22@exception\x22].toString()'>",
  612. referencedClasses: [],
  613. //>>excludeEnd("ide");
  614. messageSends: []
  615. }),
  616. $globals.JavaScriptException);
  617. $core.addMethod(
  618. $core.method({
  619. selector: "shouldBeStubbed",
  620. protocol: "testing",
  621. fn: function (){
  622. var self=this,$self=this;
  623. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  624. return $core.withContext(function($ctx1) {
  625. //>>excludeEnd("ctx");
  626. return $self["@exception"] instanceof RangeError;
  627. return self;
  628. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  629. }, function($ctx1) {$ctx1.fill(self,"shouldBeStubbed",{},$globals.JavaScriptException)});
  630. //>>excludeEnd("ctx");
  631. },
  632. //>>excludeStart("ide", pragmas.excludeIdeData);
  633. args: [],
  634. source: "shouldBeStubbed\x0a\x09<inlineJS: 'return $self[\x22@exception\x22] instanceof RangeError'>",
  635. referencedClasses: [],
  636. //>>excludeEnd("ide");
  637. messageSends: []
  638. }),
  639. $globals.JavaScriptException);
  640. $core.addMethod(
  641. $core.method({
  642. selector: "wrap",
  643. protocol: "error handling",
  644. fn: function (){
  645. var self=this,$self=this;
  646. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  647. return $core.withContext(function($ctx1) {
  648. //>>excludeEnd("ctx");
  649. var $1;
  650. $recv((function(){
  651. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  652. return $core.withContext(function($ctx2) {
  653. //>>excludeEnd("ctx");
  654. return $self._signal();
  655. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  656. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,1)});
  657. //>>excludeEnd("ctx");
  658. }))._tryCatch_((function(){
  659. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  660. return $core.withContext(function($ctx2) {
  661. //>>excludeEnd("ctx");
  662. $1=$self._shouldBeStubbed();
  663. if($core.assert($1)){
  664. return $recv($self._context())._stubToAtMost_((100));
  665. }
  666. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  667. }, function($ctx2) {$ctx2.fillBlock({},$ctx1,2)});
  668. //>>excludeEnd("ctx");
  669. }));
  670. return self;
  671. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  672. }, function($ctx1) {$ctx1.fill(self,"wrap",{},$globals.JavaScriptException)});
  673. //>>excludeEnd("ctx");
  674. },
  675. //>>excludeStart("ide", pragmas.excludeIdeData);
  676. args: [],
  677. source: "wrap\x0a\x09[ self signal ] tryCatch:\x0a\x09\x09[ self shouldBeStubbed ifTrue: [ self context stubToAtMost: 100 ] ]",
  678. referencedClasses: [],
  679. //>>excludeEnd("ide");
  680. messageSends: ["tryCatch:", "signal", "ifTrue:", "shouldBeStubbed", "stubToAtMost:", "context"]
  681. }),
  682. $globals.JavaScriptException);
  683. $core.addMethod(
  684. $core.method({
  685. selector: "on:",
  686. protocol: "instance creation",
  687. fn: function (anException){
  688. var self=this,$self=this;
  689. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  690. return $core.withContext(function($ctx1) {
  691. //>>excludeEnd("ctx");
  692. var $1;
  693. $1=$self._new();
  694. $recv($1)._exception_(anException);
  695. return $recv($1)._yourself();
  696. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  697. }, function($ctx1) {$ctx1.fill(self,"on:",{anException:anException},$globals.JavaScriptException.a$cls)});
  698. //>>excludeEnd("ctx");
  699. },
  700. //>>excludeStart("ide", pragmas.excludeIdeData);
  701. args: ["anException"],
  702. source: "on: anException\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09yourself",
  703. referencedClasses: [],
  704. //>>excludeEnd("ide");
  705. messageSends: ["exception:", "new", "yourself"]
  706. }),
  707. $globals.JavaScriptException.a$cls);
  708. $core.addMethod(
  709. $core.method({
  710. selector: "on:context:",
  711. protocol: "instance creation",
  712. fn: function (anException,aMethodContext){
  713. var self=this,$self=this;
  714. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  715. return $core.withContext(function($ctx1) {
  716. //>>excludeEnd("ctx");
  717. var $1;
  718. $1=$self._new();
  719. $recv($1)._exception_(anException);
  720. $recv($1)._context_(aMethodContext);
  721. return $recv($1)._yourself();
  722. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  723. }, function($ctx1) {$ctx1.fill(self,"on:context:",{anException:anException,aMethodContext:aMethodContext},$globals.JavaScriptException.a$cls)});
  724. //>>excludeEnd("ctx");
  725. },
  726. //>>excludeStart("ide", pragmas.excludeIdeData);
  727. args: ["anException", "aMethodContext"],
  728. source: "on: anException context: aMethodContext\x0a\x09^ self new\x0a\x09\x09exception: anException;\x0a\x09\x09context: aMethodContext;\x0a\x09\x09yourself",
  729. referencedClasses: [],
  730. //>>excludeEnd("ide");
  731. messageSends: ["exception:", "new", "context:", "yourself"]
  732. }),
  733. $globals.JavaScriptException.a$cls);
  734. $core.addClass("MessageNotUnderstood", $globals.Error, ["message", "receiver"], "Kernel-Exceptions");
  735. //>>excludeStart("ide", pragmas.excludeIdeData);
  736. $globals.MessageNotUnderstood.comment="This exception is provided to support `Object>>doesNotUnderstand:`.";
  737. //>>excludeEnd("ide");
  738. $core.addMethod(
  739. $core.method({
  740. selector: "message",
  741. protocol: "accessing",
  742. fn: function (){
  743. var self=this,$self=this;
  744. return $self["@message"];
  745. },
  746. //>>excludeStart("ide", pragmas.excludeIdeData);
  747. args: [],
  748. source: "message\x0a\x09^ message",
  749. referencedClasses: [],
  750. //>>excludeEnd("ide");
  751. messageSends: []
  752. }),
  753. $globals.MessageNotUnderstood);
  754. $core.addMethod(
  755. $core.method({
  756. selector: "message:",
  757. protocol: "accessing",
  758. fn: function (aMessage){
  759. var self=this,$self=this;
  760. $self["@message"]=aMessage;
  761. return self;
  762. },
  763. //>>excludeStart("ide", pragmas.excludeIdeData);
  764. args: ["aMessage"],
  765. source: "message: aMessage\x0a\x09message := aMessage",
  766. referencedClasses: [],
  767. //>>excludeEnd("ide");
  768. messageSends: []
  769. }),
  770. $globals.MessageNotUnderstood);
  771. $core.addMethod(
  772. $core.method({
  773. selector: "messageText",
  774. protocol: "accessing",
  775. fn: function (){
  776. var self=this,$self=this;
  777. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  778. return $core.withContext(function($ctx1) {
  779. //>>excludeEnd("ctx");
  780. var $1;
  781. $1=$recv($recv($recv($self._receiver())._asString()).__comma(" does not understand #")).__comma($recv($self._message())._selector());
  782. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  783. $ctx1.sendIdx[","]=1;
  784. //>>excludeEnd("ctx");
  785. return $1;
  786. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  787. }, function($ctx1) {$ctx1.fill(self,"messageText",{},$globals.MessageNotUnderstood)});
  788. //>>excludeEnd("ctx");
  789. },
  790. //>>excludeStart("ide", pragmas.excludeIdeData);
  791. args: [],
  792. source: "messageText\x0a\x09^ self receiver asString, ' does not understand #', self message selector",
  793. referencedClasses: [],
  794. //>>excludeEnd("ide");
  795. messageSends: [",", "asString", "receiver", "selector", "message"]
  796. }),
  797. $globals.MessageNotUnderstood);
  798. $core.addMethod(
  799. $core.method({
  800. selector: "receiver",
  801. protocol: "accessing",
  802. fn: function (){
  803. var self=this,$self=this;
  804. return $self["@receiver"];
  805. },
  806. //>>excludeStart("ide", pragmas.excludeIdeData);
  807. args: [],
  808. source: "receiver\x0a\x09^ receiver",
  809. referencedClasses: [],
  810. //>>excludeEnd("ide");
  811. messageSends: []
  812. }),
  813. $globals.MessageNotUnderstood);
  814. $core.addMethod(
  815. $core.method({
  816. selector: "receiver:",
  817. protocol: "accessing",
  818. fn: function (anObject){
  819. var self=this,$self=this;
  820. $self["@receiver"]=anObject;
  821. return self;
  822. },
  823. //>>excludeStart("ide", pragmas.excludeIdeData);
  824. args: ["anObject"],
  825. source: "receiver: anObject\x0a\x09receiver := anObject",
  826. referencedClasses: [],
  827. //>>excludeEnd("ide");
  828. messageSends: []
  829. }),
  830. $globals.MessageNotUnderstood);
  831. $core.addClass("NonBooleanReceiver", $globals.Error, ["object"], "Kernel-Exceptions");
  832. //>>excludeStart("ide", pragmas.excludeIdeData);
  833. $globals.NonBooleanReceiver.comment="NonBooleanReceiver exceptions may be thrown when executing inlined methods such as `#ifTrue:` with a non boolean receiver.";
  834. //>>excludeEnd("ide");
  835. $core.addMethod(
  836. $core.method({
  837. selector: "object",
  838. protocol: "accessing",
  839. fn: function (){
  840. var self=this,$self=this;
  841. return $self["@object"];
  842. },
  843. //>>excludeStart("ide", pragmas.excludeIdeData);
  844. args: [],
  845. source: "object\x0a\x09^ object",
  846. referencedClasses: [],
  847. //>>excludeEnd("ide");
  848. messageSends: []
  849. }),
  850. $globals.NonBooleanReceiver);
  851. $core.addMethod(
  852. $core.method({
  853. selector: "object:",
  854. protocol: "accessing",
  855. fn: function (anObject){
  856. var self=this,$self=this;
  857. $self["@object"]=anObject;
  858. return self;
  859. },
  860. //>>excludeStart("ide", pragmas.excludeIdeData);
  861. args: ["anObject"],
  862. source: "object: anObject\x0a\x09object := anObject",
  863. referencedClasses: [],
  864. //>>excludeEnd("ide");
  865. messageSends: []
  866. }),
  867. $globals.NonBooleanReceiver);
  868. $core.addMethod(
  869. $core.method({
  870. selector: "signalOn:",
  871. protocol: "instance creation",
  872. fn: function (anObject){
  873. var self=this,$self=this;
  874. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  875. return $core.withContext(function($ctx1) {
  876. //>>excludeEnd("ctx");
  877. var $1;
  878. $1=$self._new();
  879. $recv($1)._object_(anObject);
  880. return $recv($1)._signal();
  881. //>>excludeStart("ctx", pragmas.excludeDebugContexts);
  882. }, function($ctx1) {$ctx1.fill(self,"signalOn:",{anObject:anObject},$globals.NonBooleanReceiver.a$cls)});
  883. //>>excludeEnd("ctx");
  884. },
  885. //>>excludeStart("ide", pragmas.excludeIdeData);
  886. args: ["anObject"],
  887. source: "signalOn: anObject\x0a\x09^ self new\x0a\x09\x09object: anObject;\x0a\x09\x09signal",
  888. referencedClasses: [],
  889. //>>excludeEnd("ide");
  890. messageSends: ["object:", "new", "signal"]
  891. }),
  892. $globals.NonBooleanReceiver.a$cls);
  893. });