summaryrefslogtreecommitdiff
path: root/vapigen
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2006-08-24 16:00:54 +0000
committerJürg Billeter <juergbi@src.gnome.org>2006-08-24 16:00:54 +0000
commit687e33b5abc1c5f8e9b3cec02a660d4d44cede3f (patch)
tree8c4e5cf94805dccd4595d5745c118352df991dbc /vapigen
parent0e8ad38dd503133ef2a7006a3de4084f8f1cf768 (diff)
downloadvala-687e33b5abc1c5f8e9b3cec02a660d4d44cede3f.tar.gz
mark virtual functions appropriately
2006-08-24 Jürg Billeter <j@bitron.ch> * vapigen/valagidlparser.vala: mark virtual functions appropriately svn path=/trunk/; revision=113
Diffstat (limited to 'vapigen')
-rw-r--r--vapigen/ChangeLog4
-rw-r--r--vapigen/vapigen/valagidlparser.vala29
2 files changed, 28 insertions, 5 deletions
diff --git a/vapigen/ChangeLog b/vapigen/ChangeLog
index b7ecb9292..61767b88d 100644
--- a/vapigen/ChangeLog
+++ b/vapigen/ChangeLog
@@ -1,3 +1,7 @@
+2006-08-24 Jürg Billeter <j@bitron.ch>
+
+ * vapigen/valagidlparser.vala: mark virtual functions appropriately
+
2006-08-18 Jürg Billeter <j@bitron.ch>
* vapigen/valavapigen.vala, packages/gtk+-2.0/gtk+-2.0-custom.vala:
diff --git a/vapigen/vapigen/valagidlparser.vala b/vapigen/vapigen/valagidlparser.vala
index 99bd9f012..06352458b 100644
--- a/vapigen/vapigen/valagidlparser.vala
+++ b/vapigen/vapigen/valagidlparser.vala
@@ -277,7 +277,6 @@ public class Vala.GIdlParser : CodeVisitor {
}
private ref Class parse_object (IdlNodeInterface! node) {
-
var cl = new Class (node.gtype_name, current_source_reference);
cl.access = MemberAccessibility.PUBLIC;
@@ -295,11 +294,20 @@ public class Vala.GIdlParser : CodeVisitor {
current_data_type = cl;
- current_type_symbol_map = new HashTable.full (str_hash, str_equal, g_free, g_free);
+ current_type_symbol_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
+ var current_type_vfunc_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
+
+ foreach (IdlNode member in node.members) {
+ if (member.type == IdlNodeTypeId.VFUNC) {
+ current_type_vfunc_map.insert (member.name, "1");
+ }
+ }
foreach (IdlNode member in node.members) {
if (member.type == IdlNodeTypeId.FUNCTION) {
- var m = parse_function ((IdlNodeFunction) member);
+ bool is_virtual = current_type_vfunc_map.lookup (member.name) != null;
+
+ var m = parse_function ((IdlNodeFunction) member, is_virtual);
if (m != null) {
cl.add_method (m);
}
@@ -359,9 +367,18 @@ public class Vala.GIdlParser : CodeVisitor {
current_data_type = iface;
+ var current_type_vfunc_map = new HashTable<string,string>.full (str_hash, str_equal, g_free, g_free);
+ foreach (IdlNode member in node.members) {
+ if (member.type == IdlNodeTypeId.VFUNC) {
+ current_type_vfunc_map.insert (member.name, "1");
+ }
+ }
+
foreach (IdlNode member in node.members) {
if (member.type == IdlNodeTypeId.FUNCTION) {
- var m = parse_function ((IdlNodeFunction) member);
+ bool is_virtual = current_type_vfunc_map.lookup (member.name) != null;
+
+ var m = parse_function ((IdlNodeFunction) member, is_virtual);
if (m != null) {
iface.add_method (m);
}
@@ -552,7 +569,7 @@ public class Vala.GIdlParser : CodeVisitor {
return type;
}
- private ref Method parse_function (IdlNodeFunction! f) {
+ private ref Method parse_function (IdlNodeFunction! f, bool is_virtual = false) {
var node = (IdlNode) f;
if (f.deprecated) {
@@ -567,6 +584,8 @@ public class Vala.GIdlParser : CodeVisitor {
var m = new Method (node.name, return_type, current_source_reference);
m.access = MemberAccessibility.PUBLIC;
+ m.is_virtual = is_virtual;
+
// GIDL generator can't provide array parameter information yet
m.no_array_length = true;