JL_DLLEXPORT jl_typename_t *jl_new_typename(jl_sym_t *name) { jl_ptls_t ptls = jl_get_ptls_states(); return jl_new_typename_in(name, ptls->current_module); }
JL_DLLEXPORT jl_typename_t *jl_new_typename(jl_sym_t *name) { return jl_new_typename_in(name, jl_current_module); }
JL_DLLEXPORT jl_datatype_t *jl_new_datatype( jl_sym_t *name, jl_module_t *module, jl_datatype_t *super, jl_svec_t *parameters, jl_svec_t *fnames, jl_svec_t *ftypes, int abstract, int mutabl, int ninitialized) { jl_datatype_t *t = NULL; jl_typename_t *tn = NULL; JL_GC_PUSH2(&t, &tn); if (t == NULL) t = jl_new_uninitialized_datatype(); else tn = t->name; // init before possibly calling jl_new_typename_in t->super = super; if (super != NULL) jl_gc_wb(t, t->super); t->parameters = parameters; jl_gc_wb(t, t->parameters); t->types = ftypes; if (ftypes != NULL) jl_gc_wb(t, t->types); t->abstract = abstract; t->mutabl = mutabl; t->ninitialized = ninitialized; t->instance = NULL; t->struct_decl = NULL; t->ditype = NULL; t->size = 0; if (tn == NULL) { t->name = NULL; if (jl_is_typename(name)) { tn = (jl_typename_t*)name; } else { tn = jl_new_typename_in((jl_sym_t*)name, module); if (!abstract) { tn->mt = jl_new_method_table(name, module); jl_gc_wb(tn, tn->mt); } } t->name = tn; jl_gc_wb(t, t->name); } t->name->names = fnames; jl_gc_wb(t->name, t->name->names); if (t->name->wrapper == NULL) { t->name->wrapper = (jl_value_t*)t; jl_gc_wb(t->name, t); int i; int np = jl_svec_len(parameters); for (i=np-1; i >= 0; i--) { t->name->wrapper = jl_new_struct(jl_unionall_type, jl_svecref(parameters,i), t->name->wrapper); jl_gc_wb(t->name, t->name->wrapper); } } jl_precompute_memoized_dt(t); t->uid = 0; if (!abstract) { if (jl_svec_len(parameters) == 0) t->uid = jl_assign_type_uid(); jl_compute_field_offsets(t); } JL_GC_POP(); return t; }