Kernel-Exceptions.js 25 KB

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