From 27a890caf77cf08949af581224c6fc39ae46c924 Mon Sep 17 00:00:00 2001 From: Juerg Billeter Date: Mon, 7 Apr 2008 21:16:25 +0000 Subject: [PATCH] fix access to code and message fields in error types, fixes bug 519648 2008-04-07 Juerg Billeter * vala/valaerrortype.vala, vala/valasemanticanalyzer.vala, vala/valasymbolresolver.vala, gobject/valaccodegenerator.vala: fix access to code and message fields in error types, fixes bug 519648 svn path=/trunk/; revision=1185 --- ChangeLog | 7 +++++++ gobject/valaccodegenerator.vala | 2 +- vala/valaerrortype.vala | 11 +++++++++-- vala/valasemanticanalyzer.vala | 4 ++-- vala/valasymbolresolver.vala | 4 ++-- 5 files changed, 21 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index bab0a05..6645c1a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,12 @@ 2008-04-07 Jürg Billeter + * vala/valaerrortype.vala, vala/valasemanticanalyzer.vala, + vala/valasymbolresolver.vala, gobject/valaccodegenerator.vala: + fix access to code and message fields in error types, + fixes bug 519648 + +2008-04-07 Jürg Billeter + * vapi/packages/gtk+-2.0/: fix gtk_tree_path_copy and gtk_tree_selection_get_selected_rows bindings diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index f07b563..a18321b 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -226,7 +226,7 @@ public class Vala.CCodeGenerator : CodeGenerator { gtype_type = (Typesymbol) glib_ns.scope.lookup ("Type"); gtypeinstance_type = (Typesymbol) glib_ns.scope.lookup ("TypeInstance"); gobject_type = (Typesymbol) glib_ns.scope.lookup ("Object"); - gerror_type = new ErrorType (null); + gerror_type = new ErrorType (null, null); glist_type = (Typesymbol) glib_ns.scope.lookup ("List"); gslist_type = (Typesymbol) glib_ns.scope.lookup ("SList"); gstring_type = (Typesymbol) glib_ns.scope.lookup ("StringBuilder"); diff --git a/vala/valaerrortype.vala b/vala/valaerrortype.vala index f12cb33..a2cbc47 100644 --- a/vala/valaerrortype.vala +++ b/vala/valaerrortype.vala @@ -32,9 +32,10 @@ public class Vala.ErrorType : ReferenceType { */ public weak ErrorDomain? error_domain { get; set; } - public ErrorType (ErrorDomain? error_domain) { + public ErrorType (ErrorDomain? error_domain, SourceReference source_reference) { this.error_domain = error_domain; this.data_type = error_domain; + this.source_reference = source_reference; } public override bool compatible (DataType! target_type, bool enable_non_null = true) { @@ -63,7 +64,7 @@ public class Vala.ErrorType : ReferenceType { } public override DataType copy () { - return new ErrorType (error_domain); + return new ErrorType (error_domain, source_reference); } public override string get_cname (bool var_type = false, bool const_type = false) { @@ -91,4 +92,10 @@ public class Vala.ErrorType : ReferenceType { return error_domain == et.error_domain; } + + public override Symbol? get_member (string member_name) { + var root_symbol = source_reference.file.context.root; + var gerror_symbol = root_symbol.scope.lookup ("GLib").scope.lookup ("Error"); + return gerror_symbol.scope.lookup (member_name); + } } diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala index 0fe7bee..f3a0ee1 100644 --- a/vala/valasemanticanalyzer.vala +++ b/vala/valasemanticanalyzer.vala @@ -1168,7 +1168,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor { clause.body.scope.add (clause.variable_name, clause.variable_declarator); } else { - clause.type_reference = new ErrorType (null); + clause.type_reference = new ErrorType (null, clause.source_reference); } clause.accept_children (this); @@ -2183,7 +2183,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor { type = (Typesymbol) type_sym; expr.type_reference = new ValueType (type); } else if (type_sym is ErrorDomain) { - expr.type_reference = new ErrorType ((ErrorDomain) type_sym); + expr.type_reference = new ErrorType ((ErrorDomain) type_sym, expr.source_reference); } else { expr.error = true; Report.error (expr.source_reference, "`%s' is not a class, struct, or error domain".printf (type_sym.get_full_name ())); diff --git a/vala/valasymbolresolver.vala b/vala/valasymbolresolver.vala index 6be4fa2..ea02f66 100644 --- a/vala/valasymbolresolver.vala +++ b/vala/valasymbolresolver.vala @@ -243,7 +243,7 @@ public class Vala.SymbolResolver : CodeVisitor { } else if (sym is Class) { var cl = (Class) sym; if (cl.is_error_base) { - type = new ErrorType (null); + type = new ErrorType (null, unresolved_type.source_reference); } else { type = new ClassType (cl); } @@ -254,7 +254,7 @@ public class Vala.SymbolResolver : CodeVisitor { } else if (sym is Enum) { type = new ValueType ((Enum) sym); } else if (sym is ErrorDomain) { - type = new ErrorType ((ErrorDomain) sym); + type = new ErrorType ((ErrorDomain) sym, unresolved_type.source_reference); } else { Report.error (unresolved_type.source_reference, "internal error: `%s' is not a supported type".printf (sym.get_full_name ())); return new InvalidType (); -- 2.7.4