<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">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">
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>