From: Rico Tzschichholz Date: Sun, 12 May 2019 18:59:15 +0000 (+0200) Subject: codegen: Always use G_TYPE_CHECK_INSTANCE_TYPE for external symbols X-Git-Tag: 0.36.20~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=be3cf0322d407a96bdcce3a267b218ebeea14c15;p=thirdparty%2Fvala.git codegen: Always use G_TYPE_CHECK_INSTANCE_TYPE for external symbols and get_ccode_type_check_function() for SourceFileType.SOURCE symbols. --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index de16d8fbb..48d706e37 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5597,13 +5597,20 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var type_domain = new CCodeIdentifier (get_ccode_upper_case_name (et.error_domain)); return new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, instance_domain, type_domain); } else { - var type_id = get_type_id_expression (type); - if (type_id == null) { - return new CCodeInvalidExpression (); + CCodeFunctionCall ccheck; + if (type.data_type == null || type.data_type.external_package) { + var type_id = get_type_id_expression (type); + if (type_id == null) { + return new CCodeInvalidExpression (); + } + ccheck = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_CHECK_INSTANCE_TYPE")); + ccheck.add_argument ((CCodeExpression) ccodenode); + ccheck.add_argument (type_id); + } else { + ccheck = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_check_function (type.data_type))); + ccheck.add_argument ((CCodeExpression) ccodenode); } - var ccheck = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_CHECK_INSTANCE_TYPE")); - ccheck.add_argument ((CCodeExpression) ccodenode); - ccheck.add_argument (type_id); + return ccheck; } } diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala index 995f81c21..c9e5dd53c 100644 --- a/codegen/valagtypemodule.vala +++ b/codegen/valagtypemodule.vala @@ -2267,8 +2267,19 @@ public class Vala.GTypeModule : GErrorModule { if (!context.assert) { return; } else if (context.checking && ((t is Class && !((Class) t).is_compact) || t is Interface)) { - var ctype_check = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_check_function (t))); - ctype_check.add_argument (new CCodeIdentifier (var_name)); + if (!get_ccode_has_type_id (t)) { + return; + } + + CCodeFunctionCall ctype_check; + if (t.external_package) { + ctype_check = new CCodeFunctionCall (new CCodeIdentifier ("G_TYPE_CHECK_INSTANCE_TYPE")); + ctype_check.add_argument (new CCodeIdentifier (var_name)); + ctype_check.add_argument (new CCodeIdentifier (get_ccode_type_id (t))); + } else { + ctype_check = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_check_function (t))); + ctype_check.add_argument (new CCodeIdentifier (var_name)); + } CCodeExpression cexpr = ctype_check; if (!non_null) {