Skip to content

Commit a43884e

Browse files
JeffBezansonmbauman
authored andcommitted
fix JuliaLang#11278, restore check that field types are Types, lost in JuliaLang#10380
1 parent c15ea7c commit a43884e

File tree

4 files changed

+11
-8
lines changed

4 files changed

+11
-8
lines changed

src/builtins.c

+6
Original file line numberDiff line numberDiff line change
@@ -1005,6 +1005,12 @@ JL_CALLABLE(jl_f_union)
10051005

10061006
// generic function reflection ------------------------------------------------
10071007

1008+
static void jl_check_type_tuple(jl_value_t *t, jl_sym_t *name, const char *ctx)
1009+
{
1010+
if (!jl_is_tuple_type(t))
1011+
jl_type_error_rt(name->name, ctx, (jl_value_t*)jl_type_type, t);
1012+
}
1013+
10081014
JL_CALLABLE(jl_f_methodexists)
10091015
{
10101016
JL_NARGS(method_exists, 2, 2);

src/interpreter.c

+5-1
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,11 @@ static jl_value_t *eval(jl_value_t *e, jl_value_t **locals, size_t nl, size_t ng
410410
dt->types = (jl_svec_t*)eval(args[4], locals, nl, ngensym);
411411
gc_wb(dt, dt->types);
412412
inside_typedef = 0;
413-
//jl_check_type_tuple(dt->types, dt->name->name, "type definition");
413+
for(size_t i=0; i < jl_svec_len(dt->types); i++) {
414+
jl_value_t *elt = jl_svecref(dt->types, i);
415+
if (!jl_is_type(elt) && !jl_is_typevar(elt))
416+
jl_type_error_rt(dt->name->name->name, "type definition", (jl_value_t*)jl_type_type, elt);
417+
}
414418
super = eval(args[3], locals, nl, ngensym);
415419
jl_set_datatype_super(dt, super);
416420
}

src/julia_internal.h

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ uint32_t jl_get_gs_ctr(void);
4949
void jl_set_gs_ctr(uint32_t ctr);
5050

5151
void NORETURN jl_no_method_error(jl_function_t *f, jl_value_t **args, size_t na);
52-
void jl_check_type_tuple(jl_value_t *t, jl_sym_t *name, const char *ctx);
5352

5453
#define JL_CALLABLE(name) \
5554
DLLEXPORT jl_value_t *name(jl_value_t *F, jl_value_t **args, uint32_t nargs)

src/toplevel.c

-6
Original file line numberDiff line numberDiff line change
@@ -613,12 +613,6 @@ DLLEXPORT jl_value_t *jl_load_(jl_value_t *str)
613613

614614
void jl_reinstantiate_inner_types(jl_datatype_t *t);
615615

616-
void jl_check_type_tuple(jl_value_t *t, jl_sym_t *name, const char *ctx)
617-
{
618-
if (!jl_is_tuple_type(t))
619-
jl_type_error_rt(name->name, ctx, (jl_value_t*)jl_type_type, t);
620-
}
621-
622616
void jl_set_datatype_super(jl_datatype_t *tt, jl_value_t *super)
623617
{
624618
if (!jl_is_datatype(super) || !jl_is_abstracttype(super) ||

0 commit comments

Comments
 (0)