diff options
author | Jürg Billeter <j@bitron.ch> | 2006-08-24 16:00:54 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2006-08-24 16:00:54 +0000 |
commit | 687e33b5abc1c5f8e9b3cec02a660d4d44cede3f (patch) | |
tree | 8c4e5cf94805dccd4595d5745c118352df991dbc /vapigen | |
parent | 0e8ad38dd503133ef2a7006a3de4084f8f1cf768 (diff) | |
download | vala-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/ChangeLog | 4 | ||||
-rw-r--r-- | vapigen/vapigen/valagidlparser.vala | 29 |
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; |