Browse Source

Extract the CLIForwardRefeferencePrinter class into its own file.

pull/1/head
triton 13 years ago
parent
commit
5d1f9a49c4
  1. 134
      src/Generator/Generators/CLI/CLIForwardRefeferencePrinter.cs
  2. 129
      src/Generator/Generators/CLI/CLIHelpers.cs

134
src/Generator/Generators/CLI/CLIForwardRefeferencePrinter.cs

@ -0,0 +1,134 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace Cxxi.Generators.CLI
{
public class CLIForwardRefeferencePrinter : IDeclVisitor<bool>
{
public readonly IList<string> Includes;
public readonly IList<string> Refs;
public CLIForwardRefeferencePrinter()
{
Includes = new List<string>();
Refs = new List<string>();
}
public bool VisitDeclaration(Declaration decl)
{
throw new NotImplementedException();
}
public bool VisitClassDecl(Class @class)
{
var completeDecl = @class.CompleteDeclaration as Class;
if (@class.IsIncomplete && completeDecl != null)
return VisitClassDecl(completeDecl);
if (@class.IsValueType)
{
Refs.Add(string.Format("value struct {0};", @class.Name));
return true;
}
Refs.Add(string.Format("ref class {0};", @class.Name));
return true;
}
public bool VisitFieldDecl(Field field)
{
Class @class;
if (field.Type.IsTagDecl(out @class))
{
if (@class.IsValueType)
Includes.Add(GetHeaderFromDecl(@class));
else
VisitClassDecl(@class);
return true;
}
Enumeration @enum;
if (field.Type.IsTagDecl(out @enum))
return VisitEnumDecl(@enum);
Includes.Add(GetHeaderFromDecl(field));
return true;
}
public bool VisitFunctionDecl(Function function)
{
throw new NotImplementedException();
}
public bool VisitMethodDecl(Method method)
{
throw new NotImplementedException();
}
public bool VisitParameterDecl(Parameter parameter)
{
throw new NotImplementedException();
}
public string GetHeaderFromDecl(Declaration decl)
{
var @namespace = decl.Namespace;
var unit = @namespace.TranslationUnit;
if (unit.Ignore)
return string.Empty;
if (unit.IsSystemHeader)
return string.Empty;
return Path.GetFileNameWithoutExtension(unit.FileName);
}
public bool VisitTypedefDecl(TypedefDecl typedef)
{
FunctionType function;
if (typedef.Type.IsPointerTo<FunctionType>(out function))
{
Includes.Add(GetHeaderFromDecl(typedef));
return true;
}
throw new NotImplementedException();
}
public bool VisitEnumDecl(Enumeration @enum)
{
if (@enum.Type.IsPrimitiveType(PrimitiveType.Int32))
{
Refs.Add(string.Format("enum struct {0};", @enum.Name));
return true;
}
Refs.Add(string.Format("enum struct {0} : {1};", @enum.Name,
@enum.Type));
return true;
}
public bool VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();
}
public bool VisitFunctionTemplateDecl(FunctionTemplate template)
{
throw new NotImplementedException();
}
public bool VisitMacroDefinition(MacroDefinition macro)
{
throw new NotImplementedException();
}
public bool VisitNamespace(Namespace @namespace)
{
throw new NotImplementedException();
}
}
}

129
src/Generator/Generators/CLI/CLIHelpers.cs

@ -1,138 +1,9 @@
using System; using System;
using System.Collections.Generic;
using System.IO; using System.IO;
using Cxxi.Types; using Cxxi.Types;
namespace Cxxi.Generators.CLI namespace Cxxi.Generators.CLI
{ {
public class CLIForwardRefeferencePrinter : IDeclVisitor<bool>
{
public readonly IList<string> Includes;
public readonly IList<string> Refs;
public CLIForwardRefeferencePrinter()
{
Includes = new List<string>();
Refs = new List<string>();
}
public bool VisitDeclaration(Declaration decl)
{
throw new NotImplementedException();
}
public bool VisitClassDecl(Class @class)
{
var completeDecl = @class.CompleteDeclaration as Class;
if (@class.IsIncomplete && completeDecl != null)
return VisitClassDecl(completeDecl);
if (@class.IsValueType)
{
Refs.Add(string.Format("value struct {0};", @class.Name));
return true;
}
Refs.Add(string.Format("ref class {0};", @class.Name));
return true;
}
public bool VisitFieldDecl(Field field)
{
Class @class;
if (field.Type.IsTagDecl(out @class))
{
if (@class.IsValueType)
Includes.Add(GetHeaderFromDecl(@class));
else
VisitClassDecl(@class);
return true;
}
Enumeration @enum;
if (field.Type.IsTagDecl(out @enum))
return VisitEnumDecl(@enum);
Includes.Add(GetHeaderFromDecl(field));
return true;
}
public bool VisitFunctionDecl(Function function)
{
throw new NotImplementedException();
}
public bool VisitMethodDecl(Method method)
{
throw new NotImplementedException();
}
public bool VisitParameterDecl(Parameter parameter)
{
throw new NotImplementedException();
}
public string GetHeaderFromDecl(Declaration decl)
{
var @namespace = decl.Namespace;
var unit = @namespace.TranslationUnit;
if (unit.Ignore)
return string.Empty;
if (unit.IsSystemHeader)
return string.Empty;
return Path.GetFileNameWithoutExtension(unit.FileName);
}
public bool VisitTypedefDecl(TypedefDecl typedef)
{
FunctionType function;
if (typedef.Type.IsPointerTo<FunctionType>(out function))
{
Includes.Add(GetHeaderFromDecl(typedef));
return true;
}
throw new NotImplementedException();
}
public bool VisitEnumDecl(Enumeration @enum)
{
if (@enum.Type.IsPrimitiveType(PrimitiveType.Int32))
{
Refs.Add(string.Format("enum struct {0};", @enum.Name));
return true;
}
Refs.Add(string.Format("enum struct {0} : {1};", @enum.Name,
@enum.Type));
return true;
}
public bool VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();
}
public bool VisitFunctionTemplateDecl(FunctionTemplate template)
{
throw new NotImplementedException();
}
public bool VisitMacroDefinition(MacroDefinition macro)
{
throw new NotImplementedException();
}
public bool VisitNamespace(Namespace @namespace)
{
throw new NotImplementedException();
}
}
#region CLI Text Templates #region CLI Text Templates
public abstract class CLITextTemplate : TextTemplate public abstract class CLITextTemplate : TextTemplate
{ {

Loading…
Cancel
Save