GtkSharp/generator/GenBase.cs
Dan Winship 85d88fe1ca Change the way generatable validation works. Some generatable
properties can't be set until Validate-time (eg, Method.IsGetter),
	but it's annoying for every potential user of those properties to
	have to make sure it has Validated the generatable first. So now
	we add an explicit Validate() step after everything is loaded but
	before anything is Generated, so that at Generation time,
	everything can be assumed to have been Validated.

	* generator/IGeneratable.cs: add "bool Validate()"

	* generator/CodeGenerator.cs (Main): after loading all of the
	generatables, DeAlias the SymbolTable, Validate() all the
	generatables, and discard any invalid ones.

	* generator/*.cs: Implement Validate() trivially in generatables
	that didn't implement it before. Move Validate() calls from
	Generate() to Validate(). Remove non-hierarchical Validate()
	calls.

	* generator/SymbolTable.cs: GPtrArray is IntPtr, not IntPtr[]

svn path=/trunk/gtk-sharp/; revision=48046
2005-08-05 20:34:45 +00:00

131 lines
2.9 KiB
C#

// GtkSharp.Generation.GenBase.cs - The Generatable base class.
//
// Author: Mike Kestner <mkestner@novell.com>
//
// Copyright (c) 2001-2002 Mike Kestner
// Copyright (c) 2004 Novell, Inc.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the
// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.
namespace GtkSharp.Generation {
using System;
using System.IO;
using System.Xml;
public abstract class GenBase : IGeneratable {
private XmlElement ns;
private XmlElement elem;
protected GenBase (XmlElement ns, XmlElement elem)
{
this.ns = ns;
this.elem = elem;
}
public string CName {
get {
return elem.GetAttribute ("cname");
}
}
public XmlElement Elem {
get {
return elem;
}
}
public string LibraryName {
get {
return ns.GetAttribute ("library");
}
}
public virtual string MarshalReturnType {
get {
return MarshalType;
}
}
public abstract string MarshalType { get; }
public string Name {
get {
return elem.GetAttribute ("name");
}
}
public string NS {
get {
return ns.GetAttribute ("name");
}
}
public string QualifiedName {
get {
return NS + "." + Name;
}
}
public virtual string ToNativeReturnType {
get {
return MarshalType;
}
}
protected void AppendCustom (StreamWriter sw, string custom_dir)
{
char sep = Path.DirectorySeparatorChar;
string custom = custom_dir + sep + Name + ".custom";
if (File.Exists(custom)) {
sw.WriteLine ("#region Customized extensions");
sw.WriteLine ("#line 1 \"" + Name + ".custom\"");
FileStream custstream = new FileStream(custom, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(custstream);
sw.WriteLine (sr.ReadToEnd ());
sw.WriteLine ("#endregion");
sr.Close ();
}
}
public abstract string CallByName (string var);
public abstract string FromNative (string var);
public virtual string FromNativeReturn (string var)
{
return FromNative (var);
}
public virtual string ToNativeReturn (string var)
{
return CallByName (var);
}
public abstract bool Validate ();
public void Generate ()
{
GenerationInfo geninfo = new GenerationInfo (ns);
Generate (geninfo);
}
public abstract void Generate (GenerationInfo geninfo);
}
}