vala r2188 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2188 - in trunk: . gobject vala
- Date: Tue, 16 Dec 2008 21:19:10 +0000 (UTC)
Author: juergbi
Date: Tue Dec 16 21:19:10 2008
New Revision: 2188
URL: http://svn.gnome.org/viewvc/vala?rev=2188&view=rev
Log:
2008-12-16 JÃrg Billeter <j bitron ch>
* vala/valaclass.vala:
* vala/valaparser.vala:
* gobject/valaclassregisterfunction.vala:
* gobject/valagobjectmodule.vala:
Add support for class destructors, patch by Sebastian DrÃge,
fixes bug 564011
Modified:
trunk/ChangeLog
trunk/gobject/valaclassregisterfunction.vala
trunk/gobject/valagobjectmodule.vala
trunk/vala/valaclass.vala
trunk/vala/valaparser.vala
Modified: trunk/gobject/valaclassregisterfunction.vala
==============================================================================
--- trunk/gobject/valaclassregisterfunction.vala (original)
+++ trunk/gobject/valaclassregisterfunction.vala Tue Dec 16 21:19:10 2008
@@ -59,7 +59,7 @@
}
public override string get_base_finalize_func_name () {
- if (class_reference.has_class_private_fields) {
+ if (class_reference.class_destructor != null || class_reference.has_class_private_fields) {
return "%s_base_finalize".printf (class_reference.get_lower_case_cname (null));
} else {
return "NULL";
Modified: trunk/gobject/valagobjectmodule.vala
==============================================================================
--- trunk/gobject/valagobjectmodule.vala (original)
+++ trunk/gobject/valagobjectmodule.vala Tue Dec 16 21:19:10 2008
@@ -207,7 +207,7 @@
}
add_class_init_function (cl);
- if (cl.has_class_private_fields) {
+ if (cl.class_destructor != null || cl.has_class_private_fields) {
add_base_finalize_function (cl);
}
@@ -1166,6 +1166,10 @@
var cblock = new CCodeBlock ();
+ if (cl.class_destructor != null) {
+ cblock.add_statement (cl.class_destructor.ccodenode);
+ }
+
cblock.add_statement (base_finalize_fragment);
function.block = cblock;
Modified: trunk/vala/valaclass.vala
==============================================================================
--- trunk/vala/valaclass.vala (original)
+++ trunk/vala/valaclass.vala Tue Dec 16 21:19:10 2008
@@ -190,6 +190,11 @@
}
}
}
+
+ /**
+ * Specifies the class destructor.
+ */
+ public Destructor class_destructor { get; set; }
/**
* Specifies whether this class denotes an error base.
@@ -462,6 +467,10 @@
if (destructor != null) {
destructor.accept (visitor);
}
+
+ if (class_destructor != null) {
+ class_destructor.accept (visitor);
+ }
foreach (Class cl in classes) {
cl.accept (visitor);
@@ -907,6 +916,10 @@
destructor.check (analyzer);
}
+ if (class_destructor != null) {
+ class_destructor.check (analyzer);
+ }
+
foreach (Class cl in classes) {
cl.check (analyzer);
}
Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala (original)
+++ trunk/vala/valaparser.vala Tue Dec 16 21:19:10 2008
@@ -2002,7 +2002,14 @@
cl.static_constructor = c;
}
} else if (sym is Destructor) {
- cl.destructor = (Destructor) sym;
+ var d = (Destructor) sym;
+ if (d.binding == MemberBinding.STATIC) {
+ Report.error (sym.source_reference, "static destructors not supported yet");
+ } else if (d.binding == MemberBinding.CLASS) {
+ cl.class_destructor = (Destructor) d;
+ } else {
+ cl.destructor = (Destructor) d;
+ }
} else {
Report.error (sym.source_reference, "unexpected declaration in class");
}
@@ -2319,11 +2326,17 @@
Destructor parse_destructor_declaration (Gee.List<Attribute>? attrs) throws ParseError {
var begin = get_location ();
+ var flags = parse_member_declaration_modifiers ();
expect (TokenType.TILDE);
parse_identifier ();
expect (TokenType.OPEN_PARENS);
expect (TokenType.CLOSE_PARENS);
var d = new Destructor (get_src_com (begin));
+ if (ModifierFlags.STATIC in flags) {
+ d.binding = MemberBinding.STATIC;
+ } else if (ModifierFlags.CLASS in flags) {
+ d.binding = MemberBinding.CLASS;
+ }
d.body = parse_block ();
return d;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]