diff options
author | Juerg Billeter <j@bitron.ch> | 2007-07-21 14:29:16 +0000 |
---|---|---|
committer | Jürg Billeter <juergbi@src.gnome.org> | 2007-07-21 14:29:16 +0000 |
commit | db24aa20579b766161a070df69923e9f56ab7dd3 (patch) | |
tree | 92e6b6a6c5f6638c4ccce8cab3e2348b83286c03 /vapigen/valagidlparser.vala | |
parent | 611df119392203ed4648f754139902547c2ebee8 (diff) | |
download | vala-db24aa20579b766161a070df69923e9f56ab7dd3.tar.gz |
derive from Symbol class where appropriate and move symbol table into
2007-07-21 Juerg Billeter <j@bitron.ch>
* vala/Makefile.am, vala/parser.y, vala/scanner.l, vala/vala.h,
vala/valaarray.vala, vala/valaarraylengthfield.vala,
vala/valaarrayresizemethod.vala, vala/valaattributeprocessor.vala,
vala/valablock.vala, vala/valabreakstatement.vala,
vala/valacallback.vala, vala/valaclass.vala,
vala/valacodecontext.vala, vala/valacodenode.vala,
vala/valacodevisitor.vala, vala/valaconstant.vala,
vala/valaconstructor.vala, vala/valacontinuestatement.vala,
vala/valacreationmethod.vala, vala/valadatatype.vala,
vala/valadeclarationstatement.vala, vala/valadestructor.vala,
vala/valadostatement.vala, vala/valaemptystatement.vala,
vala/valaenum.vala, vala/valaenumvalue.vala,
vala/valaexpressionstatement.vala, vala/valafield.vala,
vala/valaflags.vala, vala/valaflagsvalue.vala,
vala/valaforeachstatement.vala, vala/valaformalparameter.vala,
vala/valaforstatement.vala, vala/valaifstatement.vala,
vala/valainterface.vala, vala/valainterfacewriter.vala,
vala/valalockstatement.vala, vala/valamember.vala,
vala/valamemorymanager.vala, vala/valamethod.vala,
vala/valanamespace.vala, vala/valaproperty.vala,
vala/valapropertyaccessor.vala, vala/valareturnstatement.vala,
vala/valascope.vala, vala/valasemanticanalyzer.vala,
vala/valasignal.vala, vala/valasourcefile.vala,
vala/valastatement.vala, vala/valastruct.vala,
vala/valaswitchstatement.vala, vala/valasymbol.vala,
vala/valasymbolbuilder.vala, vala/valasymbolresolver.vala,
vala/valathrowstatement.vala, vala/valatrystatement.vala,
vala/valatypeparameter.vala, vala/valatypereference.vala,
vala/valavariabledeclarator.vala, vala/valawhilestatement.vala,
gobject/valacodegenerator.vala,
gobject/valacodegeneratorassignment.vala,
gobject/valacodegeneratorclass.vala,
gobject/valacodegeneratorinterface.vala,
gobject/valacodegeneratorinvocationexpression.vala,
gobject/valacodegeneratormemberaccess.vala,
gobject/valacodegeneratormethod.vala,
gobject/valacodegeneratorsignal.vala,
gobject/valacodegeneratorstruct.vala, compiler/valacompiler.vala,
vapi/atk.vala, vapi/gdk-2.0.vala, vapi/gio-standalone.vala,
vapi/glib-2.0.vala, vapi/gstreamer-0.10.vala, vapi/gtk+-2.0.vala,
vapi/packages/gstreamer-0.10/gstreamer-0.10-custom.vala,
vapi/packages/gtk+-2.0/gtk+-2.0-custom.vala, vapi/pango.vala,
vapi/vte.vala, vapigen/valagidlparser.vala, vapigen/valavapigen.vala:
derive from Symbol class where appropriate and move symbol table into
separate Scope class
svn path=/trunk/; revision=366
Diffstat (limited to 'vapigen/valagidlparser.vala')
-rw-r--r-- | vapigen/valagidlparser.vala | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala index ee9f362d5..536f225d5 100644 --- a/vapigen/valagidlparser.vala +++ b/vapigen/valagidlparser.vala @@ -29,6 +29,8 @@ using GLib; public class Vala.GIdlParser : CodeVisitor { private CodeContext context; + private SourceFile current_source_file; + private SourceReference current_source_reference; private DataType current_data_type; @@ -54,7 +56,9 @@ public class Vala.GIdlParser : CodeVisitor { private void parse_file (SourceFile! source_file) { string metadata_filename = "%s.metadata".printf (source_file.filename.ndup (source_file.filename.size () - ".gidl".size ())); - + + current_source_file = source_file; + codenode_attributes_map = new HashTable.full (str_hash, str_equal, g_free, g_free); if (FileUtils.test (metadata_filename, FileTest.EXISTS)) { @@ -83,7 +87,9 @@ public class Vala.GIdlParser : CodeVisitor { foreach (IdlModule module in modules) { var ns = parse_module (module); - context.add_namespace (ns); + if (ns != null) { + context.root.add_namespace (ns); + } } } catch (MarkupError e) { stdout.printf ("error parsing GIDL file: %s\n", e.message); @@ -109,7 +115,14 @@ public class Vala.GIdlParser : CodeVisitor { } private Namespace parse_module (IdlModule! module) { - var ns = new Namespace (module.name, current_source_reference); + Symbol sym = context.root.scope.lookup (module.name); + Namespace ns; + if (sym is Namespace) { + ns = (Namespace) sym; + ns.pkg = false; + } else { + ns = new Namespace (module.name, current_source_reference); + } var attributes = get_attributes (ns.name); if (attributes != null) { @@ -133,6 +146,7 @@ public class Vala.GIdlParser : CodeVisitor { } cb.name = fix_type_name (cb.name, module); ns.add_callback (cb); + current_source_file.add_node (cb); } else if (node.type == IdlNodeTypeId.STRUCT) { var st = parse_struct ((IdlNodeStruct) node); if (st == null) { @@ -140,36 +154,46 @@ public class Vala.GIdlParser : CodeVisitor { } st.name = fix_type_name (st.name, module); ns.add_struct (st); + current_source_file.add_node (st); } else if (node.type == IdlNodeTypeId.BOXED) { var st = parse_boxed ((IdlNodeBoxed) node); st.name = fix_type_name (st.name, module); ns.add_struct (st); st.set_type_id (st.get_upper_case_cname ("TYPE_")); + current_source_file.add_node (st); } else if (node.type == IdlNodeTypeId.ENUM) { var en = parse_enum ((IdlNodeEnum) node); en.name = fix_type_name (en.name, module); ns.add_enum (en); + current_source_file.add_node (en); } else if (node.type == IdlNodeTypeId.OBJECT) { var cl = parse_object ((IdlNodeInterface) node); cl.name = fix_type_name (cl.name, module); ns.add_class (cl); + current_source_file.add_node (cl); } else if (node.type == IdlNodeTypeId.INTERFACE) { var iface = parse_interface ((IdlNodeInterface) node); iface.name = fix_type_name (iface.name, module); ns.add_interface (iface); + current_source_file.add_node (iface); } else if (node.type == IdlNodeTypeId.CONSTANT) { var c = parse_constant ((IdlNodeConstant) node); c.name = fix_const_name (c.name, module); ns.add_constant (c); + current_source_file.add_node (c); } else if (node.type == IdlNodeTypeId.FUNCTION) { var m = parse_function ((IdlNodeFunction) node); if (m != null) { m.instance = false; ns.add_method (m); + current_source_file.add_node (m); } } } + if (sym is Namespace) { + return null; + } return ns; } |