






@cadr things did not segfault for me

@samth yeah I’m able to compile too, it was because of a local change I made, now it’s working

great

did you learn anything more about the missing call-with-input-file?



@cadr I think I found the bug

or at least a bug

I take it that we’re not sure if it’s the same issue

But since it’s a small one I’ll jump on it right away and see if it’ll solve the main issue

well i found it from looking at a log of the error

but i don’t know if it will fix everything

the previous similar fix didn’t fix everything but did fix some things

are there other places where there might be a correlated that we should remove?

or places where we should check for a symbol?

I’m not sure, but I certainly wasn’t concerned about correlateds before as much as I should’ve been, I have a couple of places in mind in the compile-linklet implementation, I’ll check it, working on that module now

I think this code is the problem:

if isinstance(exp, values.W_WrappedConsProper):
internal_name = exp.car() # W_Symbol
external_name = exp.cdr().car() # W_Symbol
exports[internal_name] = external_name
else:
exports[exp] = exp

This seems to be having a symbol wrapped in a correlated in an export

sorry, import

and that those things with the comments should actually check

as well as the else
clause

Yeah they assume that it’s a symbol, there are a couple of places like this, I’m fixing them

great

also put some checks in W_Linklet.init that the inputs are the right sort of thing

What do you mean? To catch these kinds of errors?

also why isn’t export
an immutable list?

yes

and also so that RPython knows that they’re all symbols

how are renamed imports/exports represented in W_Linklet
?

It isn’t an immutable list because we’re setting the target instance’s exports in the instantiation

wait what

the target is an instance

not a linklet

Oh you’re talking about linklets’ exports, I thought they were immutable

the field is immutable but the elements are not listed as immutable

which they should be

but also, how is renaming represented for exports?

wow I just realized how awful that representation is, it is a list of dictionaries, every export is a dictionary of one element where the key is the external symbol and the value is the internal one, I’m not sure why I didn’t use just one dictionary for that, I’ll certainly fix that soon

No hold on I did use only one dictionary, my old comment confused me

@samth Fixing it makes your example module work, compiling now to see if it fixes more

great

@cadr please push your fix tonight so I can use it tomorrow morning

@samth Sure, I’m waiting for it to compile now, I’ll push it as soon as it’s done

