ソースを参照

Trait is subclass of BehaviorBody.

Herbert Vojčík 7 年 前
コミット
b305f48682
3 ファイル変更60 行追加21 行削除
  1. 43 13
      src/Kernel-Classes.js
  2. 13 4
      src/Kernel-Classes.st
  3. 4 4
      support/boot.js

+ 43 - 13
src/Kernel-Classes.js

@@ -2307,28 +2307,40 @@ $globals.Metaclass);
 
 
 
-$core.addClass('Trait', $globals.Behavior, [], 'Kernel-Classes');
+$core.addClass('Trait', $globals.BehaviorBody, [], 'Kernel-Classes');
 $core.addMethod(
 $core.method({
-selector: "basicNew",
-protocol: 'instance creation',
+selector: "allInstanceVariableNames",
+protocol: 'compiler compatibility',
 fn: function (){
 var self=this;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-return $core.withContext(function($ctx1) {
-//>>excludeEnd("ctx");
-self._error_("A trait cannot be instantiated.");
-return self;
-//>>excludeStart("ctx", pragmas.excludeDebugContexts);
-}, function($ctx1) {$ctx1.fill(self,"basicNew",{},$globals.Trait)});
-//>>excludeEnd("ctx");
+return [];
+
 },
 //>>excludeStart("ide", pragmas.excludeIdeData);
 args: [],
-source: "basicNew\x0a\x09self error: 'A trait cannot be instantiated.'",
+source: "allInstanceVariableNames\x0a\x09^ #()",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: []
+}),
+$globals.Trait);
+
+$core.addMethod(
+$core.method({
+selector: "allSubclassesDo:",
+protocol: 'IDE compatibility',
+fn: function (aBlock){
+var self=this;
+return self;
+
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: ["aBlock"],
+source: "allSubclassesDo: aBlock",
 referencedClasses: [],
 //>>excludeEnd("ide");
-messageSends: ["error:"]
+messageSends: []
 }),
 $globals.Trait);
 
@@ -2456,6 +2468,24 @@ messageSends: ["basicAt:"]
 }),
 $globals.Trait);
 
+$core.addMethod(
+$core.method({
+selector: "superclass",
+protocol: 'IDE compatibility',
+fn: function (){
+var self=this;
+return nil;
+
+},
+//>>excludeStart("ide", pragmas.excludeIdeData);
+args: [],
+source: "superclass\x0a\x09^ nil",
+referencedClasses: [],
+//>>excludeEnd("ide");
+messageSends: []
+}),
+$globals.Trait);
+
 $core.addMethod(
 $core.method({
 selector: "theMetaClass",

+ 13 - 4
src/Kernel-Classes.st

@@ -550,10 +550,19 @@ isMetaclass
 	^ true
 ! !
 
-Behavior subclass: #Trait
+BehaviorBody subclass: #Trait
 	instanceVariableNames: ''
 	package: 'Kernel-Classes'!
 
+!Trait methodsFor: 'IDE compatibility'!
+
+allSubclassesDo: aBlock
+!
+
+superclass
+	^ nil
+! !
+
 !Trait methodsFor: 'accessing'!
 
 category
@@ -587,10 +596,10 @@ theNonMetaClass
 	^ self
 ! !
 
-!Trait methodsFor: 'instance creation'!
+!Trait methodsFor: 'compiler compatibility'!
 
-basicNew
-	self error: 'A trait cannot be instantiated.'
+allInstanceVariableNames
+	^ #()
 ! !
 
 !Trait class methodsFor: 'instance creation'!

+ 4 - 4
support/boot.js

@@ -277,7 +277,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
             if (st._methodRemoved) st._methodRemoved(method, this);
         };
 
-        this.Behavior = SmalltalkBehavior;
+        this.BehaviorBody = SmalltalkBehaviorBody;
 
         this.__init__ = function () {
             var globals = brikz.smalltalkGlobals.globals;
@@ -547,7 +547,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 
     TraitsBrik.deps = ["classes"];
     function TraitsBrik (brikz, st) {
-        var SmalltalkBehavior = brikz.classes.Behavior;
+        var SmalltalkBehaviorBody = brikz.classes.BehaviorBody;
         var setupClass = brikz.classes.setupClass;
         var rawAddClass = brikz.classes.rawAddClass;
         var classFactories = brikz.classes.classFactories;
@@ -555,7 +555,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
         function SmalltalkTrait () {
         }
 
-        inherits(SmalltalkTrait, SmalltalkBehavior);
+        inherits(SmalltalkTrait, SmalltalkBehaviorBody);
 
         SmalltalkTrait.prototype.trait = true;
 
@@ -575,7 +575,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
             var globals = brikz.smalltalkGlobals.globals;
             var addCoupledClass = brikz.classes.addCoupledClass;
             st.addPackage("Kernel-Classes");
-            addCoupledClass("Trait", globals.Behavior, "Kernel-Classes", SmalltalkTrait);
+            addCoupledClass("Trait", globals.BehaviorBody, "Kernel-Classes", SmalltalkTrait);
         };
         this.__init__.once = true;