aboutsummaryrefslogtreecommitdiff
path: root/src/parseh.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-02-07 18:32:19 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-02-07 18:32:19 -0700
commit87cdbb6c25f198fa88dcff530f34bfe3e9b14245 (patch)
tree7464e006b76f61f7e4443e67abdd5ed627b3e821 /src/parseh.cpp
parent6b3ce918db0bd73b5b1973b1baf358b6114810ed (diff)
downloadzig-87cdbb6c25f198fa88dcff530f34bfe3e9b14245.tar.gz
zig-87cdbb6c25f198fa88dcff530f34bfe3e9b14245.zip
improve performance for get_fn_type
Diffstat (limited to 'src/parseh.cpp')
-rw-r--r--src/parseh.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/parseh.cpp b/src/parseh.cpp
index 50d6f147f0..bed597f883 100644
--- a/src/parseh.cpp
+++ b/src/parseh.cpp
@@ -506,7 +506,12 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
}
}
- fn_type_id.param_info = allocate<FnTypeParamInfo>(fn_type_id.param_count);
+ if (fn_type_id.param_count > fn_type_id_prealloc_param_info_count) {
+ fn_type_id.param_info = allocate_nonzero<FnTypeParamInfo>(fn_type_id.param_count);
+ } else {
+ fn_type_id.param_info = &fn_type_id.prealloc_param_info[0];
+ }
+
for (int i = 0; i < fn_type_id.param_count; i += 1) {
QualType qt = fn_proto_ty->getParamType(i);
TypeTableEntry *param_type = resolve_qual_type(c, qt, decl);
@@ -521,7 +526,7 @@ static TypeTableEntry *resolve_type_with_table(Context *c, const Type *ty, const
param_info->is_noalias = qt.isRestrictQualified();
}
- return get_fn_type(c->codegen, fn_type_id);
+ return get_fn_type(c->codegen, &fn_type_id);
}
case Type::Record:
{