<div id="__MailbirdStyleContent" style="font-size: 12pt;font-family: calibri;color: #000000">
                                        
                                        
                                            
                                        
                                        
                                        Hi Nicolas,<div><br></div><div>it won't. :) The "super" is local to "Class" and will dispatch to "Behavior", not your domain-specific instance of "Class" (resp. "Behavior"). So, if a tool, say System Browser, calls "Bar class compilerClass", the following thing happens:</div><div><br></div><div>Metaclass >> compilerClass</div><div>Bar class (Class) >> metaCompilerClass</div><div>Bar class (Behavior) >> compilerClass</div><div><br></div><div>Only if you add a #metaCompilerClass to the class-side of Bar, then the look up changes to:</div><div><br></div><div><div>Metaclass >> compilerClass</div><div>Bar class  >> metaCompilerClass</div><div><br></div></div><div>Consequently, #compilerClass and #metaCompilerClass are not interfering in terms of inheritance. </div><div><br></div><div><span style="font-size: 12pt;line-height: 1.5">Best,</span></div><div>Marcel</div><div><br></div><div class="mb_sig"></div>
                                        
                                        <blockquote class="history_container" type="cite" style="border-left-style: solid;border-width: 1px;margin-top: 20px;margin-left: 0px;padding-left: 10px;min-width: 500px">
                        <p style="color: #AAAAAA; margin-top: 10px;">Am 21.11.2017 16:24:09 schrieb Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com>:</p>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-11-09 11:13 GMT+01:00  <span dir="ltr"><<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>></span>:<br><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex;border-left: 1px solid rgb(204,204,204);padding-left: 1ex;min-width: 500px">Marcel Taeumel uploaded a new version of Kernel to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/Kernel-mt.1119.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/<wbr>trunk/Kernel-mt.1119.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-mt.1119<br>
Author: mt<br>
Time: 9 November 2017, 11:13:37.82048 am<br>
UUID: a210d4c7-b8eb-e544-a857-<wbr>2b0bbade9668<br>
Ancestors: Kernel-mt.1118<br>
<br>
Improves support for having custom compiler classes for class-side methods. No need to use #respondsTo:. Just provide default implementation of #meta*Class methods in Class. The "super" is important here because the old behavior has been to  use a custom compiler for the instance-side only.<br>
<br>
=============== Diff against Kernel-mt.1118 ===============<br>
<br>
Item was added:<br>
+ ----- Method: Class>>metaCompilerClass (in category 'compiling') -----<br>
+ metaCompilerClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super compilerClass!<br>
<br></blockquote><div><br></div><div>in that case:<br></div><div>Object subclass: #Foo. Foo class >> compilerClass ^FooCompiler.</div><div>Foo subclass: #Bar. Bar class >> compilerClass ^FooBarCompiler.</div><div><br></div><div><div>Won't the FooCompiler be used for compiling Bar class side methods?</div><div>(though I have never overriden any metaCompilerClass)</div><div><br></div></div><blockquote class="gmail_quote" style="margin: 0px 0px 0px 0.8ex;border-left: 1px solid rgb(204,204,204);padding-left: 1ex;min-width: 500px">
Item was added:<br>
+ ----- Method: Class>>metaDecompilerClass (in category 'compiling') -----<br>
+ metaDecompilerClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super decompilerClass!<br>
<br>
Item was added:<br>
+ ----- Method: Class>>metaEvaluatorClass (in category 'compiling') -----<br>
+ metaEvaluatorClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super evaluatorClass!<br>
<br>
Item was added:<br>
+ ----- Method: Class>>metaFormatterClass (in category 'printing') -----<br>
+ metaFormatterClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super formatterClass!<br>
<br>
Item was added:<br>
+ ----- Method: Class>>metaParserClass (in category 'compiling') -----<br>
+ metaParserClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super parserClass!<br>
<br>
Item was added:<br>
+ ----- Method: Class>>metaPrettyPrinterClass (in category 'printing') -----<br>
+ metaPrettyPrinterClass<br>
+       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
+<br>
+       ^ super prettyPrinterClass!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>compilerClass (in category 'compiling') -----<br>
  compilerClass<br>
+<br>
+       ^ self theNonMetaClass metaCompilerClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaCompilerClass)<br>
-               ifTrue: [self theNonMetaClass metaCompilerClass]<br>
-               ifFalse: [super compilerClass]!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>decompilerClass (in category 'compiling') -----<br>
  decompilerClass<br>
+<br>
+       ^ self theNonMetaClass metaDecompilerClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaDecompilerClass)<br>
-               ifTrue: [self theNonMetaClass metaDecompilerClass]<br>
-               ifFalse: [super decompilerClass]!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>evaluatorClass (in category 'compiling') -----<br>
  evaluatorClass<br>
+<br>
+       ^ self theNonMetaClass metaEvaluatorClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaEvaluatorClass)<br>
-               ifTrue: [self theNonMetaClass metaEvaluatorClass]<br>
-               ifFalse: [super evaluatorClass]!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>formatterClass (in category 'printing') -----<br>
  formatterClass<br>
+<br>
+       ^ self theNonMetaClass metaFormatterClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaFormatterClass)<br>
-               ifTrue: [self theNonMetaClass metaFormatterClass]<br>
-               ifFalse: [super formatterClass]!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>parserClass (in category 'compiling') -----<br>
  parserClass<br>
+<br>
+       ^ self theNonMetaClass metaParserClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaParserClass)<br>
-               ifTrue: [self theNonMetaClass metaParserClass]<br>
-               ifFalse: [super parserClass]!<br>
<br>
Item was changed:<br>
  ----- Method: Metaclass>>prettyPrinterClass (in category 'printing') -----<br>
  prettyPrinterClass<br>
+<br>
+       ^ self theNonMetaClass metaPrettyPrinterClass!<br>
-       "BE CAREFUL!! If you provide your own class to treat class-side (resp. meta) methods, you MUST account for the #meta*Class selector to use the default implementation in that case. That is, the methods behind #meta*Class MUST always get the default Smalltalk treatment."<br>
-<br>
-       ^ (self theNonMetaClass respondsTo: #metaPrettyPrinterClass)<br>
-               ifTrue: [self theNonMetaClass metaPrettyPrinterClass]<br>
-               ifFalse: [super prettyPrinterClass]!<br>
<br>
<br>
</blockquote></div><br></div></div>

                        </blockquote></div>