initial
[prop.git] / prop-src / codegen.h
blobefe03c626b662a9c80d1f56253e90a3d08834c1c
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 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 (ostream&);
29 ostream& pr (const char *, ...);
30 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