Skip to content

Commit

Permalink
wip [ci skip]
Browse files Browse the repository at this point in the history
  • Loading branch information
vtjnash committed Jul 8, 2016
1 parent 5cb5e96 commit 9072018
Show file tree
Hide file tree
Showing 5 changed files with 213 additions and 195 deletions.
2 changes: 1 addition & 1 deletion base/reflection.jl
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,7 @@ function visit(f, mt::MethodTable)
nothing
end
function visit(f, mc::TypeMapLevel)
mc.bottom !== nothing && visit(f, mc.bottom)
if mc.targ !== nothing
e = mc.targ::Vector{Any}
for i in 1:length(e)
Expand All @@ -301,7 +302,6 @@ function visit(f, mc::TypeMapLevel)
isdefined(e, i) && visit(f, e[i])
end
end
mc.linear_leaf !== nothing && visit(f, mc.linear_leaf)
if mc.tname !== nothing
e = mc.tname::Vector{Any}
for i in 1:length(e)
Expand Down
20 changes: 11 additions & 9 deletions src/dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -940,14 +940,16 @@ static void jl_serialize_value_(ios_t *s, jl_value_t *v)
jl_typemap_level_t *node = (jl_typemap_level_t*)v;
size_t i, l;
assert( // make sure this type has the expected ordering
offsetof(jl_typemap_level_t, targ) == 0 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, arg1) == 1 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, tname) == 2 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, name1) == 3 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, linear) == 4 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, any) == 5 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, key) == 6 * sizeof(jl_value_t*) &&
sizeof(jl_typemap_level_t) == 7 * sizeof(jl_value_t*));
offsetof(jl_typemap_level_t, bottom) == 0 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, targ) == 1 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, arg1) == 2 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, tname) == 3 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, name1) == 4 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, linear) == 5 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, any) == 6 * sizeof(jl_value_t*) &&
offsetof(jl_typemap_level_t, key) == 7 * sizeof(jl_value_t*) &&
sizeof(jl_typemap_level_t) == 8 * sizeof(jl_value_t*));
jl_serialize_value(s, node->bottom);
if (node->targ != (void*)jl_nothing) {
jl_array_t *a = jl_alloc_vec_any(0);
for (i = 0, l = jl_array_len(node->targ); i < l; i++) {
Expand Down Expand Up @@ -1034,7 +1036,7 @@ struct jl_serialize_methcache_from_mod_env {
static int jl_serialize_methcache_from_mod(jl_typemap_entry_t *ml, void *closure)
{
struct jl_serialize_methcache_from_mod_env *env = (struct jl_serialize_methcache_from_mod_env*)closure;
if (module_in_worklist(ml->func.method->module)) {
if (module_in_worklist(ml->func.method->module) && !ml->weak) {
jl_serialize_value(env->s, ml->func.method);
jl_serialize_value(env->s, ml->simplesig);
}
Expand Down
16 changes: 10 additions & 6 deletions src/jltypes.c
Original file line number Diff line number Diff line change
Expand Up @@ -3678,43 +3678,47 @@ void jl_init_types(void)

jl_typemap_level_type =
jl_new_datatype(jl_symbol("TypeMapLevel"), jl_any_type, jl_emptysvec,
jl_svec(7,
jl_svec(8,
jl_symbol("bottom"),
jl_symbol("targ"),
jl_symbol("arg1"),
jl_symbol("tname"),
jl_symbol("name1"),
jl_symbol("list"),
jl_symbol("any"),
jl_symbol("key")),
jl_svec(7,
jl_svec(8,
jl_any_type,
jl_any_type,
jl_any_type,
jl_any_type,
jl_any_type,
jl_any_type,
jl_any_type,
jl_any_type),
0, 1, 6);
0, 1, 7);

jl_typemap_entry_type =
jl_new_datatype(jl_symbol("TypeMapEntry"), jl_any_type, jl_emptysvec,
jl_svec(9, jl_symbol("next"),
jl_svec(10, jl_symbol("next"),
jl_symbol("sig"),
jl_symbol("tvars"),
jl_symbol("simplesig"),
jl_symbol("guardsigs"),
jl_symbol("func"),
jl_symbol("isleafsig"),
jl_symbol("issimplesig"),
jl_symbol("va")),
jl_svec(9, jl_any_type, // Union{TypeMapEntry, Void}
jl_symbol("va"),
jl_symbol("weak")),
jl_svec(10, jl_any_type, // Union{TypeMapEntry, Void}
jl_type_type, // TupleType
jl_any_type, // Union{SimpleVector{TypeVar}, TypeVar}
jl_any_type, // TupleType
jl_any_type, // SimpleVector{TupleType}
jl_any_type, // Any
jl_bool_type,
jl_bool_type,
jl_bool_type,
jl_bool_type),
0, 1, 5);

Expand Down
8 changes: 6 additions & 2 deletions src/julia.h
Original file line number Diff line number Diff line change
Expand Up @@ -414,17 +414,19 @@ typedef struct _jl_typemap_entry_t {
int8_t isleafsig; // isleaftype(sig) & !any(isType, sig) : unsorted and very fast
int8_t issimplesig; // all(isleaftype | isAny | isType | isVararg, sig) : sorted and fast
int8_t va; // isVararg(sig)
int8_t weak; // will never overwrite a signature
} jl_typemap_entry_t;

// one level in a TypeMap tree
// indexed by key if it is a sublevel in an array
typedef struct _jl_typemap_level_t {
JL_DATA_TYPE
jl_typemap_entry_t *bottom; // union jl_typemap_t (but no more levels) for entries which have no type at offs
jl_array_t *targ; // Array{union jl_typemap_t} :: contains Type{LeafType}
jl_array_t *arg1; // Array{union jl_typemap_t} :: contains LeafType
jl_array_t *tname; // Array{union jl_typemap_t} :: contains non-abstract Type{TypeName}
jl_array_t *name1; // Array{union jl_typemap_t} :: contains non-abstract TypeName
jl_typemap_entry_t *linear; // union jl_typemap_t (but no more levels)
jl_typemap_entry_t *linear; // union jl_typemap_t (but no more levels) for most entries
union jl_typemap_t any; // type at offs is Any
jl_value_t *key; // [nullable]
} jl_typemap_level_t;
Expand Down Expand Up @@ -993,7 +995,9 @@ STATIC_INLINE int jl_is_leaf_type_(jl_value_t *v)

// type constructors
JL_DLLEXPORT jl_typename_t *jl_new_typename(jl_sym_t *name);
JL_DLLEXPORT jl_tvar_t *jl_new_typevar(jl_sym_t *name,jl_value_t *lb,jl_value_t *ub);
JL_DLLEXPORT jl_tvar_t *jl_new_typevar(jl_sym_t *name, jl_value_t *lb, jl_value_t *ub);
JL_DLLEXPORT jl_tvar_t *jl_new_typevar_(jl_sym_t *name, jl_value_t *lb,
jl_value_t *ub, jl_value_t *b);
JL_DLLEXPORT jl_value_t *jl_apply_type(jl_value_t *tc, jl_svec_t *params);
JL_DLLEXPORT jl_tupletype_t *jl_apply_tuple_type(jl_svec_t *params);
JL_DLLEXPORT jl_tupletype_t *jl_apply_tuple_type_v(jl_value_t **p, size_t np);
Expand Down
Loading

0 comments on commit 9072018

Please sign in to comment.