diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2019-10-15 12:48:13 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2020-04-05 07:59:08 +0200 |
commit | e2f47c0006ef8c5259c9d32058c4795929f391c3 (patch) | |
tree | 487319433d0554094d2ec73a70b6b51a2ac9ea30 | |
parent | f34a1a2eb52081cbe0180f5682caa72bc639d439 (diff) | |
download | vala-wip/error-gtype.tar.gz |
-rw-r--r-- | codegen/valaccodeattribute.vala | 2 | ||||
-rw-r--r-- | codegen/valaccodebasemodule.vala | 21 |
2 files changed, 21 insertions, 2 deletions
diff --git a/codegen/valaccodeattribute.vala b/codegen/valaccodeattribute.vala index 6955ae8d2..05fb18470 100644 --- a/codegen/valaccodeattribute.vala +++ b/codegen/valaccodeattribute.vala @@ -1020,7 +1020,7 @@ public class Vala.CCodeAttribute : AttributeCache { if (get_ccode_has_type_id (edomain)) { return get_ccode_upper_case_name (edomain, "TYPE_"); } else { - return "G_TYPE_INT"; + return "G_TYPE_ERROR"; } } else { return "G_TYPE_POINTER"; diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 677285d51..ba263e504 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5181,7 +5181,26 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public override void visit_typeof_expression (TypeofExpression expr) { cfile.add_include ("glib-object.h"); - set_cvalue (expr, get_type_id_expression (expr.type_reference)); + CCodeExpression type_id_expression; + if (expr.type_reference is ErrorType) { + unowned ErrorType error_type = expr.type_reference as ErrorType; + string type_id; + if (error_type.error_domain != null && get_ccode_has_type_id (error_type.error_domain)) { + type_id = get_ccode_type_id (error_type); + if (type_id == "") { + type_id = "G_TYPE_INVALID"; + } else { + generate_type_declaration (error_type, cfile); + } + } else { + type_id = "G_TYPE_ERROR"; + } + type_id_expression = new CCodeIdentifier (type_id); + } else { + type_id_expression = get_type_id_expression (expr.type_reference); + } + + set_cvalue (expr, type_id_expression); } public override void visit_unary_expression (UnaryExpression expr) { |