Procházet zdrojové kódy

Fixed announcements for multiple Amber environments

Nicolas Petton před 11 roky
rodič
revize
09d519a6fb

+ 11 - 3
js/Kernel-Announcements.deploy.js

@@ -68,12 +68,20 @@ smalltalk.method({
 selector: "handlesAnnouncement:",
 fn: function (anAnnouncement){
 var self=this;
+function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(anAnnouncement)._isKindOf_(_st(self)._announcementClass());
+var $2,$1;
+$2=_st(_st($Smalltalk())._current())._at_(_st(_st(self)._announcementClass())._name());
+if(($receiver = $2) == nil || $receiver == undefined){
+return false;
+} else {
+var class_;
+class_=$receiver;
+$1=_st(class_)._includesBehavior_(_st(_st($Smalltalk())._current())._at_(_st(_st(_st(anAnnouncement)._class())._theNonMetaClass())._name()));
+};
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},smalltalk.AnnouncementSubscription)})},
-messageSends: ["isKindOf:", "announcementClass"]}),
+messageSends: ["ifNil:ifNotNil:", "includesBehavior:", "at:", "name", "theNonMetaClass", "class", "current", "announcementClass"]}),
 smalltalk.AnnouncementSubscription);
 
 

+ 14 - 6
js/Kernel-Announcements.js

@@ -13,7 +13,7 @@ $1=self["@announcementClass"];
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"announcementClass",{},smalltalk.AnnouncementSubscription)})},
 args: [],
-source: "announcementClass\x0a\x09^announcementClass",
+source: "announcementClass\x0a\x09^ announcementClass",
 messageSends: [],
 referencedClasses: []
 }),
@@ -95,15 +95,23 @@ selector: "handlesAnnouncement:",
 category: 'announcing',
 fn: function (anAnnouncement){
 var self=this;
+function $Smalltalk(){return smalltalk.Smalltalk||(typeof Smalltalk=="undefined"?nil:Smalltalk)}
 return smalltalk.withContext(function($ctx1) { 
-var $1;
-$1=_st(anAnnouncement)._isKindOf_(_st(self)._announcementClass());
+var $2,$1;
+$2=_st(_st($Smalltalk())._current())._at_(_st(_st(self)._announcementClass())._name());
+if(($receiver = $2) == nil || $receiver == undefined){
+return false;
+} else {
+var class_;
+class_=$receiver;
+$1=_st(class_)._includesBehavior_(_st(_st($Smalltalk())._current())._at_(_st(_st(_st(anAnnouncement)._class())._theNonMetaClass())._name()));
+};
 return $1;
 }, function($ctx1) {$ctx1.fill(self,"handlesAnnouncement:",{anAnnouncement:anAnnouncement},smalltalk.AnnouncementSubscription)})},
 args: ["anAnnouncement"],
-source: "handlesAnnouncement: anAnnouncement\x0a\x09^anAnnouncement isKindOf: self announcementClass",
-messageSends: ["isKindOf:", "announcementClass"],
-referencedClasses: []
+source: "handlesAnnouncement: anAnnouncement\x0a\x09\x22anAnnouncement might be announced from within another Amber environment\x22\x0a\x09\x0a\x09^ (Smalltalk current at: self announcementClass name)\x0a\x09\x09ifNil: [ ^ false ]\x0a\x09\x09ifNotNil: [ :class |\x0a\x09\x09class includesBehavior: (Smalltalk current at: anAnnouncement class theNonMetaClass name) ]",
+messageSends: ["ifNil:ifNotNil:", "includesBehavior:", "at:", "name", "theNonMetaClass", "class", "current", "announcementClass"],
+referencedClasses: ["Smalltalk"]
 }),
 smalltalk.AnnouncementSubscription);
 

+ 7 - 2
st/Kernel-Announcements.st

@@ -9,7 +9,7 @@ Several subscriptions by the same object is possible.!
 !AnnouncementSubscription methodsFor: 'accessing'!
 
 announcementClass
-	^announcementClass
+	^ announcementClass
 !
 
 announcementClass: aClass
@@ -32,7 +32,12 @@ deliver: anAnnouncement
 !
 
 handlesAnnouncement: anAnnouncement
-	^anAnnouncement isKindOf: self announcementClass
+	"anAnnouncement might be announced from within another Amber environment"
+	
+	^ (Smalltalk current at: self announcementClass name)
+		ifNil: [ ^ false ]
+		ifNotNil: [ :class |
+		class includesBehavior: (Smalltalk current at: anAnnouncement class theNonMetaClass name) ]
 ! !
 
 Object subclass: #Announcer