summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2019-10-15 12:48:13 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2020-04-05 07:59:08 +0200
commite2f47c0006ef8c5259c9d32058c4795929f391c3 (patch)
tree487319433d0554094d2ec73a70b6b51a2ac9ea30
parentf34a1a2eb52081cbe0180f5682caa72bc639d439 (diff)
downloadvala-wip/error-gtype.tar.gz
-rw-r--r--codegen/valaccodeattribute.vala2
-rw-r--r--codegen/valaccodebasemodule.vala21
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) {