<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">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_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 *). See</div><div><br></div><div><span class="gmail-Apple-tab-span" style="white-space:pre">            </span>fieldName := spec first.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>fieldType := spec second.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>isPointerField := fieldType last = $*.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">         </span>fieldType := (fieldType findTokens: '*') first withBlanksTrimmed.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">              </span>externalType := ExternalType atomicTypeNamed: fieldType.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>selfRefering := isPointerField and: [externalType isNil and: [fieldType = self asString]].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">             </span>selfRefering ifTrue: [</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                 </span>externalType := ExternalType void asPointerType</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                </span>] ifFalse:[</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                    </span>externalType == nil ifTrue: ["non-atomic"</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                            </span>Symbol</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                 </span>hasInterned: fieldType</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                 </span>ifTrue: [:sym | externalType := ExternalType structTypeNamed: sym].</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                    </span>].<br><div><span class="gmail-Apple-tab-span" style="white-space:pre">                       </span>externalType == nil ifTrue:[</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                           </span>Transcript show: '(' , fieldType , ' is void)'.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>externalType := ExternalType void.</div><div><span class="gmail-Apple-tab-span" style="white-space:pre">                     </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" 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></div></div></div></div></div></div>