@@ -97,14 +97,13 @@ extern int inside_typedef;
9797static 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 ;
0 commit comments