Skip to content

Conversation

@tlively
Copy link
Member

@tlively tlively commented Mar 26, 2024

The stringview types (stringview_wtf8, stringview_wtf16, and
stringview_iter) are not subtypes of any even though they are supertypes of
none. This breaks the type system invariant that types share a bottom type iff
they share a top type, but we can work around that.

@tlively tlively requested a review from kripken March 26, 2024 04:09
@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

This stack of pull requests is managed by Graphite. Learn more about stacking.

Join @tlively and the rest of your teammates on Graphite Graphite

return a;
}
if (HeapType(a).getBottom() != HeapType(b).getBottom()) {
if (HeapType(a).getTop() != HeapType(b).getTop()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will we not have many other places like this? This worries me...

How bad are things if we don't do this? I may be missing that part.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this change, we would accept (or produce, in the case of TypeGeneralizing) modules that have stringviews flowing into anyref locations, which V8 would reject. GUFA could also produce casts to stringview types for such modules, which V8 would also reject.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Accepting such inputs worries me less as we can say that is user error (and we don't expect to actually see it, nor have we). For GUFA I think we have a fix, and for TypeGeneralizing it should be simple as well, I think? I guess I have a clearer idea of the downsides of those workarounds than such a fundamental change to the type system.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd rather fix the stringref spec, but since we can't, it seems best to at least implement stringref correctly. That seems much better to me than having to special case strings in various places because we haven't implemented their types correctly.

tlively added 2 commits March 26, 2024 10:45
The stringview types (`stringview_wtf8`, `stringview_wtf16`, and
`stringview_iter`) are not subtypes of `any` even though they are supertypes of
`none`. This breaks the type system invariant that types share a bottom type iff
they share a top type, but we can work around that.
@tlively tlively force-pushed the fix-stringview-typing branch from c9c359f to 4f808e0 Compare March 26, 2024 17:46
@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

Oops, I have some stray changes in here.

Copy link
Member

@kripken kripken left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm with fuzzing. I suggest also filing a stringref issue for posterity.

@tlively
Copy link
Member Author

tlively commented Mar 26, 2024

Fuzzer is still going after 20k+ iterations, so I'm going to call it good enough.

@tlively tlively merged commit 165953e into main Mar 26, 2024
@tlively tlively deleted the fix-stringview-typing branch March 26, 2024 20:38
@gkdn gkdn mentioned this pull request Aug 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants