diff options
Diffstat (limited to 'vala')
-rw-r--r-- | vala/valaattributeprocessor.vala | 18 | ||||
-rw-r--r-- | vala/valacallback.vala | 8 | ||||
-rw-r--r-- | vala/valaclass.vala | 12 | ||||
-rw-r--r-- | vala/valacodevisitor.vala | 72 | ||||
-rw-r--r-- | vala/valaenum.vala | 12 | ||||
-rw-r--r-- | vala/valaflags.vala | 6 | ||||
-rw-r--r-- | vala/valainterface.vala | 10 | ||||
-rw-r--r-- | vala/valainterfacewriter.vala | 86 | ||||
-rw-r--r-- | vala/valamemorymanager.vala | 12 | ||||
-rw-r--r-- | vala/valaparser.vala | 2 | ||||
-rw-r--r-- | vala/valasemanticanalyzer.vala | 98 | ||||
-rw-r--r-- | vala/valastruct.vala | 12 | ||||
-rw-r--r-- | vala/valasymbolbuilder.vala | 88 | ||||
-rw-r--r-- | vala/valasymbolresolver.vala | 24 |
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; } |