Kernel-Announcements.js 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919
  1. define("amber_core/Kernel-Announcements", ["amber/boot", "amber_core/Kernel-Objects"], function($boot){
  2. var smalltalk=$boot.vm,nil=$boot.nil,_st=$boot.asReceiver,globals=$boot.globals;
  3. smalltalk.addPackage('Kernel-Announcements');
  4. smalltalk.packages["Kernel-Announcements"].transport = {"type":"amd","amdNamespace":"amber_core"};
  5. smalltalk.addClass('AnnouncementSubscription', globals.Object, ['valuable', 'announcementClass'], 'Kernel-Announcements');
  6. globals.AnnouncementSubscription.comment="I am a single entry in a subscription registry of an `Announcer`.\x0aSeveral subscriptions by the same object is possible.";
  7. smalltalk.addMethod(
  8. smalltalk.method({
  9. selector: "announcementClass",
  10. protocol: 'accessing',
  11. fn: function (){
  12. var self=this;
  13. var $1;
  14. $1=self["@announcementClass"];
  15. return $1;
  16. },
  17. args: [],
  18. source: "announcementClass\x0a\x09^ announcementClass",
  19. messageSends: [],
  20. referencedClasses: []
  21. }),
  22. globals.AnnouncementSubscription);
  23. smalltalk.addMethod(
  24. smalltalk.method({
  25. selector: "announcementClass:",
  26. protocol: 'accessing',
  27. fn: function (aClass){
  28. var self=this;
  29. self["@announcementClass"]=aClass;
  30. return self},
  31. args: ["aClass"],
  32. source: "announcementClass: aClass\x0a\x09announcementClass := aClass",
  33. messageSends: [],
  34. referencedClasses: []
  35. }),
  36. globals.AnnouncementSubscription);
  37. smalltalk.addMethod(
  38. smalltalk.method({
  39. selector: "block",
  40. protocol: 'accessing',
  41. fn: function (){
  42. var self=this;
  43. return smalltalk.withContext(function($ctx1) {
  44. var $1;
  45. self._deprecatedAPI();
  46. $1=self._valuable();
  47. return $1;
  48. }, function($ctx1) {$ctx1.fill(self,"block",{},globals.AnnouncementSubscription)})},
  49. args: [],
  50. source: "block\x0a\x09\x22Use #valuable instead\x22\x0a\x09\x0a\x09self deprecatedAPI.\x0a\x09^ self valuable",
  51. messageSends: ["deprecatedAPI", "valuable"],
  52. referencedClasses: []
  53. }),
  54. globals.AnnouncementSubscription);
  55. smalltalk.addMethod(
  56. smalltalk.method({
  57. selector: "block:",
  58. protocol: 'accessing',
  59. fn: function (aValuable){
  60. var self=this;
  61. return smalltalk.withContext(function($ctx1) {
  62. self._deprecatedAPI();
  63. self._valuable_(aValuable);
  64. return self}, function($ctx1) {$ctx1.fill(self,"block:",{aValuable:aValuable},globals.AnnouncementSubscription)})},
  65. args: ["aValuable"],
  66. source: "block: aValuable\x0a\x09\x22Use #valuable instead\x22\x0a\x09\x0a\x09self deprecatedAPI.\x0a\x09self valuable: aValuable",
  67. messageSends: ["deprecatedAPI", "valuable:"],
  68. referencedClasses: []
  69. }),
  70. globals.AnnouncementSubscription);
  71. smalltalk.addMethod(
  72. smalltalk.method({
  73. selector: "deliver:",
  74. protocol: 'announcing',
  75. fn: function (anAnnouncement){
  76. var self=this;
  77. return smalltalk.withContext(function($ctx1) {
  78. var $1;
  79. $1=self._handlesAnnouncement_(anAnnouncement);
  80. if(smalltalk.assert($1)){
  81. _st(self._valuable())._value_(anAnnouncement);
  82. };
  83. return self}, function($ctx1) {$ctx1.fill(self,"deliver:",{anAnnouncement:anAnnouncement},globals.AnnouncementSubscription)})},
  84. args: ["anAnnouncement"],
  85. source: "deliver: anAnnouncement\x0a\x09(self handlesAnnouncement: anAnnouncement)\x0a\x09\x09ifTrue: [ self valuable value: anAnnouncement ]",
  86. messageSends: ["ifTrue:", "handlesAnnouncement:", "value:", "valuable"],
  87. referencedClasses: []
  88. }),
  89. globals.AnnouncementSubscription);
  90. smalltalk.addMethod(
  91. smalltalk.method({
  92. selector: "handlesAnnouncement:",
  93. protocol: 'announcing',
  94. fn: function (anAnnouncement){
  95. var self=this;
  96. function $Smalltalk(){return globals.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
  97. return smalltalk.withContext(function($ctx1) {
  98. var $3,$4,$2,$1,$receiver;
  99. $3=_st($Smalltalk())._globals();
  100. $ctx1.sendIdx["globals"]=1;
  101. $4=_st(self._announcementClass())._name();
  102. $ctx1.sendIdx["name"]=1;
  103. $2=_st($3)._at_($4);
  104. $ctx1.sendIdx["at:"]=1;
  105. if(($receiver = $2) == null || $receiver.isNil){
  106. return false;
  107. } else {
  108. var class_;
  109. class_=$receiver;
  110. $1=_st(_st(_st($Smalltalk())._globals())._at_(_st(_st(_st(anAnnouncement)._class())._theNonMetaClass())._name()))._includesBehavior_(class_);
  111. };
  112. return $1;
  113. }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},globals.AnnouncementSubscription)})},
  114. args: ["anAnnouncement"],
  115. source: "handlesAnnouncement: anAnnouncement\x0a\x09\x22anAnnouncement might be announced from within another Amber environment\x22\x0a\x09\x0a\x09^ (Smalltalk globals at: self announcementClass name)\x0a\x09\x09ifNil: [ ^ false ]\x0a\x09\x09ifNotNil: [ :class |\x0a\x09\x09(Smalltalk globals at: anAnnouncement class theNonMetaClass name) includesBehavior: class ]",
  116. messageSends: ["ifNil:ifNotNil:", "at:", "globals", "name", "announcementClass", "includesBehavior:", "theNonMetaClass", "class"],
  117. referencedClasses: ["Smalltalk"]
  118. }),
  119. globals.AnnouncementSubscription);
  120. smalltalk.addMethod(
  121. smalltalk.method({
  122. selector: "receiver",
  123. protocol: 'accessing',
  124. fn: function (){
  125. var self=this;
  126. return smalltalk.withContext(function($ctx1) {
  127. var $1;
  128. $1=_st(self._valuable())._receiver();
  129. return $1;
  130. }, function($ctx1) {$ctx1.fill(self,"receiver",{},globals.AnnouncementSubscription)})},
  131. args: [],
  132. source: "receiver\x0a\x09^ self valuable receiver",
  133. messageSends: ["receiver", "valuable"],
  134. referencedClasses: []
  135. }),
  136. globals.AnnouncementSubscription);
  137. smalltalk.addMethod(
  138. smalltalk.method({
  139. selector: "valuable",
  140. protocol: 'accessing',
  141. fn: function (){
  142. var self=this;
  143. var $1;
  144. $1=self["@valuable"];
  145. return $1;
  146. },
  147. args: [],
  148. source: "valuable\x0a\x09^ valuable",
  149. messageSends: [],
  150. referencedClasses: []
  151. }),
  152. globals.AnnouncementSubscription);
  153. smalltalk.addMethod(
  154. smalltalk.method({
  155. selector: "valuable:",
  156. protocol: 'accessing',
  157. fn: function (aValuable){
  158. var self=this;
  159. self["@valuable"]=aValuable;
  160. return self},
  161. args: ["aValuable"],
  162. source: "valuable: aValuable\x0a\x09valuable := aValuable",
  163. messageSends: [],
  164. referencedClasses: []
  165. }),
  166. globals.AnnouncementSubscription);
  167. smalltalk.addClass('AnnouncementValuable', globals.Object, ['valuable', 'receiver'], 'Kernel-Announcements');
  168. globals.AnnouncementValuable.comment="I wrap `valuable` objects (typically instances of `BlockClosure`) with a `receiver` to be able to unregister subscriptions based on a `receiver`.";
  169. smalltalk.addMethod(
  170. smalltalk.method({
  171. selector: "receiver",
  172. protocol: 'accessing',
  173. fn: function (){
  174. var self=this;
  175. var $1;
  176. $1=self["@receiver"];
  177. return $1;
  178. },
  179. args: [],
  180. source: "receiver\x0a\x09^ receiver",
  181. messageSends: [],
  182. referencedClasses: []
  183. }),
  184. globals.AnnouncementValuable);
  185. smalltalk.addMethod(
  186. smalltalk.method({
  187. selector: "receiver:",
  188. protocol: 'accessing',
  189. fn: function (anObject){
  190. var self=this;
  191. self["@receiver"]=anObject;
  192. return self},
  193. args: ["anObject"],
  194. source: "receiver: anObject\x0a\x09receiver := anObject",
  195. messageSends: [],
  196. referencedClasses: []
  197. }),
  198. globals.AnnouncementValuable);
  199. smalltalk.addMethod(
  200. smalltalk.method({
  201. selector: "valuable",
  202. protocol: 'accessing',
  203. fn: function (){
  204. var self=this;
  205. var $1;
  206. $1=self["@valuable"];
  207. return $1;
  208. },
  209. args: [],
  210. source: "valuable\x0a\x09^ valuable",
  211. messageSends: [],
  212. referencedClasses: []
  213. }),
  214. globals.AnnouncementValuable);
  215. smalltalk.addMethod(
  216. smalltalk.method({
  217. selector: "valuable:",
  218. protocol: 'accessing',
  219. fn: function (anObject){
  220. var self=this;
  221. self["@valuable"]=anObject;
  222. return self},
  223. args: ["anObject"],
  224. source: "valuable: anObject\x0a\x09valuable := anObject",
  225. messageSends: [],
  226. referencedClasses: []
  227. }),
  228. globals.AnnouncementValuable);
  229. smalltalk.addMethod(
  230. smalltalk.method({
  231. selector: "value",
  232. protocol: 'evaluating',
  233. fn: function (){
  234. var self=this;
  235. return smalltalk.withContext(function($ctx1) {
  236. var $1;
  237. $1=_st(self._valuable())._value();
  238. return $1;
  239. }, function($ctx1) {$ctx1.fill(self,"value",{},globals.AnnouncementValuable)})},
  240. args: [],
  241. source: "value\x0a\x09^ self valuable value",
  242. messageSends: ["value", "valuable"],
  243. referencedClasses: []
  244. }),
  245. globals.AnnouncementValuable);
  246. smalltalk.addMethod(
  247. smalltalk.method({
  248. selector: "value:",
  249. protocol: 'evaluating',
  250. fn: function (anObject){
  251. var self=this;
  252. return smalltalk.withContext(function($ctx1) {
  253. var $1;
  254. $1=_st(self._valuable())._value_(anObject);
  255. return $1;
  256. }, function($ctx1) {$ctx1.fill(self,"value:",{anObject:anObject},globals.AnnouncementValuable)})},
  257. args: ["anObject"],
  258. source: "value: anObject\x0a\x09^ self valuable value: anObject",
  259. messageSends: ["value:", "valuable"],
  260. referencedClasses: []
  261. }),
  262. globals.AnnouncementValuable);
  263. smalltalk.addClass('Announcer', globals.Object, ['registry', 'subscriptions'], 'Kernel-Announcements');
  264. globals.Announcer.comment="I hold annoncement subscriptions (instances of `AnnouncementSubscription`) in a private registry.\x0aI announce (trigger) announces, which are then dispatched to all subscriptions.\x0a\x0aThe code is based on the announcements as [described by Vassili Bykov](http://www.cincomsmalltalk.com/userblogs/vbykov/blogView?searchCategory=Announcements%20Framework).\x0a\x0a## API\x0a\x0aUse `#announce:` to trigger an announcement.\x0a\x0aUse `#on:do:` or `#on:send:to:` to register subscriptions.\x0a\x0aWhen using `#on:send:to:`, unregistration can be done with `#unregister:`.\x0a\x0a## Usage example:\x0a\x0a SystemAnnouncer current\x0a on: ClassAdded\x0a do: [ :ann | window alert: ann theClass name, ' added' ].";
  265. smalltalk.addMethod(
  266. smalltalk.method({
  267. selector: "announce:",
  268. protocol: 'announcing',
  269. fn: function (anAnnouncement){
  270. var self=this;
  271. return smalltalk.withContext(function($ctx1) {
  272. _st(self["@subscriptions"])._do_((function(each){
  273. return smalltalk.withContext(function($ctx2) {
  274. return _st(each)._deliver_(anAnnouncement);
  275. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
  276. return self}, function($ctx1) {$ctx1.fill(self,"announce:",{anAnnouncement:anAnnouncement},globals.Announcer)})},
  277. args: ["anAnnouncement"],
  278. source: "announce: anAnnouncement\x0a\x09subscriptions do: [ :each |\x0a\x09\x09each deliver: anAnnouncement ]",
  279. messageSends: ["do:", "deliver:"],
  280. referencedClasses: []
  281. }),
  282. globals.Announcer);
  283. smalltalk.addMethod(
  284. smalltalk.method({
  285. selector: "initialize",
  286. protocol: 'initialization',
  287. fn: function (){
  288. var self=this;
  289. function $OrderedCollection(){return globals.OrderedCollection||(typeof OrderedCollection=="undefined"?nil:OrderedCollection)}
  290. return smalltalk.withContext(function($ctx1) {
  291. ($ctx1.supercall = true, globals.Announcer.superclass.fn.prototype._initialize.apply(_st(self), []));
  292. $ctx1.supercall = false;
  293. self["@subscriptions"]=_st($OrderedCollection())._new();
  294. return self}, function($ctx1) {$ctx1.fill(self,"initialize",{},globals.Announcer)})},
  295. args: [],
  296. source: "initialize\x0a\x09super initialize.\x0a\x09subscriptions := OrderedCollection new",
  297. messageSends: ["initialize", "new"],
  298. referencedClasses: ["OrderedCollection"]
  299. }),
  300. globals.Announcer);
  301. smalltalk.addMethod(
  302. smalltalk.method({
  303. selector: "on:do:",
  304. protocol: 'subscribing',
  305. fn: function (aClass,aBlock){
  306. var self=this;
  307. return smalltalk.withContext(function($ctx1) {
  308. self._on_do_for_(aClass,aBlock,nil);
  309. return self}, function($ctx1) {$ctx1.fill(self,"on:do:",{aClass:aClass,aBlock:aBlock},globals.Announcer)})},
  310. args: ["aClass", "aBlock"],
  311. source: "on: aClass do: aBlock\x0a\x09self on: aClass do: aBlock for: nil",
  312. messageSends: ["on:do:for:"],
  313. referencedClasses: []
  314. }),
  315. globals.Announcer);
  316. smalltalk.addMethod(
  317. smalltalk.method({
  318. selector: "on:do:for:",
  319. protocol: 'subscribing',
  320. fn: function (aClass,aBlock,aReceiver){
  321. var self=this;
  322. function $AnnouncementSubscription(){return globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  323. function $AnnouncementValuable(){return globals.AnnouncementValuable||(typeof AnnouncementValuable=="undefined"?nil:AnnouncementValuable)}
  324. return smalltalk.withContext(function($ctx1) {
  325. var $1,$3,$4,$6,$7,$5,$8,$2;
  326. $1=self["@subscriptions"];
  327. $3=_st($AnnouncementSubscription())._new();
  328. $ctx1.sendIdx["new"]=1;
  329. $4=$3;
  330. $6=_st($AnnouncementValuable())._new();
  331. _st($6)._valuable_(aBlock);
  332. _st($6)._receiver_(aReceiver);
  333. $7=_st($6)._yourself();
  334. $ctx1.sendIdx["yourself"]=1;
  335. $5=$7;
  336. _st($4)._valuable_($5);
  337. $ctx1.sendIdx["valuable:"]=1;
  338. _st($3)._announcementClass_(aClass);
  339. $8=_st($3)._yourself();
  340. $2=$8;
  341. _st($1)._add_($2);
  342. return self}, function($ctx1) {$ctx1.fill(self,"on:do:for:",{aClass:aClass,aBlock:aBlock,aReceiver:aReceiver},globals.Announcer)})},
  343. args: ["aClass", "aBlock", "aReceiver"],
  344. source: "on: aClass do: aBlock for: aReceiver\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (AnnouncementValuable new\x0a\x09\x09\x09valuable: aBlock;\x0a\x09\x09\x09receiver: aReceiver;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  345. messageSends: ["add:", "valuable:", "new", "receiver:", "yourself", "announcementClass:"],
  346. referencedClasses: ["AnnouncementSubscription", "AnnouncementValuable"]
  347. }),
  348. globals.Announcer);
  349. smalltalk.addMethod(
  350. smalltalk.method({
  351. selector: "on:doOnce:",
  352. protocol: 'subscribing',
  353. fn: function (aClass,aBlock){
  354. var self=this;
  355. var subscription;
  356. function $AnnouncementSubscription(){return globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  357. return smalltalk.withContext(function($ctx1) {
  358. var $1,$2;
  359. $1=_st($AnnouncementSubscription())._new();
  360. _st($1)._announcementClass_(aClass);
  361. $2=_st($1)._yourself();
  362. subscription=$2;
  363. _st(subscription)._valuable_((function(ann){
  364. return smalltalk.withContext(function($ctx2) {
  365. _st(self["@subscriptions"])._remove_(subscription);
  366. return _st(aBlock)._value_(ann);
  367. }, function($ctx2) {$ctx2.fillBlock({ann:ann},$ctx1,1)})}));
  368. _st(self["@subscriptions"])._add_(subscription);
  369. return self}, function($ctx1) {$ctx1.fill(self,"on:doOnce:",{aClass:aClass,aBlock:aBlock,subscription:subscription},globals.Announcer)})},
  370. args: ["aClass", "aBlock"],
  371. source: "on: aClass doOnce: aBlock\x0a\x09| subscription |\x0a\x09\x0a\x09subscription := AnnouncementSubscription new\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself.\x0a\x09subscription valuable: [ :ann |\x0a\x09\x09subscriptions remove: subscription.\x0a\x09\x09aBlock value: ann ].\x0a\x0a\x09subscriptions add: subscription",
  372. messageSends: ["announcementClass:", "new", "yourself", "valuable:", "remove:", "value:", "add:"],
  373. referencedClasses: ["AnnouncementSubscription"]
  374. }),
  375. globals.Announcer);
  376. smalltalk.addMethod(
  377. smalltalk.method({
  378. selector: "on:send:to:",
  379. protocol: 'subscribing',
  380. fn: function (aClass,aSelector,anObject){
  381. var self=this;
  382. function $AnnouncementSubscription(){return globals.AnnouncementSubscription||(typeof AnnouncementSubscription=="undefined"?nil:AnnouncementSubscription)}
  383. function $MessageSend(){return globals.MessageSend||(typeof MessageSend=="undefined"?nil:MessageSend)}
  384. return smalltalk.withContext(function($ctx1) {
  385. var $1,$3,$4,$6,$7,$5,$8,$2;
  386. $1=self["@subscriptions"];
  387. $3=_st($AnnouncementSubscription())._new();
  388. $ctx1.sendIdx["new"]=1;
  389. $4=$3;
  390. $6=_st($MessageSend())._new();
  391. _st($6)._receiver_(anObject);
  392. _st($6)._selector_(aSelector);
  393. $7=_st($6)._yourself();
  394. $ctx1.sendIdx["yourself"]=1;
  395. $5=$7;
  396. _st($4)._valuable_($5);
  397. _st($3)._announcementClass_(aClass);
  398. $8=_st($3)._yourself();
  399. $2=$8;
  400. _st($1)._add_($2);
  401. return self}, function($ctx1) {$ctx1.fill(self,"on:send:to:",{aClass:aClass,aSelector:aSelector,anObject:anObject},globals.Announcer)})},
  402. args: ["aClass", "aSelector", "anObject"],
  403. source: "on: aClass send: aSelector to: anObject\x0a\x09subscriptions add: (AnnouncementSubscription new\x0a\x09\x09valuable: (MessageSend new\x0a\x09\x09\x09receiver: anObject;\x0a\x09\x09\x09selector: aSelector;\x0a\x09\x09\x09yourself);\x0a\x09\x09announcementClass: aClass;\x0a\x09\x09yourself)",
  404. messageSends: ["add:", "valuable:", "new", "receiver:", "selector:", "yourself", "announcementClass:"],
  405. referencedClasses: ["AnnouncementSubscription", "MessageSend"]
  406. }),
  407. globals.Announcer);
  408. smalltalk.addMethod(
  409. smalltalk.method({
  410. selector: "unsubscribe:",
  411. protocol: 'subscribing',
  412. fn: function (anObject){
  413. var self=this;
  414. return smalltalk.withContext(function($ctx1) {
  415. self["@subscriptions"]=_st(self["@subscriptions"])._reject_((function(each){
  416. return smalltalk.withContext(function($ctx2) {
  417. return _st(_st(each)._receiver()).__eq(anObject);
  418. }, function($ctx2) {$ctx2.fillBlock({each:each},$ctx1,1)})}));
  419. return self}, function($ctx1) {$ctx1.fill(self,"unsubscribe:",{anObject:anObject},globals.Announcer)})},
  420. args: ["anObject"],
  421. source: "unsubscribe: anObject\x0a\x09subscriptions := subscriptions reject: [ :each |\x0a\x09\x09each receiver = anObject ]",
  422. messageSends: ["reject:", "=", "receiver"],
  423. referencedClasses: []
  424. }),
  425. globals.Announcer);
  426. smalltalk.addClass('SystemAnnouncer', globals.Announcer, [], 'Kernel-Announcements');
  427. globals.SystemAnnouncer.comment="My unique instance is the global announcer handling all Amber system-related announces.\x0a\x0a## API\x0a\x0aAccess to the unique instance is done via `#current`";
  428. globals.SystemAnnouncer.klass.iVarNames = ['current'];
  429. smalltalk.addMethod(
  430. smalltalk.method({
  431. selector: "current",
  432. protocol: 'accessing',
  433. fn: function (){
  434. var self=this;
  435. return smalltalk.withContext(function($ctx1) {
  436. var $2,$1,$receiver;
  437. $2=self["@current"];
  438. if(($receiver = $2) == null || $receiver.isNil){
  439. self["@current"]=($ctx1.supercall = true, globals.SystemAnnouncer.klass.superclass.fn.prototype._new.apply(_st(self), []));
  440. $ctx1.supercall = false;
  441. $1=self["@current"];
  442. } else {
  443. $1=$2;
  444. };
  445. return $1;
  446. }, function($ctx1) {$ctx1.fill(self,"current",{},globals.SystemAnnouncer.klass)})},
  447. args: [],
  448. source: "current\x0a\x09^ current ifNil: [ current := super new ]",
  449. messageSends: ["ifNil:", "new"],
  450. referencedClasses: []
  451. }),
  452. globals.SystemAnnouncer.klass);
  453. smalltalk.addMethod(
  454. smalltalk.method({
  455. selector: "new",
  456. protocol: 'instance creation',
  457. fn: function (){
  458. var self=this;
  459. return smalltalk.withContext(function($ctx1) {
  460. self._shouldNotImplement();
  461. return self}, function($ctx1) {$ctx1.fill(self,"new",{},globals.SystemAnnouncer.klass)})},
  462. args: [],
  463. source: "new\x0a\x09self shouldNotImplement",
  464. messageSends: ["shouldNotImplement"],
  465. referencedClasses: []
  466. }),
  467. globals.SystemAnnouncer.klass);
  468. smalltalk.addClass('SystemAnnouncement', globals.Object, [], 'Kernel-Announcements');
  469. globals.SystemAnnouncement.comment="I am the superclass of all system announcements";
  470. smalltalk.addMethod(
  471. smalltalk.method({
  472. selector: "heliosClass",
  473. protocol: 'helios',
  474. fn: function (){
  475. var self=this;
  476. return "announcement";
  477. },
  478. args: [],
  479. source: "heliosClass\x0a\x09^ 'announcement'",
  480. messageSends: [],
  481. referencedClasses: []
  482. }),
  483. globals.SystemAnnouncement.klass);
  484. smalltalk.addClass('ClassAnnouncement', globals.SystemAnnouncement, ['theClass'], 'Kernel-Announcements');
  485. globals.ClassAnnouncement.comment="I am the abstract superclass of class-related announcements.";
  486. smalltalk.addMethod(
  487. smalltalk.method({
  488. selector: "theClass",
  489. protocol: 'accessing',
  490. fn: function (){
  491. var self=this;
  492. var $1;
  493. $1=self["@theClass"];
  494. return $1;
  495. },
  496. args: [],
  497. source: "theClass\x0a\x09^ theClass",
  498. messageSends: [],
  499. referencedClasses: []
  500. }),
  501. globals.ClassAnnouncement);
  502. smalltalk.addMethod(
  503. smalltalk.method({
  504. selector: "theClass:",
  505. protocol: 'accessing',
  506. fn: function (aClass){
  507. var self=this;
  508. self["@theClass"]=aClass;
  509. return self},
  510. args: ["aClass"],
  511. source: "theClass: aClass\x0a\x09theClass := aClass",
  512. messageSends: [],
  513. referencedClasses: []
  514. }),
  515. globals.ClassAnnouncement);
  516. smalltalk.addClass('ClassAdded', globals.ClassAnnouncement, [], 'Kernel-Announcements');
  517. globals.ClassAdded.comment="I am emitted when a class is added to the system.\x0aSee ClassBuilder >> #addSubclassOf:... methods";
  518. smalltalk.addClass('ClassCommentChanged', globals.ClassAnnouncement, [], 'Kernel-Announcements');
  519. globals.ClassCommentChanged.comment="I am emitted when the comment of a class changes. (Behavior >> #comment)";
  520. smalltalk.addClass('ClassDefinitionChanged', globals.ClassAnnouncement, [], 'Kernel-Announcements');
  521. globals.ClassDefinitionChanged.comment="I am emitted when the definition of a class changes.\x0aSee ClassBuilder >> #class:instanceVariableNames:";
  522. smalltalk.addClass('ClassMigrated', globals.ClassAnnouncement, ['oldClass'], 'Kernel-Announcements');
  523. globals.ClassMigrated.comment="I am emitted when a class is migrated.";
  524. smalltalk.addMethod(
  525. smalltalk.method({
  526. selector: "oldClass",
  527. protocol: 'accessing',
  528. fn: function (){
  529. var self=this;
  530. var $1;
  531. $1=self["@oldClass"];
  532. return $1;
  533. },
  534. args: [],
  535. source: "oldClass\x0a\x09^ oldClass",
  536. messageSends: [],
  537. referencedClasses: []
  538. }),
  539. globals.ClassMigrated);
  540. smalltalk.addMethod(
  541. smalltalk.method({
  542. selector: "oldClass:",
  543. protocol: 'accessing',
  544. fn: function (aClass){
  545. var self=this;
  546. self["@oldClass"]=aClass;
  547. return self},
  548. args: ["aClass"],
  549. source: "oldClass: aClass\x0a\x09oldClass := aClass",
  550. messageSends: [],
  551. referencedClasses: []
  552. }),
  553. globals.ClassMigrated);
  554. smalltalk.addClass('ClassMoved', globals.ClassAnnouncement, ['oldPackage'], 'Kernel-Announcements');
  555. globals.ClassMoved.comment="I am emitted when a class is moved from one package to another.";
  556. smalltalk.addMethod(
  557. smalltalk.method({
  558. selector: "oldPackage",
  559. protocol: 'accessing',
  560. fn: function (){
  561. var self=this;
  562. var $1;
  563. $1=self["@oldPackage"];
  564. return $1;
  565. },
  566. args: [],
  567. source: "oldPackage\x0a\x09^ oldPackage",
  568. messageSends: [],
  569. referencedClasses: []
  570. }),
  571. globals.ClassMoved);
  572. smalltalk.addMethod(
  573. smalltalk.method({
  574. selector: "oldPackage:",
  575. protocol: 'accessing',
  576. fn: function (aPackage){
  577. var self=this;
  578. self["@oldPackage"]=aPackage;
  579. return self},
  580. args: ["aPackage"],
  581. source: "oldPackage: aPackage\x0a\x09oldPackage := aPackage",
  582. messageSends: [],
  583. referencedClasses: []
  584. }),
  585. globals.ClassMoved);
  586. smalltalk.addClass('ClassRemoved', globals.ClassAnnouncement, [], 'Kernel-Announcements');
  587. globals.ClassRemoved.comment="I am emitted when a class is removed.\x0aSee Smalltalk >> #removeClass:";
  588. smalltalk.addClass('ClassRenamed', globals.ClassAnnouncement, [], 'Kernel-Announcements');
  589. globals.ClassRenamed.comment="I am emitted when a class is renamed.\x0aSee ClassBuilder >> #renameClass:to:";
  590. smalltalk.addClass('MethodAnnouncement', globals.SystemAnnouncement, ['method'], 'Kernel-Announcements');
  591. globals.MethodAnnouncement.comment="I am the abstract superclass of method-related announcements.";
  592. smalltalk.addMethod(
  593. smalltalk.method({
  594. selector: "method",
  595. protocol: 'accessing',
  596. fn: function (){
  597. var self=this;
  598. var $1;
  599. $1=self["@method"];
  600. return $1;
  601. },
  602. args: [],
  603. source: "method\x0a\x09^ method",
  604. messageSends: [],
  605. referencedClasses: []
  606. }),
  607. globals.MethodAnnouncement);
  608. smalltalk.addMethod(
  609. smalltalk.method({
  610. selector: "method:",
  611. protocol: 'accessing',
  612. fn: function (aCompiledMethod){
  613. var self=this;
  614. self["@method"]=aCompiledMethod;
  615. return self},
  616. args: ["aCompiledMethod"],
  617. source: "method: aCompiledMethod\x0a\x09method := aCompiledMethod",
  618. messageSends: [],
  619. referencedClasses: []
  620. }),
  621. globals.MethodAnnouncement);
  622. smalltalk.addClass('MethodAdded', globals.MethodAnnouncement, [], 'Kernel-Announcements');
  623. globals.MethodAdded.comment="I am emitted when a `CompiledMethod` is added to a class.";
  624. smalltalk.addClass('MethodModified', globals.MethodAnnouncement, ['oldMethod'], 'Kernel-Announcements');
  625. globals.MethodModified.comment="I am emitted when a `CompiledMethod` is modified (a new method is installed). I hold a reference to the old method being replaced.";
  626. smalltalk.addMethod(
  627. smalltalk.method({
  628. selector: "oldMethod",
  629. protocol: 'accessing',
  630. fn: function (){
  631. var self=this;
  632. var $1;
  633. $1=self["@oldMethod"];
  634. return $1;
  635. },
  636. args: [],
  637. source: "oldMethod\x0a\x09^ oldMethod",
  638. messageSends: [],
  639. referencedClasses: []
  640. }),
  641. globals.MethodModified);
  642. smalltalk.addMethod(
  643. smalltalk.method({
  644. selector: "oldMethod:",
  645. protocol: 'accessing',
  646. fn: function (aMethod){
  647. var self=this;
  648. self["@oldMethod"]=aMethod;
  649. return self},
  650. args: ["aMethod"],
  651. source: "oldMethod: aMethod\x0a\x09oldMethod := aMethod",
  652. messageSends: [],
  653. referencedClasses: []
  654. }),
  655. globals.MethodModified);
  656. smalltalk.addClass('MethodMoved', globals.MethodAnnouncement, ['oldProtocol'], 'Kernel-Announcements');
  657. globals.MethodMoved.comment="I am emitted when a `CompiledMethod` is moved to another protocol. I hold a refernce to the old protocol of the method.";
  658. smalltalk.addMethod(
  659. smalltalk.method({
  660. selector: "oldProtocol",
  661. protocol: 'accessing',
  662. fn: function (){
  663. var self=this;
  664. var $1;
  665. $1=self["@oldProtocol"];
  666. return $1;
  667. },
  668. args: [],
  669. source: "oldProtocol\x0a\x09^ oldProtocol",
  670. messageSends: [],
  671. referencedClasses: []
  672. }),
  673. globals.MethodMoved);
  674. smalltalk.addMethod(
  675. smalltalk.method({
  676. selector: "oldProtocol:",
  677. protocol: 'accessing',
  678. fn: function (aString){
  679. var self=this;
  680. self["@oldProtocol"]=aString;
  681. return self},
  682. args: ["aString"],
  683. source: "oldProtocol: aString\x0a\x09oldProtocol := aString",
  684. messageSends: [],
  685. referencedClasses: []
  686. }),
  687. globals.MethodMoved);
  688. smalltalk.addClass('MethodRemoved', globals.MethodAnnouncement, [], 'Kernel-Announcements');
  689. globals.MethodRemoved.comment="I am emitted when a `CompiledMethod` is removed from a class.";
  690. smalltalk.addClass('PackageAnnouncement', globals.SystemAnnouncement, ['package'], 'Kernel-Announcements');
  691. globals.PackageAnnouncement.comment="I am the abstract superclass of package-related announcements.";
  692. smalltalk.addMethod(
  693. smalltalk.method({
  694. selector: "package",
  695. protocol: 'accessing',
  696. fn: function (){
  697. var self=this;
  698. var $1;
  699. $1=self["@package"];
  700. return $1;
  701. },
  702. args: [],
  703. source: "package\x0a\x09^ package",
  704. messageSends: [],
  705. referencedClasses: []
  706. }),
  707. globals.PackageAnnouncement);
  708. smalltalk.addMethod(
  709. smalltalk.method({
  710. selector: "package:",
  711. protocol: 'accessing',
  712. fn: function (aPackage){
  713. var self=this;
  714. self["@package"]=aPackage;
  715. return self},
  716. args: ["aPackage"],
  717. source: "package: aPackage\x0a\x09package := aPackage",
  718. messageSends: [],
  719. referencedClasses: []
  720. }),
  721. globals.PackageAnnouncement);
  722. smalltalk.addClass('PackageAdded', globals.PackageAnnouncement, [], 'Kernel-Announcements');
  723. globals.PackageAdded.comment="I am emitted when a `Package` is added to the system.";
  724. smalltalk.addClass('PackageClean', globals.PackageAnnouncement, [], 'Kernel-Announcements');
  725. globals.PackageClean.comment="I am emitted when a package is committed and becomes clean.";
  726. smalltalk.addClass('PackageDirty', globals.PackageAnnouncement, [], 'Kernel-Announcements');
  727. globals.PackageDirty.comment="I am emitted when a package becomes dirty.";
  728. smalltalk.addClass('PackageRemoved', globals.PackageAnnouncement, [], 'Kernel-Announcements');
  729. globals.PackageRemoved.comment="I am emitted when a `Package` is removed from the system.";
  730. smalltalk.addClass('ProtocolAnnouncement', globals.SystemAnnouncement, ['theClass', 'protocol'], 'Kernel-Announcements');
  731. globals.ProtocolAnnouncement.comment="I am the abstract superclass of protocol-related announcements.";
  732. smalltalk.addMethod(
  733. smalltalk.method({
  734. selector: "package",
  735. protocol: 'accessing',
  736. fn: function (){
  737. var self=this;
  738. function $Package(){return globals.Package||(typeof Package=="undefined"?nil:Package)}
  739. return smalltalk.withContext(function($ctx1) {
  740. var $2,$1,$3,$4;
  741. $2=self._protocol();
  742. $ctx1.sendIdx["protocol"]=1;
  743. $1=_st($2)._beginsWith_("*");
  744. if(! smalltalk.assert($1)){
  745. $3=_st(self._theClass())._package();
  746. return $3;
  747. };
  748. $4=_st($Package())._named_ifAbsent_(_st(self._protocol())._allButFirst(),(function(){
  749. return nil;
  750. }));
  751. return $4;
  752. }, function($ctx1) {$ctx1.fill(self,"package",{},globals.ProtocolAnnouncement)})},
  753. args: [],
  754. source: "package\x0a\x0a\x09(self protocol beginsWith: '*') ifFalse: [\x0a\x09\x09^ self theClass package ].\x0a\x09\x09\x0a\x09^ Package \x0a\x09\x09named: self protocol allButFirst\x0a\x09\x09ifAbsent: [ nil ]",
  755. messageSends: ["ifFalse:", "beginsWith:", "protocol", "package", "theClass", "named:ifAbsent:", "allButFirst"],
  756. referencedClasses: ["Package"]
  757. }),
  758. globals.ProtocolAnnouncement);
  759. smalltalk.addMethod(
  760. smalltalk.method({
  761. selector: "protocol",
  762. protocol: 'accessing',
  763. fn: function (){
  764. var self=this;
  765. var $1;
  766. $1=self["@protocol"];
  767. return $1;
  768. },
  769. args: [],
  770. source: "protocol\x0a\x09^ protocol",
  771. messageSends: [],
  772. referencedClasses: []
  773. }),
  774. globals.ProtocolAnnouncement);
  775. smalltalk.addMethod(
  776. smalltalk.method({
  777. selector: "protocol:",
  778. protocol: 'accessing',
  779. fn: function (aString){
  780. var self=this;
  781. self["@protocol"]=aString;
  782. return self},
  783. args: ["aString"],
  784. source: "protocol: aString\x0a\x09protocol := aString",
  785. messageSends: [],
  786. referencedClasses: []
  787. }),
  788. globals.ProtocolAnnouncement);
  789. smalltalk.addMethod(
  790. smalltalk.method({
  791. selector: "theClass",
  792. protocol: 'accessing',
  793. fn: function (){
  794. var self=this;
  795. var $1;
  796. $1=self["@theClass"];
  797. return $1;
  798. },
  799. args: [],
  800. source: "theClass\x0a\x09^ theClass",
  801. messageSends: [],
  802. referencedClasses: []
  803. }),
  804. globals.ProtocolAnnouncement);
  805. smalltalk.addMethod(
  806. smalltalk.method({
  807. selector: "theClass:",
  808. protocol: 'accessing',
  809. fn: function (aClass){
  810. var self=this;
  811. self["@theClass"]=aClass;
  812. return self},
  813. args: ["aClass"],
  814. source: "theClass: aClass\x0a\x09theClass := aClass",
  815. messageSends: [],
  816. referencedClasses: []
  817. }),
  818. globals.ProtocolAnnouncement);
  819. smalltalk.addClass('ProtocolAdded', globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  820. globals.ProtocolAdded.comment="I am emitted when a protocol is added to a class.";
  821. smalltalk.addClass('ProtocolRemoved', globals.ProtocolAnnouncement, [], 'Kernel-Announcements');
  822. globals.ProtocolRemoved.comment="I am emitted when a protocol is removed from a class.";
  823. });