|  | @@ -192,7 +192,6 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      BehaviorsBrik.deps = ["organize", "root", "smalltalkGlobals", "arraySet"];
 | 
	
		
			
				|  |  |      function BehaviorsBrik (brikz, st) {
 | 
	
		
			
				|  |  | -        var setupClassOrganization = brikz.organize.setupClassOrganization;
 | 
	
		
			
				|  |  |          var addOrganizationElement = brikz.organize.addOrganizationElement;
 | 
	
		
			
				|  |  |          var removeOrganizationElement = brikz.organize.removeOrganizationElement;
 | 
	
		
			
				|  |  |          var globals = brikz.smalltalkGlobals.globals;
 | 
	
	
		
			
				|  | @@ -212,12 +211,6 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          var classes = [];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        this.setupBehavior = function (behaviorBody) {
 | 
	
		
			
				|  |  | -            setupClassOrganization(behaviorBody);
 | 
	
		
			
				|  |  | -            behaviorBody.localMethods = Object.create(null);
 | 
	
		
			
				|  |  | -            behaviorBody.methods = Object.create(null);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          this.buildBehaviorBody = function (pkgName, builder) {
 | 
	
		
			
				|  |  |              var pkg = st.packages[pkgName];
 | 
	
		
			
				|  |  |              if (!pkg) throw new Error("Missing package " + pkgName);
 | 
	
	
		
			
				|  | @@ -266,10 +259,10 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    MethodsBrik.deps = ["organize", "selectors", "root", "selectorConversion"];
 | 
	
		
			
				|  |  | +    MethodsBrik.deps = ["composition", "selectors", "root", "selectorConversion"];
 | 
	
		
			
				|  |  |      function MethodsBrik (brikz, st) {
 | 
	
		
			
				|  |  | -        var addOrganizationElement = brikz.organize.addOrganizationElement;
 | 
	
		
			
				|  |  |          var registerSelector = brikz.selectors.registerSelector;
 | 
	
		
			
				|  |  | +        var updateMethod = brikz.composition.updateMethod;
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  |          var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -307,16 +300,6 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |              updateMethod(method.selector, behaviorBody);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        function addMethod (method, behaviorBody) {
 | 
	
		
			
				|  |  | -            behaviorBody.methods[method.selector] = method;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // During the bootstrap, #addCompiledMethod is not used.
 | 
	
		
			
				|  |  | -            // Therefore we populate the organizer here too
 | 
	
		
			
				|  |  | -            addOrganizationElement(behaviorBody, method.protocol);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            behaviorBody.methodAdded(method);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          function registerNewSelectors (method) {
 | 
	
		
			
				|  |  |              var newSelectors = [];
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -338,6 +321,28 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |              delete behaviorBody.localMethods[method.selector];
 | 
	
		
			
				|  |  |              updateMethod(method.selector, behaviorBody);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    MethodCompositionBrik.deps = ["organize"];
 | 
	
		
			
				|  |  | +    function MethodCompositionBrik (brikz, st) {
 | 
	
		
			
				|  |  | +        var setupClassOrganization = brikz.organize.setupClassOrganization;
 | 
	
		
			
				|  |  | +        var addOrganizationElement = brikz.organize.addOrganizationElement;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        this.setupMethods = function (behaviorBody) {
 | 
	
		
			
				|  |  | +            setupClassOrganization(behaviorBody);
 | 
	
		
			
				|  |  | +            behaviorBody.localMethods = Object.create(null);
 | 
	
		
			
				|  |  | +            behaviorBody.methods = Object.create(null);
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        function addMethod (method, behaviorBody) {
 | 
	
		
			
				|  |  | +            behaviorBody.methods[method.selector] = method;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            // During the bootstrap, #addCompiledMethod is not used.
 | 
	
		
			
				|  |  | +            // Therefore we populate the organizer here too
 | 
	
		
			
				|  |  | +            addOrganizationElement(behaviorBody, method.protocol);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            behaviorBody.methodAdded(method);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function removeMethod (method, behaviorBody) {
 | 
	
		
			
				|  |  |              delete behaviorBody.methods[method.selector];
 | 
	
	
		
			
				|  | @@ -348,7 +353,7 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |              // This is handled by #removeCompiledMethod
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        function updateMethod (selector, behaviorBody) {
 | 
	
		
			
				|  |  | +        this.updateMethod = function (selector, behaviorBody) {
 | 
	
		
			
				|  |  |              var oldMethod = behaviorBody.methods[selector],
 | 
	
		
			
				|  |  |                  newMethod = behaviorBody.localMethods[selector];
 | 
	
		
			
				|  |  |              if (oldMethod == null && newMethod == null) {
 | 
	
	
		
			
				|  | @@ -358,7 +363,7 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |              if (newMethod === oldMethod) return;
 | 
	
		
			
				|  |  |              if (newMethod != null) addMethod(newMethod, behaviorBody);
 | 
	
		
			
				|  |  |              else removeMethod(oldMethod, behaviorBody);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      function ArraySetBrik (brikz, st) {
 | 
	
	
		
			
				|  | @@ -450,6 +455,7 @@ define(['./compatibility'], function () {
 | 
	
		
			
				|  |  |          brikz.selectorConversion = SelectorConversionBrik;
 | 
	
		
			
				|  |  |          brikz.selectors = SelectorsBrik;
 | 
	
		
			
				|  |  |          brikz.packages = PackagesBrik;
 | 
	
		
			
				|  |  | +        brikz.composition = MethodCompositionBrik;
 | 
	
		
			
				|  |  |          brikz.behaviors = BehaviorsBrik;
 | 
	
		
			
				|  |  |          brikz.methods = MethodsBrik;
 | 
	
		
			
				|  |  |  
 |