Browse Source

Added parsing, AST and visitor stubs support for (class static) variables.

pull/1/head
triton 12 years ago
parent
commit
9f029047ad
  1. 5
      src/Bridge/ASTVisitor.cs
  2. 2
      src/Bridge/Class.cs
  3. 1
      src/Bridge/Declaration.cs
  4. 1
      src/Bridge/Namespace.cs
  5. 7
      src/Bridge/Variable.cs
  6. 5
      src/Generator/Generators/CLI/CLIForwardReferencePrinter.cs
  7. 10
      src/Generator/Generators/CLI/CLIMarshal.cs
  8. 5
      src/Generator/Generators/CLI/CLITypePrinter.cs
  9. 5
      src/Generator/Generators/CSharp/CSharpTypePrinter.cs
  10. 5
      src/Generator/Types/CppTypePrinter.cs
  11. 13
      src/Parser/Parser.cpp

5
src/Bridge/ASTVisitor.cs

@ -225,6 +225,11 @@ namespace Cxxi @@ -225,6 +225,11 @@ namespace Cxxi
return true;
}
public bool VisitVariableDecl(Variable variable)
{
return variable.Type.Visit(this, variable.QualifiedType.Qualifiers);
}
public virtual bool VisitEnumItem(Enumeration.Item item)
{
return true;

2
src/Bridge/Class.cs

@ -82,6 +82,7 @@ namespace Cxxi @@ -82,6 +82,7 @@ namespace Cxxi
public List<Field> Fields;
public List<Property> Properties;
public List<Method> Methods;
public List<Variable> Variables;
public List<Event> Events;
// True if the record is a POD (Plain Old Data) type.
@ -108,6 +109,7 @@ namespace Cxxi @@ -108,6 +109,7 @@ namespace Cxxi
Fields = new List<Field>();
Properties = new List<Property>();
Methods = new List<Method>();
Variables = new List<Variable>();
Events = new List<Event>();
NestedClasses = new List<Class>();
NestedEnums = new List<Enumeration>();

1
src/Bridge/Declaration.cs

@ -215,6 +215,7 @@ namespace Cxxi @@ -215,6 +215,7 @@ namespace Cxxi
T VisitParameterDecl(Parameter parameter);
T VisitTypedefDecl(TypedefDecl typedef);
T VisitEnumDecl(Enumeration @enum);
T VisitVariableDecl(Variable variable);
T VisitClassTemplateDecl(ClassTemplate template);
T VisitFunctionTemplateDecl(FunctionTemplate template);
T VisitMacroDefinition(MacroDefinition macro);

1
src/Bridge/Namespace.cs

@ -17,6 +17,7 @@ namespace Cxxi @@ -17,6 +17,7 @@ namespace Cxxi
public List<Class> Classes;
public List<Template> Templates;
public List<TypedefDecl> Typedefs;
public List<Variable> Variables;
public TranslationUnit TranslationUnit
{

7
src/Bridge/Variable.cs

@ -1,11 +1,14 @@ @@ -1,11 +1,14 @@

namespace Cxxi
{
public class Variable : Declaration
public class Variable : Declaration, ITypedDecl
{
public override T Visit<T>(IDeclVisitor<T> visitor)
{
throw new System.NotImplementedException();
return visitor.VisitVariableDecl(this);
}
public Type Type { get { return QualifiedType.Type; } }
public QualifiedType QualifiedType { get; set; }
}
}

5
src/Generator/Generators/CLI/CLIForwardReferencePrinter.cs

@ -168,6 +168,11 @@ namespace Cxxi.Generators.CLI @@ -168,6 +168,11 @@ namespace Cxxi.Generators.CLI
return true;
}
public bool VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public bool VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();

10
src/Generator/Generators/CLI/CLIMarshal.cs

@ -233,6 +233,11 @@ namespace Cxxi.Generators.CLI @@ -233,6 +233,11 @@ namespace Cxxi.Generators.CLI
return true;
}
public bool VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
private string ToCLITypeName(Declaration decl)
{
var typePrinter = new CLITypePrinter(Driver);
@ -593,6 +598,11 @@ namespace Cxxi.Generators.CLI @@ -593,6 +598,11 @@ namespace Cxxi.Generators.CLI
return true;
}
public bool VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public bool VisitClassTemplateDecl(ClassTemplate template)
{
return template.TemplatedClass.Visit(this);

5
src/Generator/Generators/CLI/CLITypePrinter.cs

@ -245,6 +245,11 @@ namespace Cxxi.Generators.CLI @@ -245,6 +245,11 @@ namespace Cxxi.Generators.CLI
return @enum.Name;
}
public string VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public string VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();

5
src/Generator/Generators/CSharp/CSharpTypePrinter.cs

@ -186,6 +186,11 @@ namespace Cxxi.Generators.CSharp @@ -186,6 +186,11 @@ namespace Cxxi.Generators.CSharp
return @enum.Name;
}
public string VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public string VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();

5
src/Generator/Types/CppTypePrinter.cs

@ -204,6 +204,11 @@ namespace Cxxi.Types @@ -204,6 +204,11 @@ namespace Cxxi.Types
return @enum.Name;
}
public string VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public string VisitClassTemplateDecl(ClassTemplate template)
{
throw new NotImplementedException();

13
src/Parser/Parser.cpp

@ -389,6 +389,16 @@ Cxxi::Class^ Parser::WalkRecordCXX(clang::CXXRecordDecl* Record, bool IsDependen @@ -389,6 +389,16 @@ Cxxi::Class^ Parser::WalkRecordCXX(clang::CXXRecordDecl* Record, bool IsDependen
RC->Fields->Add(Field);
}
// Iterate through the record static fields.
for(auto it = Record->decls_begin(); it != Record->decls_end(); ++it)
{
auto Decl = *it;
if (!isa<VarDecl>(Decl)) continue;
Cxxi::Variable^ Var = WalkVariable(cast<VarDecl>(Decl));
RC->Variables->Add(Var);
}
// Iterate through the record bases.
for(auto it = Record->bases_begin(); it != Record->bases_end(); ++it)
{
@ -1251,6 +1261,9 @@ Cxxi::Variable^ Parser::WalkVariable(clang::VarDecl *VD) @@ -1251,6 +1261,9 @@ Cxxi::Variable^ Parser::WalkVariable(clang::VarDecl *VD)
auto Var = gcnew Cxxi::Variable();
Var->Name = marshalString<E_UTF8>(VD->getName());
auto TL = VD->getTypeSourceInfo()->getTypeLoc();
Var->QualifiedType = GetQualifiedType(VD->getType(), WalkType(VD->getType(), &TL));
return Var;
}

Loading…
Cancel
Save