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;
}
}
}