<br><br><div class="gmail_quote">On Fri, Aug 13, 2010 at 1:01 AM, Bert Freudenberg <span dir="ltr">&lt;<a href="mailto:bert@freudenbergs.de">bert@freudenbergs.de</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im"><br>
On 12.08.2010, at 21:41, Jecel Assumpcao Jr. wrote:<br>
<br>
&gt; Randal L. Schwartz wrote on Date: Thu, 12 Aug 2010 12:46:52 -0700<br>
</div><div class="im">&gt;&gt; Jecel&gt; 1) the class was defined as a subclass of something that was not in the<br>
&gt;&gt; Jecel&gt; image, so the system was silently making it a subclass of ProtoObject<br>
&gt;&gt; Jecel&gt; instead (though the browser said it was a subclass of Object - very<br>
&gt;&gt; Jecel&gt; odd). Didn&#39;t we have a warning for this situation?<br>
&gt;&gt;<br>
&gt;&gt; I can&#39;t imagine any case where<br>
&gt;&gt;<br>
&gt;&gt;  Foo subclass: #Bar [...]<br>
&gt;&gt;<br>
&gt;&gt; should *succeed* if Foo doesn&#39;t exist.  Can you explain why this isn&#39;t fatal?<br>
&gt;<br>
</div><div class="im">&gt; Indeed, I would expect the compiler to refuse to accept this code since<br>
&gt; it can&#39;t know what to do with &quot;Foo&quot;. But I am guessing that somehow that<br>
&gt; is being silently converted into a translation to nil instead.<br>
<br>
</div>Not &quot;somehow&quot;. There is no special compiler magic for this. It&#39;s an unknown global, so simply becomes an entry in Undeclared with a value of nil.<br></blockquote><div><br></div><div>I&#39;m assuming that the problem is that when the global is defined there is no magic that arranges to recompile the subclass and it remains a subclass of nil^H^H^HProtoObject, right?</div>
<div><br></div><div>I was going to reply earlier in the thread that one jsutification is circular package dependencies.  e.g. package Foo defines classes A &amp; C, package Bar defines class B.  Class hierarchy is A subclass: #B, B subclass: #C.  Can&#39;t load Foo or Bar without a hack.  But unless the system records ProtoObject subclasses that have been parented there-form for the purposes of deferring resolution of Undeclared references and reevaluates their correct definitions when previously undeclared classes are declared this isn&#39;t much use.  In my Parcel loader the system does do this, but it hides classes subclassed from &quot;absent&quot; classes until those classes become present.  The Squeak approach is simpler (and has much less fall-out on tools etc), but it would be nice if orphaned classes could be redefined as parent classes arrive.</div>
<div><br></div><div>best</div><div>Eliot</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<font color="#888888"><br>
- Bert -<br>
</font><div><div></div><div class="h5"><br>
&gt; UndefinedObject does have a<br>
&gt; #subclass:instanceVariableNames:classVariableNames:poolDictionaries:cate<br>
&gt; gory: instance method to deal with legacy code that has the hack &quot;nil<br>
&gt; subclass: #Bar ...&quot; to implement proxies and stuff - it just now<br>
&gt; redirects it to the proper ProtoObject class.<br>
&gt;<br>
&gt; -- Jecel<br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div></blockquote></div><br>