I've recently updated mcs from AnonCVS and I have the following problem
compiling CVS gtk-sharp:

"gtk-sharp/parser/gapi-fixup.cs" (as it's quite small, I've attached a copy)

--------------
$ mcs gapi-fixup.cs

** (/opt/mono/bin/mcs.exe:28302): WARNING **: Missing method
DiscardBufferedData in assembly /opt/mono/bin/mcs.exe typeref index 69
System.NullReferenceException: A null value was found where an object
instance was required
in (unmanaged) Mono.CSharp.SeekableStreamReader:set_Position (int)
in <0x0016e> Mono.CSharp.Tokenizer:is_punct (char,bool&)
in <0x00349> Mono.CSharp.Tokenizer:xtoken ()
in <0x00017> Mono.CSharp.Tokenizer:token ()
in <0x002dc> Mono.CSharp.CSharpParser:yyparse (Mono.CSharp.yyParser.yyInput)
in <0x00079> Mono.CSharp.CSharpParser:parse ()

gapi-fixup.cs(72) error CS8025: Parsing error
Compilation failed: 1 error(s), 0 warnings
--------------

The problematic lines are:

 XmlElement node = ((IHasXmlNode)api_iter.Current).GetNode () as XmlElement;
 node.SetAttribute (attr_name, attr_iter.Current.Value);

after I comment them out - it compiles fine but that's obviously not the
solution.

Is it my fault or a bug?

Jarek
// GtkSharp.Parsing.gapi-fixup.cs - xml alteration engine.
//
// Author: Mike Kestner <[EMAIL PROTECTED]>
//
// (c) 2003 Mike Kestner

namespace GtkSharp.Parsing {

        using System;
        using System.IO;
        using System.Xml;
        using System.Xml.XPath;

        public class Fixup  {

                public static int Main (string[] args)
                {
                        if (args.Length != 2) {
                                Console.WriteLine ("Usage: gapi-fixup 
--metadata=<filename> --api=<filename>");
                                return 0;
                        }

                        string api_filename = "";
                        XmlDocument api_doc = new XmlDocument ();
                        XmlDocument meta_doc = new XmlDocument ();

                        foreach (string arg in args) {

                                if (arg.StartsWith("--metadata=")) {

                                        string meta_filename = arg.Substring (11);

                                        try {
                                                Stream stream = File.OpenRead 
(meta_filename);
                                                meta_doc.Load (stream);
                                                stream.Close ();
                                        } catch (XmlException e) {
                                                Console.WriteLine ("Invalid meta 
file.");
                                                Console.WriteLine (e);
                                                return 1;
                                        }

                                } else if (arg.StartsWith ("--api=")) {

                                        api_filename = arg.Substring (6);

                                        try {
                                                Stream stream = File.OpenRead 
(api_filename);
                                                api_doc.Load (stream);
                                                stream.Close ();
                                        } catch (XmlException e) {
                                                Console.WriteLine ("Invalid api 
file.");
                                                Console.WriteLine (e);
                                                return 1;
                                        }

                                } else {
                                        Console.WriteLine ("Usage: gapi-fixup 
--metadata=<filename> --api=<filename>");
                                        return 1;
                                }
                        }

                        XPathNavigator meta_nav = meta_doc.CreateNavigator ();
                        XPathNavigator api_nav = api_doc.CreateNavigator ();

                        XPathNodeIterator attr_iter = meta_nav.Select ("//attr");
                        while (attr_iter.MoveNext ()) {
                                string path = attr_iter.Current.GetAttribute ("path", 
"");
                                string attr_name = attr_iter.Current.GetAttribute 
("name", "");
                                XPathNodeIterator api_iter = api_nav.Select (path);
                                while (api_iter.MoveNext ()) {
                                        XmlElement node = 
((IHasXmlNode)api_iter.Current).GetNode() as XmlElement;
                                        node.SetAttribute (attr_name, 
attr_iter.Current.Value);
                                }
                        }

                        Stream out_stream = File.OpenWrite (api_filename);
                        api_doc.Save (out_stream);
                        out_stream.Close ();
                        return 0;
                }
        }
}

Reply via email to