|
@@ -1,4 +1,4 @@
|
|
|
-smalltalk.addPackage('Kernel-Classes', {});
|
|
|
+smalltalk.addPackage('Kernel-Classes');
|
|
|
smalltalk.addClass('Behavior', smalltalk.Object, [], 'Kernel-Classes');
|
|
|
smalltalk.Behavior.comment="Behavior is the superclass of all class objects. \x0a\x0aIt defines the protocol for creating instances of a class with `#basicNew` and `#new` (see `boot.js` for class constructors details).\x0aInstances know about the subclass/superclass relationships between classes, contain the description that instances are created from, \x0aand hold the method dictionary that's associated with each class.\x0a\x0aBehavior also provides methods for compiling methods, examining the method dictionary, and iterating over the class hierarchy."
|
|
|
smalltalk.addMethod(
|
|
@@ -8,18 +8,33 @@ selector: "addCompiledMethod:",
|
|
|
category: 'compiling',
|
|
|
fn: function (aMethod){
|
|
|
var self=this;
|
|
|
-return smalltalk.withContext(function($ctx1) {
var $1,$2;
|
|
|
+var oldMethod,announcement;
|
|
|
+return smalltalk.withContext(function($ctx1) {
var $1,$2,$3,$4,$5;
|
|
|
+oldMethod=_st(_st(self)._methodDictionary())._at_ifAbsent_(_st(aMethod)._selector(),(function(){
|
|
|
+return smalltalk.withContext(function($ctx2) {
return nil;
|
|
|
+}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));
|
|
|
_st(self)._basicAddCompiledMethod_(aMethod);
|
|
|
-$1=_st((smalltalk.MethodAdded || MethodAdded))._new();
|
|
|
-_st($1)._theClass_(self);
|
|
|
-_st($1)._method_(aMethod);
|
|
|
-$2=_st($1)._yourself();
|
|
|
-_st(_st((smalltalk.SystemAnnouncer || SystemAnnouncer))._current())._announce_($2);
|
|
|
-return self}, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod}, smalltalk.Behavior)})},
|
|
|
+$1=oldMethod;
|
|
|
+if(($receiver = $1) == nil || $receiver == undefined){
|
|
|
+$2=_st((smalltalk.MethodAdded || MethodAdded))._new();
|
|
|
+_st($2)._theClass_(self);
|
|
|
+_st($2)._method_(aMethod);
|
|
|
+$3=_st($2)._yourself();
|
|
|
+announcement=$3;
|
|
|
+} else {
|
|
|
+$4=_st((smalltalk.MethodModified || MethodModified))._new();
|
|
|
+_st($4)._theClass_(self);
|
|
|
+_st($4)._oldMethod_(oldMethod);
|
|
|
+_st($4)._method_(aMethod);
|
|
|
+$5=_st($4)._yourself();
|
|
|
+announcement=$5;
|
|
|
+};
|
|
|
+_st(_st((smalltalk.SystemAnnouncer || SystemAnnouncer))._current())._announce_(announcement);
|
|
|
+return self}, function($ctx1) {$ctx1.fill(self,"addCompiledMethod:",{aMethod:aMethod,oldMethod:oldMethod,announcement:announcement}, smalltalk.Behavior)})},
|
|
|
args: ["aMethod"],
|
|
|
-source: "addCompiledMethod: aMethod\x0a\x09self basicAddCompiledMethod: aMethod.\x0a \x0a SystemAnnouncer current\x0a \x09\x09announce: (MethodAdded new\x0a \x09theClass: self;\x0a method: aMethod;\x0a yourself)",
|
|
|
-messageSends: ["basicAddCompiledMethod:", "announce:", "theClass:", "new", "method:", "yourself", "current"],
|
|
|
-referencedClasses: ["MethodAdded", "SystemAnnouncer"]
|
|
|
+source: "addCompiledMethod: aMethod\x0a\x09| oldMethod announcement |\x0a \x0a\x09oldMethod := self methodDictionary \x0a \x09at: aMethod selector \x0a ifAbsent: [ nil ].\x0a \x0a\x09self basicAddCompiledMethod: aMethod.\x0a \x0a announcement := oldMethod \x0a \x09ifNil: [\x0a\x09\x09 MethodAdded new\x0a \x09\x09\x09 \x09theClass: self;\x0a\x09\x09 method: aMethod;\x0a \x09\x09\x09 yourself ]\x0a \x09ifNotNil: [\x0a \x09MethodModified new\x0a \x09\x09\x09 \x09theClass: self;\x0a oldMethod: oldMethod; \x0a\x09\x09 method: aMethod;\x0a \x09\x09\x09 yourself ].\x0a \x0a\x09SystemAnnouncer current\x0a\x09\x09 \x09\x09announce: announcement",
|
|
|
+messageSends: ["at:ifAbsent:", "selector", "methodDictionary", "basicAddCompiledMethod:", "ifNil:ifNotNil:", "theClass:", "new", "method:", "yourself", "oldMethod:", "announce:", "current"],
|
|
|
+referencedClasses: ["MethodAdded", "MethodModified", "SystemAnnouncer"]
|
|
|
}),
|
|
|
smalltalk.Behavior);
|
|
|
|