From 87cdbb6c25f198fa88dcff530f34bfe3e9b14245 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sun, 7 Feb 2016 18:32:19 -0700 Subject: improve performance for get_fn_type --- src/parseh.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/parseh.cpp') 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(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(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: { -- cgit v1.2.3