<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, May 18, 2020 at 12:26 PM Eliot Miranda <<a href="mailto:eliot.miranda@gmail.com">eliot.miranda@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hi Marcel,<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, May 18, 2020 at 7:05 AM Marcel Taeumel <<a href="mailto:marcel.taeumel@hpi.de" target="_blank">marcel.taeumel@hpi.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div id="gmail-m_-9051132577040178615gmail-m_372032513782290141__MailbirdStyleContent" style="font-size:10pt;font-family:Arial;color:rgb(0,0,0)">Hi, there!<div></div><div><br></div><div>In the #fields method of a new ExternalStructure, how can I express a pointer to another external structure?</div><div><br></div><div>First, non-pointer works as expected:</div><div>^ #( (other MyStruct) )</div><div><br></div><div>Second, this just treats it as a void*, which returns a generic ExternalData:</div><div>^ #( (other 'MyStruct*') )</div><div><br></div><div>Third, this gives me a debugger:</div><div><span style="font-size:13.3333px">^ #( (other MyStruct *) )</span><br></div><div><span style="font-size:13.3333px"><br></span></div><div><span style="font-size:13.3333px">:-)</span></div></div></blockquote><div><br></div><div>ExternalStructure class>>#compileFields:withAccessors: implies it is some variation on (filedName 'StructType *).</div></div></div></div></div></div></div></div></div></blockquote><div><br></div><div>I mean  #(fieldName 'StructType*')</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_quote"><div> See</div><div><br></div><div><span style="white-space:pre-wrap">             </span>fieldName := spec first.</div><div><span style="white-space:pre-wrap">         </span>fieldType := spec second.</div><div><span style="white-space:pre-wrap">                </span>isPointerField := fieldType last = $*.</div><div><span style="white-space:pre-wrap">           </span>fieldType := (fieldType findTokens: '*') first withBlanksTrimmed.</div><div><span style="white-space:pre-wrap">                </span>externalType := ExternalType atomicTypeNamed: fieldType.</div><div><span style="white-space:pre-wrap">         </span>selfRefering := isPointerField and: [externalType isNil and: [fieldType = self asString]].</div><div><span style="white-space:pre-wrap">               </span>selfRefering ifTrue: [</div><div><span style="white-space:pre-wrap">                   </span>externalType := ExternalType void asPointerType</div><div><span style="white-space:pre-wrap">          </span>] ifFalse:[</div><div><span style="white-space:pre-wrap">                      </span>externalType == nil ifTrue: ["non-atomic"</div><div><span style="white-space:pre-wrap">                              </span>Symbol</div><div><span style="white-space:pre-wrap">                                   </span>hasInterned: fieldType</div><div><span style="white-space:pre-wrap">                                   </span>ifTrue: [:sym | externalType := ExternalType structTypeNamed: sym].</div><div><span style="white-space:pre-wrap">                      </span>].<br><div><span style="white-space:pre-wrap">                 </span>externalType == nil ifTrue:[</div><div><span style="white-space:pre-wrap">                             </span>Transcript show: '(' , fieldType , ' is void)'.</div><div><span style="white-space:pre-wrap">                          </span>externalType := ExternalType void.</div><div><span style="white-space:pre-wrap">                       </span>].</div><div><br></div>So ...isPointerField should be true.<br>ExternalType atomicTypeNamed: 'MyStruct*' should answer nil.<br>ExternalType structTypeNamed: sym should receive MyStruct.</div><div>If MyStruct doesn't answer anything (externalType is nil) then an error should appear in the transcript.</div><div><br></div><div>HTH</div></div><div dir="ltr"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div></div></div></div></div></div></div></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><span style="font-size:small;border-collapse:separate"><div>_,,,^..^,,,_<br></div><div>best, Eliot</div></span></div></div></div></div>