diff options
-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) { |