Synopsis - Cross-Reference
File: /Synopsis/Parsers/Cxx/Translator.hh1// 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