with debug
[prop.git] / prop-src / codegen.h
blobd2dfc0f5417fdd292ab652850facb7c7178fec48
1 #ifndef code_generator_h
2 #define code_generator_h
4 #include <stdarg.h>
5 #include "basics.h"
7 //////////////////////////////////////////////////////////////////////////////
8 // Code Generator base class.
9 //////////////////////////////////////////////////////////////////////////////
10 class CodeGen {
11 CodeGen(const CodeGen&); // no copy constructor
12 void operator = (const CodeGen&); // no assignment
13 protected:
14 std::ostream* output; // output stream
15 Bool anchored; // is the current output character newline
16 int tabbing, tab_unit; // tabbing counters
18 public:
19 ///////////////////////////////////////////////////////////////////////////
20 // Constructor and destructor
21 ///////////////////////////////////////////////////////////////////////////
22 CodeGen();
23 virtual ~CodeGen();
25 ///////////////////////////////////////////////////////////////////////////
26 // Methods to emit code.
27 ///////////////////////////////////////////////////////////////////////////
28 void set_stream (std::ostream&);
29 std::ostream& pr (const char *, ...);
30 std::ostream& outv (const char *, va_list);
32 private:
33 ///////////////////////////////////////////////////////////////////////////
34 // Auxiliary methods.
35 ///////////////////////////////////////////////////////////////////////////
36 void gen_code (const char *);
37 virtual va_list printer (char, va_list) = 0; // extra printer
40 #endif