Skip to content

Commit 1dab497

Browse files
authored
Define inference lattice types in boot.jl rather than jltypes (#60269)
As a general rule, we should only define things in jltypes that cannot be expressed in ordinary julia code. These inference lattice types do not fall into that category. They need to be in core (at the moment) because codegen looks at them, but there is no reason to define them in jltypes.c. Written by Claude.
1 parent 77d2ffb commit 1dab497

File tree

3 files changed

+29
-24
lines changed

3 files changed

+29
-24
lines changed

base/boot.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,30 @@ struct VecElement{T}
516516
end
517517
VecElement(arg::T) where {T} = VecElement{T}(arg)
518518

519+
# inference lattice element types (moved from jltypes.c)
520+
struct Const
521+
val
522+
end
523+
524+
struct PartialStruct
525+
typ
526+
undefs
527+
fields::Array{Any, 1}
528+
end
529+
530+
struct InterConditional
531+
slot::Int
532+
thentype
533+
elsetype
534+
end
535+
536+
struct PartialOpaque
537+
typ::Type
538+
env
539+
parent::MethodInstance
540+
source
541+
end
542+
519543
eval(Core, quote
520544
GotoNode(label::Int) = $(Expr(:new, :GotoNode, :label))
521545
NewvarNode(slot::SlotNumber) = $(Expr(:new, :NewvarNode, :slot))

src/builtins.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2611,10 +2611,6 @@ void jl_init_primitives(void) JL_GC_DISABLED
26112611
add_builtin("SSAValue", (jl_value_t*)jl_ssavalue_type);
26122612
add_builtin("SlotNumber", (jl_value_t*)jl_slotnumber_type);
26132613
add_builtin("Argument", (jl_value_t*)jl_argument_type);
2614-
add_builtin("Const", (jl_value_t*)jl_const_type);
2615-
add_builtin("PartialStruct", (jl_value_t*)jl_partial_struct_type);
2616-
add_builtin("PartialOpaque", (jl_value_t*)jl_partial_opaque_type);
2617-
add_builtin("InterConditional", (jl_value_t*)jl_interconditional_type);
26182614
add_builtin("MethodMatch", (jl_value_t*)jl_method_match_type);
26192615
add_builtin("Function", (jl_value_t*)jl_function_type);
26202616
add_builtin("Builtin", (jl_value_t*)jl_builtin_type);

src/jltypes.c

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3727,21 +3727,6 @@ void jl_init_types(void) JL_GC_DISABLED
37273727
jl_code_instance_type->name->constfields = code_instance_constfields;
37283728
jl_code_instance_type->name->atomicfields = code_instance_atomicfields;
37293729

3730-
jl_const_type = jl_new_datatype(jl_symbol("Const"), core, jl_any_type, jl_emptysvec,
3731-
jl_perm_symsvec(1, "val"),
3732-
jl_svec1(jl_any_type),
3733-
jl_emptysvec, 0, 0, 1);
3734-
3735-
jl_partial_struct_type = jl_new_datatype(jl_symbol("PartialStruct"), core, jl_any_type, jl_emptysvec,
3736-
jl_perm_symsvec(3, "typ", "undefs", "fields"),
3737-
jl_svec(3, jl_any_type, jl_any_type, jl_array_any_type),
3738-
jl_emptysvec, 0, 0, 3);
3739-
3740-
jl_interconditional_type = jl_new_datatype(jl_symbol("InterConditional"), core, jl_any_type, jl_emptysvec,
3741-
jl_perm_symsvec(3, "slot", "thentype", "elsetype"),
3742-
jl_svec(3, jl_long_type, jl_any_type, jl_any_type),
3743-
jl_emptysvec, 0, 0, 3);
3744-
37453730
jl_method_match_type = jl_new_datatype(jl_symbol("MethodMatch"), core, jl_any_type, jl_emptysvec,
37463731
jl_perm_symsvec(4, "spec_types", "sparams", "method", "fully_covers"),
37473732
jl_svec(4, jl_type_type, jl_simplevector_type, jl_method_type, jl_bool_type),
@@ -3860,11 +3845,6 @@ void jl_init_types(void) JL_GC_DISABLED
38603845
jl_opaque_closure_typename = ((jl_datatype_t*)jl_unwrap_unionall((jl_value_t*)jl_opaque_closure_type))->name;
38613846
jl_compute_field_offsets((jl_datatype_t*)jl_unwrap_unionall((jl_value_t*)jl_opaque_closure_type));
38623847

3863-
jl_partial_opaque_type = jl_new_datatype(jl_symbol("PartialOpaque"), core, jl_any_type, jl_emptysvec,
3864-
jl_perm_symsvec(4, "typ", "env", "parent", "source"),
3865-
jl_svec(4, jl_type_type, jl_any_type, jl_method_instance_type, jl_any_type),
3866-
jl_emptysvec, 0, 0, 4);
3867-
38683848
// complete builtin type metadata
38693849
jl_uint8pointer_type = (jl_datatype_t*)jl_apply_type1((jl_value_t*)jl_pointer_type, (jl_value_t*)jl_uint8_type);
38703850
jl_svecset(jl_datatype_type->types, 5, jl_voidpointer_type);
@@ -3994,6 +3974,11 @@ void post_boot_hooks(void)
39943974
jl_vecelement_typename = ((jl_datatype_t*)jl_unwrap_unionall(core("VecElement")))->name;
39953975
jl_abioverride_type = (jl_datatype_t*)core("ABIOverride");
39963976

3977+
jl_const_type = (jl_datatype_t*)core("Const");
3978+
jl_partial_struct_type = (jl_datatype_t*)core("PartialStruct");
3979+
jl_interconditional_type = (jl_datatype_t*)core("InterConditional");
3980+
jl_partial_opaque_type = (jl_datatype_t*)core("PartialOpaque");
3981+
39973982
export_jl_small_typeof();
39983983
export_jl_sysimg_globals();
39993984
}

0 commit comments

Comments
 (0)