vala r1315 - in trunk: . vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1315 - in trunk: . vala
- Date: Sat, 26 Apr 2008 08:29:51 +0100 (BST)
Author: juergbi
Date: Sat Apr 26 07:29:51 2008
New Revision: 1315
URL: http://svn.gnome.org/viewvc/vala?rev=1315&view=rev
Log:
2008-04-26 Juerg Billeter <j bitron ch>
* vala/valanamespace.vala:
* vala/valaparser.vala:
Respect nested namespaces when merging namespaces, fixes bug 529438
Modified:
trunk/ChangeLog
trunk/vala/valanamespace.vala
trunk/vala/valaparser.vala
Modified: trunk/vala/valanamespace.vala
==============================================================================
--- trunk/vala/valanamespace.vala (original)
+++ trunk/vala/valanamespace.vala Sat Apr 26 07:29:51 2008
@@ -63,8 +63,46 @@
* @param ns a namespace
*/
public void add_namespace (Namespace ns) {
- namespaces.add (ns);
- scope.add (ns.name, ns);
+ if (scope.lookup (ns.name) is Namespace) {
+ // merge if namespace already exists
+ var old_ns = (Namespace) scope.lookup (ns.name);
+ if (old_ns.external_package && !ns.external_package) {
+ old_ns.source_reference = ns.source_reference;
+ }
+ foreach (Namespace sub_ns in ns.get_namespaces ()) {
+ old_ns.add_namespace (sub_ns);
+ }
+ foreach (Class cl in ns.get_classes ()) {
+ old_ns.add_class (cl);
+ }
+ foreach (Struct st in ns.get_structs ()) {
+ old_ns.add_struct (st);
+ }
+ foreach (Interface iface in ns.get_interfaces ()) {
+ old_ns.add_interface (iface);
+ }
+ foreach (Delegate d in ns.get_delegates ()) {
+ old_ns.add_delegate (d);
+ }
+ foreach (Enum en in ns.get_enums ()) {
+ old_ns.add_enum (en);
+ }
+ foreach (ErrorDomain ed in ns.get_error_domains ()) {
+ old_ns.add_error_domain (ed);
+ }
+ foreach (Constant c in ns.get_constants ()) {
+ old_ns.add_constant (c);
+ }
+ foreach (Field f in ns.get_fields ()) {
+ old_ns.add_field (f);
+ }
+ foreach (Method m in ns.get_methods ()) {
+ old_ns.add_method (m);
+ }
+ } else {
+ namespaces.add (ns);
+ scope.add (ns.name, ns);
+ }
}
/**
@@ -82,8 +120,30 @@
* @param cl a class
*/
public void add_class (Class cl) {
- classes.add (cl);
- scope.add (cl.name, cl);
+ if (scope.lookup (cl.name) is Class) {
+ // merge
+ var old_class = (Class) scope.lookup (cl.name);
+ foreach (DataType base_type in cl.get_base_types ()) {
+ old_class.add_base_type (base_type);
+ }
+ foreach (Field f in cl.get_fields ()) {
+ old_class.add_field (f);
+ }
+ foreach (Method m in cl.get_methods ()) {
+ if (m == cl.default_construction_method && old_class.default_construction_method != null) {
+ // ignore secondary default creation method
+ continue;
+ }
+ old_class.add_method (m);
+ }
+ if (cl.constructor != null) {
+ old_class.constructor = cl.constructor;
+ }
+ cl.source_reference.file.remove_node (cl);
+ } else {
+ classes.add (cl);
+ scope.add (cl.name, cl);
+ }
}
/**
Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala (original)
+++ trunk/vala/valaparser.vala Sat Apr 26 07:29:51 2008
@@ -1807,65 +1807,7 @@
void parse_namespace_member (Namespace ns) throws ParseError {
var sym = parse_declaration ();
if (sym is Namespace) {
- if (ns.scope.lookup (sym.name) is Namespace) {
- // merge if namespace already exists
- var old_ns = (Namespace) ns.scope.lookup (sym.name);
- var new_ns = (Namespace) sym;
- if (old_ns.external_package && !new_ns.external_package) {
- old_ns.source_reference = new_ns.source_reference;
- }
- foreach (Class cl in new_ns.get_classes ()) {
- if (old_ns.scope.lookup (cl.name) is Class) {
- // merge
- var old_class = (Class) old_ns.scope.lookup (cl.name);
- foreach (DataType base_type in cl.get_base_types ()) {
- old_class.add_base_type (base_type);
- }
- foreach (Field f in cl.get_fields ()) {
- old_class.add_field (f);
- }
- foreach (Method m in cl.get_methods ()) {
- if (m == cl.default_construction_method && old_class.default_construction_method != null) {
- // ignore secondary default creation method
- continue;
- }
- old_class.add_method (m);
- }
- if (cl.constructor != null) {
- old_class.constructor = cl.constructor;
- }
- scanner.source_file.remove_node (cl);
- } else {
- old_ns.add_class (cl);
- }
- }
- foreach (Struct st in new_ns.get_structs ()) {
- old_ns.add_struct (st);
- }
- foreach (Interface iface in new_ns.get_interfaces ()) {
- old_ns.add_interface (iface);
- }
- foreach (Delegate d in new_ns.get_delegates ()) {
- old_ns.add_delegate (d);
- }
- foreach (Enum en in new_ns.get_enums ()) {
- old_ns.add_enum (en);
- }
- foreach (ErrorDomain ed in new_ns.get_error_domains ()) {
- old_ns.add_error_domain (ed);
- }
- foreach (Constant c in new_ns.get_constants ()) {
- old_ns.add_constant (c);
- }
- foreach (Field f in new_ns.get_fields ()) {
- old_ns.add_field (f);
- }
- foreach (Method m in new_ns.get_methods ()) {
- old_ns.add_method (m);
- }
- } else {
- ns.add_namespace ((Namespace) sym);
- }
+ ns.add_namespace ((Namespace) sym);
} else if (sym is Class) {
ns.add_class ((Class) sym);
} else if (sym is Interface) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]