Synopsis - Cross-Reference

File: /Synopsis/Parsers/Cxx/Translator.hh
  1//
  2// Copyright (C) 2000 Stefan Seefeld
  3// Copyright (C) 2000 Stephen Davies
  4// All rights reserved.
  5// Licensed to the public under the terms of the GNU LGPL (>= 2),
  6// see the file COPYING for details.
  7//
  8
  9#ifndef H_SYNOPSIS_CPP_SYNOPSIS
 10#define H_SYNOPSIS_CPP_SYNOPSIS
 11
 12#include <Python.h>
 13#include <iostream>
 14#include <string>
 15#include <vector>
 16#include <list>
 17#include <stack>
 18#include "ASG.hh"
 19#include "Types.hh"
 20
 21class FileFilter;
 22
 23//. The Translator class maps from C++ objects to Python objects
 24class Translator : public ASG::Visitor, public Types::Visitor
 25{
 26public:
 27
 28  Translator(FileFilter*, PyObject *ir);
 29  ~Translator();
 30
 31  void translate(ASG::Scope* global);
 32  void set_builtin_decls(const ASG::Declaration::vector& builtin_decls);
 33
 34  //
 35  // types from the Synopsis.Type module
 36  //
 37  PyObject* Base(Types::Base*);
 38  PyObject* Unknown(Types::Named*);
 39  PyObject* Declared(Types::Declared*);
 40  PyObject* Dependent(Types::Dependent*);
 41  PyObject* Template(Types::Template*);
 42  PyObject* Modifier(Types::Modifier*);
 43  PyObject* Array(Types::Array*);
 44  PyObject* Parameterized(Types::Parameterized*);
 45  PyObject* FuncPtr(Types::FuncPtr*);
 46  
 47  //
 48  // types from the Synopsis.ASG module
 49  //
 50  PyObject* SourceFile(ASG::SourceFile*);
 51  PyObject* Include(ASG::Include*);
 52  PyObject* Declaration(ASG::Declaration*);
 53  PyObject* Builtin(ASG::Builtin*);
 54  PyObject* Macro(ASG::Macro*);
 55  PyObject* Forward(ASG::Forward*);
 56  PyObject* Scope(ASG::Scope*);
 57  PyObject* Namespace(ASG::Namespace*);
 58  PyObject* Inheritance(ASG::Inheritance*);
 59  PyObject* Class(ASG::Class*);
 60  PyObject* ClassTemplate(ASG::ClassTemplate *);
 61  PyObject* Typedef(ASG::Typedef*);
 62  PyObject* Enumerator(ASG::Enumerator*);
 63  PyObject* Enum(ASG::Enum*);
 64  PyObject* Variable(ASG::Variable*);
 65  PyObject* Const(ASG::Const*);
 66  PyObject* Parameter(ASG::Parameter*);
 67  PyObject* Function(ASG::Function*);
 68  PyObject* Operation(ASG::Operation*);
 69  PyObject* UsingDirective(ASG::UsingDirective*);
 70  PyObject* UsingDeclaration(ASG::UsingDeclaration*);
 71
 72  //
 73  // ASG::Visitor methods
 74  //
 75  void visit_declaration(ASG::Declaration*);
 76  void visit_builtin(ASG::Builtin*);
 77  void visit_macro(ASG::Macro*);
 78  void visit_scope(ASG::Scope*);
 79  void visit_namespace(ASG::Namespace*);
 80  void visit_class(ASG::Class*);
 81  void visit_class_template(ASG::ClassTemplate *);
 82  void visit_inheritance(ASG::Inheritance*);
 83  void visit_forward(ASG::Forward*);
 84  void visit_typedef(ASG::Typedef*);
 85  void visit_variable(ASG::Variable*);
 86  void visit_const(ASG::Const*);
 87  void visit_enum(ASG::Enum*);
 88  void visit_enumerator(ASG::Enumerator*);
 89  void visit_function(ASG::Function*);
 90  void visit_operation(ASG::Operation*);
 91  void visit_parameter(ASG::Parameter*);
 92  void visit_using_directive(ASG::UsingDirective*);
 93  void visit_using_declaration(ASG::UsingDeclaration*);
 94  
 95  //
 96  // Types::Visitor methods
 97  //
 98  //void visitType(Types::Type*);
 99  void visit_unknown(Types::Unknown*);
100  void visit_modifier(Types::Modifier*);
101  void visit_array(Types::Array*);
102  //void visitNamed(Types::Named*);
103  void visit_base(Types::Base*);
104  void visit_dependent(Types::Dependent*);
105  void visit_declared(Types::Declared*);
106  void visit_template_type(Types::Template*);
107  void visit_parameterized(Types::Parameterized*);
108  void visit_func_ptr(Types::FuncPtr*);
109
110private:
111  //. Compiler Firewalled private data
112  struct Private;
113  friend struct Private;
114  Private* m;
115
116  //.
117  //. helper methods
118  //.
119  void addComments(PyObject* pydecl, ASG::Declaration* cdecl);
120
121  ///////// EVERYTHING BELOW HERE SUBJECT TO REVIEW AND DELETION
122
123
124  /*
125    PyObject *lookupType(const std::string &, PyObject *);
126    PyObject *lookupType(const std::string &);
127    PyObject *lookupType(const std::vector<std::string>& qualified);
128    
129    static void addInheritance(PyObject *, const std::vector<PyObject *> &);
130    static PyObject *N2L(const std::string &);
131    static PyObject *V2L(const std::vector<std::string> &);
132    static PyObject *V2L(const std::vector<PyObject *> &);
133    static PyObject *V2L(const std::vector<size_t> &);
134    void pushClassBases(PyObject* clas);
135    PyObject* resolveDeclared(PyObject*);
136    void addDeclaration(PyObject *);
137  */
138private:
139  PyObject* m_asg_module;
140  PyObject* m_sf_module;
141  PyObject *m_ir;
142  PyObject* m_declarations;
143  PyObject* m_dictionary;
144  
145  FileFilter* m_filter;
146};
147
148#endif