@@ -97,14 +97,13 @@ extern int inside_typedef;
97
97
static int equiv_type (jl_datatype_t * dta , jl_datatype_t * dtb )
98
98
{
99
99
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 &&
102
100
dta -> name -> name == dtb -> name -> name &&
103
- jl_egal ((jl_value_t * )dta -> types , (jl_value_t * )dtb -> types ) &&
104
101
dta -> abstract == dtb -> abstract &&
105
102
dta -> mutabl == dtb -> mutabl &&
106
103
dta -> size == dtb -> size &&
107
104
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 ) &&
108
107
jl_egal ((jl_value_t * )dta -> super , (jl_value_t * )dtb -> super ) &&
109
108
jl_egal ((jl_value_t * )dta -> name -> names , (jl_value_t * )dtb -> name -> names ) &&
110
109
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)
297
296
jl_rethrow ();
298
297
}
299
298
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 )) {
301
300
jl_checked_assignment (b , (jl_value_t * )dt );
302
301
}
303
302
JL_GC_POP ();
@@ -339,7 +338,7 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
339
338
jl_rethrow ();
340
339
}
341
340
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 )) {
343
342
jl_checked_assignment (b , (jl_value_t * )dt );
344
343
}
345
344
JL_GC_POP ();
@@ -405,12 +404,9 @@ static jl_value_t *eval(jl_value_t *e, interpreter_state *s)
405
404
}
406
405
407
406
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 )) {
409
408
jl_checked_assignment (b , (jl_value_t * )dt );
410
409
}
411
- else {
412
- // TODO: remove all old ctors and set temp->name->ctor_factory = dt->name->ctor_factory
413
- }
414
410
415
411
JL_GC_POP ();
416
412
return (jl_value_t * )jl_nothing ;
0 commit comments