Skip to content

Commit

Permalink
For caching staged methods, don't restrict the number of varargs to m…
Browse files Browse the repository at this point in the history
…atch

Also adds `stagedfunction` as a keyword to Kate's julia.xml file
  • Loading branch information
timholy authored and Keno committed Aug 23, 2014
1 parent 54e68aa commit bb0daaf
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 5 deletions.
1 change: 1 addition & 0 deletions contrib/julia.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
<item> do </item>
<item> for </item>
<item> function </item>
<item> stagedfunction </item>
<item> if </item>
<item> immutable </item>
<item> let </item>
Expand Down
10 changes: 5 additions & 5 deletions src/gf.c
Original file line number Diff line number Diff line change
Expand Up @@ -454,7 +454,7 @@ static jl_value_t *ml_matches(jl_methlist_t *ml, jl_value_t *type,

static jl_function_t *cache_method(jl_methtable_t *mt, jl_tuple_t *type,
jl_function_t *method, jl_tuple_t *decl,
jl_tuple_t *sparams)
jl_tuple_t *sparams, int isstaged)
{
size_t i;
int need_guard_entries = 0;
Expand Down Expand Up @@ -707,7 +707,7 @@ static jl_function_t *cache_method(jl_methtable_t *mt, jl_tuple_t *type,
// and the types we find should be bigger.
if (jl_tuple_len(type) > mt->max_args &&
jl_is_vararg_type(jl_tupleref(decl,jl_tuple_len(decl)-1))) {
size_t nspec = mt->max_args + 2;
size_t nspec = isstaged ? jl_tuple_len(type) : mt->max_args + 2;
jl_tuple_t *limited = jl_alloc_tuple(nspec);
for(i=0; i < nspec-1; i++) {
jl_tupleset(limited, i, jl_tupleref(type, i));
Expand Down Expand Up @@ -1018,7 +1018,7 @@ static jl_function_t *jl_mt_assoc_by_type(jl_methtable_t *mt, jl_tuple_t *tt, in
JL_GC_POP();
if (!cache)
return func;
return cache_method(mt, tt, func, (jl_tuple_t*)m->sig, jl_null);
return cache_method(mt, tt, func, (jl_tuple_t*)m->sig, jl_null, m->isstaged);
}
JL_GC_POP();
return jl_bottom_func;
Expand Down Expand Up @@ -1048,7 +1048,7 @@ static jl_function_t *jl_mt_assoc_by_type(jl_methtable_t *mt, jl_tuple_t *tt, in
if (!cache)
nf = func;
else
nf = cache_method(mt, tt, func, newsig, env);
nf = cache_method(mt, tt, func, newsig, env, 0);
JL_GC_POP();
return nf;
}
Expand Down Expand Up @@ -1734,7 +1734,7 @@ jl_value_t *jl_gf_invoke(jl_function_t *gf, jl_tuple_t *types,
jl_tuple_len(tpenv)/2);
}
}
mfunc = cache_method(m->invokes, tt, m->func, newsig, tpenv);
mfunc = cache_method(m->invokes, tt, m->func, newsig, tpenv, 0);
JL_GC_POP();
}

Expand Down

0 comments on commit bb0daaf

Please sign in to comment.