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
return true; return true;
} }
public bool VisitVariableDecl(Variable variable)
{
return variable.Type.Visit(this, variable.QualifiedType.Qualifiers);
}
public virtual bool VisitEnumItem(Enumeration.Item item) public virtual bool VisitEnumItem(Enumeration.Item item)
{ {
return true; return true;

2
src/Bridge/Class.cs

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

1
src/Bridge/Declaration.cs

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

1
src/Bridge/Namespace.cs

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

7
src/Bridge/Variable.cs

@ -1,11 +1,14 @@
 
namespace Cxxi namespace Cxxi
{ {
public class Variable : Declaration public class Variable : Declaration, ITypedDecl
{ {
public override T Visit<T>(IDeclVisitor<T> visitor) 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
return true; return true;
} }
public bool VisitVariableDecl(Variable variable)
{
throw new NotImplementedException();
}
public bool VisitClassTemplateDecl(ClassTemplate template) public bool VisitClassTemplateDecl(ClassTemplate template)
{ {
throw new NotImplementedException(); throw new NotImplementedException();

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

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

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

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

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

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

5
src/Generator/Types/CppTypePrinter.cs

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

13
src/Parser/Parser.cpp

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

Loading…
Cancel
Save