summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
Diffstat (limited to 'vala')
-rw-r--r--vala/valaattributeprocessor.vala18
-rw-r--r--vala/valacallback.vala8
-rw-r--r--vala/valaclass.vala12
-rw-r--r--vala/valacodevisitor.vala72
-rw-r--r--vala/valaenum.vala12
-rw-r--r--vala/valaflags.vala6
-rw-r--r--vala/valainterface.vala10
-rw-r--r--vala/valainterfacewriter.vala86
-rw-r--r--vala/valamemorymanager.vala12
-rw-r--r--vala/valaparser.vala2
-rw-r--r--vala/valasemanticanalyzer.vala98
-rw-r--r--vala/valastruct.vala12
-rw-r--r--vala/valasymbolbuilder.vala88
-rw-r--r--vala/valasymbolresolver.vala24
14 files changed, 192 insertions, 268 deletions
diff --git a/vala/valaattributeprocessor.vala b/vala/valaattributeprocessor.vala
index 9300718fe..d70dcccf0 100644
--- a/vala/valaattributeprocessor.vala
+++ b/vala/valaattributeprocessor.vala
@@ -46,23 +46,29 @@ public class Vala.AttributeProcessor : CodeVisitor {
ns.accept_children (this);
}
- public override void visit_begin_class (Class! cl) {
+ public override void visit_class (Class! cl) {
cl.process_attributes ();
+
+ cl.accept_children (this);
}
- public override void visit_begin_struct (Struct! st) {
+ public override void visit_struct (Struct! st) {
st.process_attributes ();
+
+ st.accept_children (this);
}
- public override void visit_begin_interface (Interface! iface) {
+ public override void visit_interface (Interface! iface) {
iface.process_attributes ();
+
+ iface.accept_children (this);
}
- public override void visit_begin_enum (Enum! en) {
+ public override void visit_enum (Enum! en) {
en.process_attributes ();
}
- public override void visit_begin_flags (Flags! fl) {
+ public override void visit_flags (Flags! fl) {
fl.process_attributes ();
}
@@ -78,7 +84,7 @@ public class Vala.AttributeProcessor : CodeVisitor {
prop.process_attributes ();
}
- public override void visit_begin_callback (Callback! cb) {
+ public override void visit_callback (Callback! cb) {
cb.process_attributes ();
}
diff --git a/vala/valacallback.vala b/vala/valacallback.vala
index c563622f0..c2d3fd7f8 100644
--- a/vala/valacallback.vala
+++ b/vala/valacallback.vala
@@ -130,10 +130,12 @@ public class Vala.Callback : DataType {
return true;
}
-
+
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_callback (this);
+ visitor.visit_callback (this);
+ }
+ public override void accept_children (CodeVisitor! visitor) {
foreach (TypeParameter p in type_parameters) {
p.accept (visitor);
}
@@ -143,8 +145,6 @@ public class Vala.Callback : DataType {
foreach (FormalParameter! param in parameters) {
param.accept (visitor);
}
-
- visitor.visit_end_callback (this);
}
public override string get_cname (bool const_type = false) {
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index 24303e3a8..d960ec9cf 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -229,10 +229,12 @@ public class Vala.Class : DataType {
public ref List<weak Signal> get_signals () {
return signals.copy ();
}
-
+
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_class (this);
-
+ visitor.visit_class (this);
+ }
+
+ public override void accept_children (CodeVisitor! visitor) {
foreach (TypeReference type in base_types) {
type.accept (visitor);
}
@@ -268,10 +270,8 @@ public class Vala.Class : DataType {
if (destructor != null) {
destructor.accept (visitor);
}
-
- visitor.visit_end_class (this);
}
-
+
public override string get_cname (bool const_type = false) {
if (cname == null) {
cname = "%s%s".printf (@namespace.get_cprefix (), name);
diff --git a/vala/valacodevisitor.vala b/vala/valacodevisitor.vala
index eab68f1b6..3c669e5ec 100644
--- a/vala/valacodevisitor.vala
+++ b/vala/valacodevisitor.vala
@@ -44,67 +44,35 @@ public abstract class Vala.CodeVisitor {
}
/**
- * Visit operation called at beginning of classes.
+ * Visit operation called for classes.
*
* @param cl a class
*/
- public virtual void visit_begin_class (Class! cl) {
+ public virtual void visit_class (Class! cl) {
}
/**
- * Visit operation called at end of classes.
- *
- * @param cl a class
- */
- public virtual void visit_end_class (Class! cl) {
- }
-
- /**
- * Visit operation called at beginning of structs.
- *
- * @param st a struct
- */
- public virtual void visit_begin_struct (Struct! st) {
- }
-
- /**
- * Visit operation called at end of structs.
+ * Visit operation called for structs.
*
* @param st a struct
*/
- public virtual void visit_end_struct (Struct! st) {
- }
-
- /**
- * Visit operation called at beginning of interfaces.
- *
- * @param iface an interface
- */
- public virtual void visit_begin_interface (Interface! iface) {
+ public virtual void visit_struct (Struct! st) {
}
/**
- * Visit operation called at end of interfaces.
+ * Visit operation called for interfaces.
*
* @param iface an interface
*/
- public virtual void visit_end_interface (Interface! iface) {
+ public virtual void visit_interface (Interface! iface) {
}
/**
- * Visit operation called at beginning of enums.
+ * Visit operation called for enums.
*
* @param en an enum
*/
- public virtual void visit_begin_enum (Enum! en) {
- }
-
- /**
- * Visit operation called at end of enums.
- *
- * @param en an enum
- */
- public virtual void visit_end_enum (Enum! en) {
+ public virtual void visit_enum (Enum! en) {
}
/**
@@ -116,19 +84,11 @@ public abstract class Vala.CodeVisitor {
}
/**
- * Visit operation called at beginning of flags.
- *
- * @param fl a flags
- */
- public virtual void visit_begin_flags (Flags! fl) {
- }
-
- /**
- * Visit operation called at end of flags.
+ * Visit operation called for flags.
*
* @param fl a flags
*/
- public virtual void visit_end_flags (Flags! fl) {
+ public virtual void visit_flags (Flags! fl) {
}
/**
@@ -140,19 +100,11 @@ public abstract class Vala.CodeVisitor {
}
/**
- * Visit operation called at beginning of callbacks.
- *
- * @param cb a callback
- */
- public virtual void visit_begin_callback (Callback! cb) {
- }
-
- /**
- * Visit operation called at end of callbacks.
+ * Visit operation called for callbacks.
*
* @param cb a callback
*/
- public virtual void visit_end_callback (Callback! cb) {
+ public virtual void visit_callback (Callback! cb) {
}
/**
diff --git a/vala/valaenum.vala b/vala/valaenum.vala
index a759c00cd..63ac6af0a 100644
--- a/vala/valaenum.vala
+++ b/vala/valaenum.vala
@@ -1,6 +1,6 @@
/* valaenum.vala
*
- * Copyright (C) 2006 Jürg Billeter
+ * Copyright (C) 2006-2007 Jürg Billeter
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -50,15 +50,15 @@ public class Vala.Enum : DataType {
public void add_value (EnumValue! value) {
values.append (value);
}
-
+
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_enum (this);
-
+ visitor.visit_enum (this);
+ }
+
+ public override void accept_children (CodeVisitor! visitor) {
foreach (EnumValue value in values) {
value.accept (visitor);
}
-
- visitor.visit_end_enum (this);
}
public override string get_cname (bool const_type = false) {
diff --git a/vala/valaflags.vala b/vala/valaflags.vala
index d47cb8b82..8d8374720 100644
--- a/vala/valaflags.vala
+++ b/vala/valaflags.vala
@@ -50,13 +50,13 @@ public class Vala.Flags : DataType {
}
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_flags (this);
+ visitor.visit_flags (this);
+ }
+ public override void accept_children (CodeVisitor! visitor) {
foreach (FlagsValue value in values) {
value.accept (visitor);
}
-
- visitor.visit_end_flags (this);
}
public override string get_cname (bool const_type = false) {
diff --git a/vala/valainterface.vala b/vala/valainterface.vala
index a9abea8f4..2a7646941 100644
--- a/vala/valainterface.vala
+++ b/vala/valainterface.vala
@@ -184,10 +184,12 @@ public class Vala.Interface : DataType {
public override ref string get_upper_case_cname (string infix) {
return get_lower_case_cname (infix).up ();
}
-
+
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_interface (this);
-
+ visitor.visit_interface (this);
+ }
+
+ public override void accept_children (CodeVisitor! visitor) {
foreach (TypeReference type in prerequisites) {
type.accept (visitor);
}
@@ -207,8 +209,6 @@ public class Vala.Interface : DataType {
foreach (Signal sig in signals) {
sig.accept (visitor);
}
-
- visitor.visit_end_interface (this);
}
public override bool is_reference_type () {
diff --git a/vala/valainterfacewriter.vala b/vala/valainterfacewriter.vala
index e2bf4281b..2decde1eb 100644
--- a/vala/valainterfacewriter.vala
+++ b/vala/valainterfacewriter.vala
@@ -34,9 +34,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
int indent;
/* at begin of line */
bool bol = true;
-
- bool internal_scope = false;
-
+
string current_cheader_filename;
/**
@@ -88,9 +86,8 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_newline ();
}
- public override void visit_begin_class (Class! cl) {
+ public override void visit_class (Class! cl) {
if (cl.access == MemberAccessibility.PRIVATE) {
- internal_scope = true;
return;
}
@@ -132,21 +129,15 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
}
write_begin_block ();
- }
- public override void visit_end_class (Class! cl) {
- if (cl.access == MemberAccessibility.PRIVATE) {
- internal_scope = false;
- return;
- }
-
+ cl.accept_children (this);
+
write_end_block ();
write_newline ();
}
- public override void visit_begin_struct (Struct! st) {
+ public override void visit_struct (Struct! st) {
if (st.access == MemberAccessibility.PRIVATE) {
- internal_scope = true;
return;
}
@@ -159,21 +150,15 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_string ("public struct ");
write_identifier (st.name);
write_begin_block ();
- }
- public override void visit_end_struct (Struct! st) {
- if (st.access == MemberAccessibility.PRIVATE) {
- internal_scope = false;
- return;
- }
-
+ st.accept_children (this);
+
write_end_block ();
write_newline ();
}
- public override void visit_begin_interface (Interface! iface) {
+ public override void visit_interface (Interface! iface) {
if (iface.access == MemberAccessibility.PRIVATE) {
- internal_scope = true;
return;
}
@@ -183,21 +168,15 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_identifier (iface.name);
write_begin_block ();
- }
- public override void visit_end_interface (Interface! iface) {
- if (iface.access == MemberAccessibility.PRIVATE) {
- internal_scope = false;
- return;
- }
-
+ iface.accept_children (this);
+
write_end_block ();
write_newline ();
}
- public override void visit_begin_enum (Enum! en) {
+ public override void visit_enum (Enum! en) {
if (en.access == MemberAccessibility.PRIVATE) {
- internal_scope = true;
return;
}
@@ -208,32 +187,22 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_string ("public enum ");
write_identifier (en.name);
write_begin_block ();
- }
- public override void visit_end_enum (Enum! en) {
- if (en.access == MemberAccessibility.PRIVATE) {
- internal_scope = false;
- return;
- }
+ en.accept_children (this);
write_end_block ();
write_newline ();
}
public override void visit_enum_value (EnumValue! ev) {
- if (internal_scope) {
- return;
- }
-
write_indent ();
write_identifier (ev.name);
write_string (",");
write_newline ();
}
- public override void visit_begin_flags (Flags! fl) {
+ public override void visit_flags (Flags! fl) {
if (fl.access == MemberAccessibility.PRIVATE) {
- internal_scope = true;
return;
}
@@ -244,23 +213,14 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_string ("public flags ");
write_identifier (fl.name);
write_begin_block ();
- }
- public override void visit_end_flags (Flags! fl) {
- if (fl.access == MemberAccessibility.PRIVATE) {
- internal_scope = false;
- return;
- }
+ fl.accept_children (this);
write_end_block ();
write_newline ();
}
public override void visit_flags_value (FlagsValue! fv) {
- if (internal_scope) {
- return;
- }
-
write_indent ();
write_identifier (fv.name);
write_string (",");
@@ -268,10 +228,6 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
public override void visit_constant (Constant! c) {
- if (internal_scope) {
- return;
- }
-
write_indent ();
write_string ("public const ");
write_string (c.type_reference.data_type.symbol.get_full_name ());
@@ -283,7 +239,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
public override void visit_field (Field! f) {
- if (internal_scope || f.access == MemberAccessibility.PRIVATE) {
+ if (f.access == MemberAccessibility.PRIVATE) {
return;
}
@@ -366,8 +322,8 @@ public class Vala.InterfaceWriter : CodeVisitor {
write_string (")");
}
- public override void visit_begin_callback (Callback! cb) {
- if (internal_scope || cb.access == MemberAccessibility.PRIVATE) {
+ public override void visit_callback (Callback! cb) {
+ if (cb.access == MemberAccessibility.PRIVATE) {
return;
}
@@ -397,7 +353,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
public override void visit_begin_method (Method! m) {
- if (internal_scope || m.access == MemberAccessibility.PRIVATE || m.overrides) {
+ if (m.access == MemberAccessibility.PRIVATE || m.overrides) {
return;
}
@@ -482,10 +438,6 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
public override void visit_begin_property (Property! prop) {
- if (internal_scope) {
- return;
- }
-
if (prop.no_accessor_method) {
write_indent ();
write_string ("[NoAccessorMethod]");
@@ -530,7 +482,7 @@ public class Vala.InterfaceWriter : CodeVisitor {
}
public override void visit_begin_signal (Signal! sig) {
- if (internal_scope || sig.access == MemberAccessibility.PRIVATE) {
+ if (sig.access == MemberAccessibility.PRIVATE) {
return;
}
diff --git a/vala/valamemorymanager.vala b/vala/valamemorymanager.vala
index fa8291c08..175fef0a2 100644
--- a/vala/valamemorymanager.vala
+++ b/vala/valamemorymanager.vala
@@ -69,6 +69,18 @@ public class Vala.MemoryManager : CodeVisitor {
ns.accept_children (this);
}
+ public override void visit_class (Class! cl) {
+ cl.accept_children (this);
+ }
+
+ public override void visit_struct (Struct! st) {
+ st.accept_children (this);
+ }
+
+ public override void visit_interface (Interface! iface) {
+ iface.accept_children (this);
+ }
+
public override void visit_field (Field! f) {
if (f.initializer != null) {
if (f.type_reference.takes_ownership) {
diff --git a/vala/valaparser.vala b/vala/valaparser.vala
index 11b7f57b8..517959b5d 100644
--- a/vala/valaparser.vala
+++ b/vala/valaparser.vala
@@ -45,8 +45,6 @@ public class Vala.Parser : CodeVisitor {
source_file.comment = _file_comment;
}
- source_file.accept_children (this);
-
_file_comment = null;
}
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index 35c562d6c..bdb685273 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -118,7 +118,7 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
current_symbol = current_symbol.parent_symbol;
}
- public override void visit_begin_class (Class! cl) {
+ public override void visit_class (Class! cl) {
current_symbol = cl.symbol;
current_class = cl;
@@ -129,48 +129,9 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
foreach (TypeReference base_type_reference in cl.get_base_types ()) {
current_source_file.add_symbol_dependency (base_type_reference.data_type.symbol, SourceFileDependencyType.HEADER_FULL);
}
- }
-
- private ref List<DataType> get_all_prerequisites (Interface! iface) {
- List<DataType> ret = null;
-
- foreach (TypeReference prereq in iface.get_prerequisites ()) {
- DataType type = prereq.data_type;
- /* skip on previous errors */
- if (type == null) {
- continue;
- }
-
- ret.prepend (type);
- if (type is Interface) {
- ret.concat (get_all_prerequisites ((Interface) type));
-
- }
- }
-
- ret.reverse ();
- return #ret;
- }
- private bool class_is_a (Class! cl, DataType! t) {
- if (cl == t) {
- return true;
- }
+ cl.accept_children (this);
- foreach (TypeReference base_type in cl.get_base_types ()) {
- if (base_type.data_type is Class) {
- if (class_is_a ((Class) base_type.data_type, t)) {
- return true;
- }
- } else if (base_type.data_type == t) {
- return true;
- }
- }
-
- return false;
- }
-
- public override void visit_end_class (Class! cl) {
/* gather all prerequisites */
List<DataType> prerequisites = null;
foreach (TypeReference base_type in cl.get_base_types ()) {
@@ -248,25 +209,64 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
current_class = null;
}
- public override void visit_begin_struct (Struct! st) {
+ private ref List<DataType> get_all_prerequisites (Interface! iface) {
+ List<DataType> ret = null;
+
+ foreach (TypeReference prereq in iface.get_prerequisites ()) {
+ DataType type = prereq.data_type;
+ /* skip on previous errors */
+ if (type == null) {
+ continue;
+ }
+
+ ret.prepend (type);
+ if (type is Interface) {
+ ret.concat (get_all_prerequisites ((Interface) type));
+
+ }
+ }
+
+ ret.reverse ();
+ return #ret;
+ }
+
+ private bool class_is_a (Class! cl, DataType! t) {
+ if (cl == t) {
+ return true;
+ }
+
+ foreach (TypeReference base_type in cl.get_base_types ()) {
+ if (base_type.data_type is Class) {
+ if (class_is_a ((Class) base_type.data_type, t)) {
+ return true;
+ }
+ } else if (base_type.data_type == t) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ public override void visit_struct (Struct! st) {
current_symbol = st.symbol;
current_struct = st;
- }
- public override void visit_end_struct (Struct! st) {
+ st.accept_children (this);
+
current_symbol = current_symbol.parent_symbol;
current_struct = null;
}
- public override void visit_begin_interface (Interface! iface) {
+ public override void visit_interface (Interface! iface) {
current_symbol = iface.symbol;
foreach (TypeReference prerequisite_reference in iface.get_prerequisites ()) {
current_source_file.add_symbol_dependency (prerequisite_reference.data_type.symbol, SourceFileDependencyType.HEADER_FULL);
}
- }
- public override void visit_end_interface (Interface! iface) {
+ iface.accept_children (this);
+
/* check prerequisites */
Class prereq_class;
foreach (TypeReference prereq in iface.get_prerequisites ()) {
@@ -291,6 +291,10 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
current_symbol = current_symbol.parent_symbol;
}
+ public override void visit_callback (Callback! cb) {
+ cb.accept_children (this);
+ }
+
public override void visit_constant (Constant! c) {
if (!current_source_file.pkg) {
if (c.initializer == null) {
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index 09c587aed..0cf748288 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -122,10 +122,12 @@ public class Vala.Struct : DataType {
public ref List<weak Method> get_methods () {
return methods.copy ();
}
-
+
public override void accept (CodeVisitor! visitor) {
- visitor.visit_begin_struct (this);
-
+ visitor.visit_struct (this);
+ }
+
+ public override void accept_children (CodeVisitor! visitor) {
foreach (TypeParameter p in type_parameters) {
p.accept (visitor);
}
@@ -141,10 +143,8 @@ public class Vala.Struct : DataType {
foreach (Method m in methods) {
m.accept (visitor);
}
-
- visitor.visit_end_struct (this);
}
-
+
public override string get_cname (bool const_type = false) {
if (const_type && const_cname != null) {
return const_cname;
diff --git a/vala/valasymbolbuilder.vala b/vala/valasymbolbuilder.vala
index 39018d156..a3843a398 100644
--- a/vala/valasymbolbuilder.vala
+++ b/vala/valasymbolbuilder.vala
@@ -86,7 +86,12 @@ public class Vala.SymbolBuilder : CodeVisitor {
return node.symbol;
}
- public override void visit_begin_class (Class! cl) {
+ public override void visit_class (Class! cl) {
+ if (cl.error) {
+ /* skip classes with errors */
+ return;
+ }
+
var class_symbol = current_symbol.lookup (cl.name);
if (class_symbol == null || !(class_symbol.node is Class)) {
class_symbol = add_symbol (cl.name, cl);
@@ -127,14 +132,9 @@ public class Vala.SymbolBuilder : CodeVisitor {
}
current_symbol = class_symbol;
- }
-
- public override void visit_end_class (Class! cl) {
- if (cl.error) {
- /* skip classes with errors */
- return;
- }
-
+
+ cl.accept_children (this);
+
current_symbol = current_symbol.parent_symbol;
if (cl.symbol == null) {
@@ -142,54 +142,54 @@ public class Vala.SymbolBuilder : CodeVisitor {
cl.@namespace.remove_class (cl);
}
}
-
- public override void visit_begin_struct (Struct! st) {
+
+ public override void visit_struct (Struct! st) {
+ if (st.error) {
+ /* skip structs with errors */
+ return;
+ }
+
if (add_symbol (st.name, st) == null) {
return;
}
current_symbol = st.symbol;
+
+ st.accept_children (this);
+
+ current_symbol = current_symbol.parent_symbol;
}
-
- public override void visit_end_struct (Struct! st) {
- if (st.error) {
- /* skip structs with errors */
+
+ public override void visit_interface (Interface! iface) {
+ if (iface.error) {
+ /* skip interfaces with errors */
return;
}
- current_symbol = current_symbol.parent_symbol;
- }
-
- public override void visit_begin_interface (Interface! iface) {
if (add_symbol (iface.name, iface) == null) {
return;
}
current_symbol = iface.symbol;
+
+ iface.accept_children (this);
+
+ current_symbol = current_symbol.parent_symbol;
}
-
- public override void visit_end_interface (Interface! iface) {
- if (iface.error) {
- /* skip interfaces with errors */
+
+ public override void visit_enum (Enum! en) {
+ if (en.error) {
+ /* skip enums with errors */
return;
}
-
- current_symbol = current_symbol.parent_symbol;
- }
- public override void visit_begin_enum (Enum! en) {
if (add_symbol (en.name, en) == null) {
return;
}
current_symbol = en.symbol;
- }
- public override void visit_end_enum (Enum! en) {
- if (en.error) {
- /* skip enums with errors */
- return;
- }
+ en.accept_children (this);
current_symbol = current_symbol.parent_symbol;
}
@@ -199,19 +199,19 @@ public class Vala.SymbolBuilder : CodeVisitor {
current_symbol.add (ev.name, ev.symbol);
}
- public override void visit_begin_flags (Flags! fl) {
+ public override void visit_flags (Flags! fl) {
+ if (fl.error) {
+ /* skip flags with errors */
+ return;
+ }
+
if (add_symbol (fl.name, fl) == null) {
return;
}
current_symbol = fl.symbol;
- }
- public override void visit_end_flags (Flags! fl) {
- if (fl.error) {
- /* skip flags with errors */
- return;
- }
+ fl.accept_children (this);
current_symbol = current_symbol.parent_symbol;
}
@@ -221,15 +221,15 @@ public class Vala.SymbolBuilder : CodeVisitor {
current_symbol.add (fv.name, fv.symbol);
}
- public override void visit_begin_callback (Callback! cb) {
+ public override void visit_callback (Callback! cb) {
if (add_symbol (cb.name, cb) == null) {
return;
}
current_symbol = cb.symbol;
- }
-
- public override void visit_end_callback (Callback! cb) {
+
+ cb.accept_children (this);
+
if (cb.error) {
/* skip enums with errors */
return;
diff --git a/vala/valasymbolresolver.vala b/vala/valasymbolresolver.vala
index eb7bd33b3..ec1566e76 100644
--- a/vala/valasymbolresolver.vala
+++ b/vala/valasymbolresolver.vala
@@ -68,11 +68,11 @@ public class Vala.SymbolResolver : CodeVisitor {
current_scope = root_symbol;
}
- public override void visit_begin_class (Class! cl) {
+ public override void visit_class (Class! cl) {
current_scope = cl.symbol;
- }
- public override void visit_end_class (Class! cl) {
+ cl.accept_children (this);
+
foreach (TypeReference type in cl.get_base_types ()) {
if (type.data_type is Class) {
if (cl.base_class != null) {
@@ -92,27 +92,27 @@ public class Vala.SymbolResolver : CodeVisitor {
current_scope = current_scope.parent_symbol;
}
- public override void visit_begin_struct (Struct! st) {
+ public override void visit_struct (Struct! st) {
current_scope = st.symbol;
- }
- public override void visit_end_struct (Struct! st) {
+ st.accept_children (this);
+
current_scope = current_scope.parent_symbol;
}
- public override void visit_begin_interface (Interface! iface) {
+ public override void visit_interface (Interface! iface) {
current_scope = iface.symbol;
- }
- public override void visit_end_interface (Interface! iface) {
+ iface.accept_children (this);
+
current_scope = current_scope.parent_symbol;
}
- public override void visit_begin_callback (Callback! cb) {
+ public override void visit_callback (Callback! cb) {
current_scope = cb.symbol;
- }
- public override void visit_end_callback (Callback! cb) {
+ cb.accept_children (this);
+
current_scope = current_scope.parent_symbol;
}