Skip to content

Commit 18912fc

Browse files
committed
allow redefinition of egal parametric types
1 parent c5721c2 commit 18912fc

File tree

2 files changed

+6
-10
lines changed

2 files changed

+6
-10
lines changed

src/interpreter.c

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,13 @@ extern int inside_typedef;
9797
static int equiv_type(jl_datatype_t *dta, jl_datatype_t *dtb)
9898
{
9999
return (jl_typeof(dta) == jl_typeof(dtb) &&
100-
// TODO: can't yet handle parametric types due to how constructors work
101-
dta->parameters == jl_emptysvec &&
102100
dta->name->name == dtb->name->name &&
103-
jl_egal((jl_value_t*)dta->types, (jl_value_t*)dtb->types) &&
104101
dta->abstract == dtb->abstract &&
105102
dta->mutabl == dtb->mutabl &&
106103
dta->size == dtb->size &&
107104
dta->ninitialized == dtb->ninitialized &&
105+
jl_egal((jl_value_t*)dta->parameters, (jl_value_t*)dtb->parameters) &&
106+
jl_egal((jl_value_t*)dta->types, (jl_value_t*)dtb->types) &&
108107
jl_egal((jl_value_t*)dta->super, (jl_value_t*)dtb->super) &&
109108
jl_egal((jl_value_t*)dta->name->names, (jl_value_t*)dtb->name->names) &&
110109
jl_egal((jl_value_t*)dta->parameters, (jl_value_t*)dtb->parameters));
@@ -297,7 +296,7 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
297296
jl_rethrow();
298297
}
299298
b->value = temp;
300-
if (temp==NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
299+
if (temp == NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
301300
jl_checked_assignment(b, (jl_value_t*)dt);
302301
}
303302
JL_GC_POP();
@@ -339,7 +338,7 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
339338
jl_rethrow();
340339
}
341340
b->value = temp;
342-
if (temp==NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
341+
if (temp == NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
343342
jl_checked_assignment(b, (jl_value_t*)dt);
344343
}
345344
JL_GC_POP();
@@ -405,12 +404,9 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
405404
}
406405

407406
b->value = temp;
408-
if (temp==NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
407+
if (temp == NULL || !equiv_type(dt, (jl_datatype_t*)temp)) {
409408
jl_checked_assignment(b, (jl_value_t*)dt);
410409
}
411-
else {
412-
// TODO: remove all old ctors and set temp->name->ctor_factory = dt->name->ctor_factory
413-
}
414410

415411
JL_GC_POP();
416412
return (jl_value_t*)jl_nothing;

src/jltypes.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3607,7 +3607,7 @@ void jl_init_types(void)
36073607
jl_symbol("bound")),
36083608
jl_svec(4, jl_sym_type, jl_type_type,
36093609
jl_type_type, jl_any_type),
3610-
0, 1, 3);
3610+
0, 0, 3);
36113611

36123612
vararg_sym = jl_symbol("Vararg");
36133613
jl_svec_t *tv;

0 commit comments

Comments
 (0)