-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
give IR forms for defining types valid linear structure #33553
Conversation
It seems to me that if we break everything down into simpler forms, JuliaInterpreter can continue to work unmodified, which would certainly be a plus. |
c08e620
to
fe45bbb
Compare
ae8b12f
to
27f96b8
Compare
27f96b8
to
c6d2acd
Compare
Since you asked about JuliaInterpreter, the changes were relatively minor (though not entirely trivial to track down):
We'd noticed the former differences in lowering, and even had to handle them specially to make sure a performance optimization didn't trigger errors. So I'm supportive of this change. |
Hooray! Thanks Jeff! Awesome. :) |
Currently, eg. in Julia v1.5.2 it still remains a mention to those expr in (define (check-top-level e)
(define (head-to-text h)
(case h
((abstract_type) "\"abstract type\"")
((primitive_type) "\"primitive type\"")
((struct_type) "\"struct\"")
((method) "method definition")
(else (string "\"" h "\"")))) @ https://github.com/JuliaLang/julia/blob/v1.5.2/src/julia-syntax.scm#L3786-L3790 I don't know if it is voluntary (for backward compat or something else), or an omission |
The type-defining IR forms (
struct_type
etc.) are currently very special: they violate the usual linear structure rules for IR, and evaluate their arguments in a non-standard way intertwined with some global effects. This PR tries to clean that up, removing the special cases and hopefully eventually leading to fixing #33183.The new type-defining process here is broken into three steps at the IR level:
Uses only function calls (unfortunately requiring several new builtins though).
fixes #35416