simple.cc - generated code example
[prop.git] / prop-src / setlgen.cc
blob0f0f7ae7255f36b2bb5c2ff7aea06c98f89f8fb8
1 ///////////////////////////////////////////////////////////////////////////////
2 // This file is generated automatically using Prop (version 2.3.6),
3 // last updated on Nov 2, 1999.
4 // The original source file is "setlgen.pcc".
5 ///////////////////////////////////////////////////////////////////////////////
7 #line 1 "setlgen.pcc"
8 ///////////////////////////////////////////////////////////////////////////////
9 //
10 // This file implements the data structure mapping component of the
11 // SETL sublanguage.
13 ///////////////////////////////////////////////////////////////////////////////
14 #include "ir.h"
15 #include "ast.h"
16 #include "setl-ast.h"
17 #include "setlgen.h"
18 #include "type.h"
20 ///////////////////////////////////////////////////////////////////////////////
22 // Constructor and destructor
24 ///////////////////////////////////////////////////////////////////////////////
25 SETLCompiler:: SETLCompiler() {}
26 SETLCompiler::~SETLCompiler() {}
28 ///////////////////////////////////////////////////////////////////////////////
30 // Entry points of the SETL data structure mapping compiler
32 ///////////////////////////////////////////////////////////////////////////////
34 ///////////////////////////////////////////////////////////////////////////////
36 // Generate a SETL statement
38 ///////////////////////////////////////////////////////////////////////////////
39 void SETLCompiler::gen_setl (Stmt stmt)
41 bug("SETL sublanguage is not implemented");
42 gen_stmt(stmt);
45 ///////////////////////////////////////////////////////////////////////////////
47 // Generate a SETL definition
49 ///////////////////////////////////////////////////////////////////////////////
50 void SETLCompiler::gen_setl (Def def)
51 { pr ("%^/*\n");
52 gen_def(def);
53 pr ("%^*/\n");
56 ///////////////////////////////////////////////////////////////////////////////
58 // Code generation method for definitions
60 ///////////////////////////////////////////////////////////////////////////////
61 void SETLCompiler::gen_def (Def def)
65 ///////////////////////////////////////////////////////////////////////////////
67 // Code generation method for a list of definitions
69 ///////////////////////////////////////////////////////////////////////////////
70 void SETLCompiler::gen_defs (Defs defs)
72 #line 64 "setlgen.pcc"
73 #line 65 "setlgen.pcc"
75 for (;;) {
76 if (defs) {
77 #line 65 "setlgen.pcc"
78 gen_def(defs->_1); defs = defs->_2;
79 #line 65 "setlgen.pcc"
80 } else { goto L1; }
82 L1:;
84 #line 66 "setlgen.pcc"
85 #line 66 "setlgen.pcc"
89 ///////////////////////////////////////////////////////////////////////////////
91 // Code generation method for statements
93 ///////////////////////////////////////////////////////////////////////////////
94 void SETLCompiler::gen_stmt (Stmt stmt)
96 #line 75 "setlgen.pcc"
97 #line 85 "setlgen.pcc"
99 if (stmt) {
100 switch (stmt->tag__) {
101 case a_Stmt::tag_ASSIGNstmt: {} break;
102 case a_Stmt::tag_BLOCKstmt: {} break;
103 case a_Stmt::tag_WHILEstmt: {} break;
104 case a_Stmt::tag_IFstmt: {} break;
105 case a_Stmt::tag_MATCHstmt: {
106 #line 81 "setlgen.pcc"
107 pr("%D",((Stmt_MATCHstmt *)stmt)->MATCHstmt);
108 #line 81 "setlgen.pcc"
109 } break;
110 case a_Stmt::tag_REWRITEstmt: {
111 #line 82 "setlgen.pcc"
112 pr("%D",((Stmt_REWRITEstmt *)stmt)->REWRITEstmt);
113 #line 82 "setlgen.pcc"
114 } break;
115 case a_Stmt::tag_REPLACEMENTstmt: {
116 #line 83 "setlgen.pcc"
117 pr("%D",((Stmt_REPLACEMENTstmt *)stmt)->REPLACEMENTstmt);
118 #line 83 "setlgen.pcc"
119 } break;
120 case a_Stmt::tag_FORALLstmt: {} break;
121 default: {
122 #line 85 "setlgen.pcc"
123 pr("return %e;",((Stmt_RETURNstmt *)stmt)->RETURNstmt);
124 #line 85 "setlgen.pcc"
125 } break;
127 } else {}
129 #line 86 "setlgen.pcc"
130 #line 86 "setlgen.pcc"
134 ///////////////////////////////////////////////////////////////////////////////
136 // Code generation method for a list of statements
138 ///////////////////////////////////////////////////////////////////////////////
139 void SETLCompiler::gen_stmts (Stmts stmts)
141 #line 95 "setlgen.pcc"
142 #line 96 "setlgen.pcc"
144 for (;;) {
145 if (stmts) {
146 #line 96 "setlgen.pcc"
147 gen_stmt(stmts->_1); stmts = stmts->_2;
148 #line 96 "setlgen.pcc"
149 } else { goto L2; }
151 L2:;
153 #line 97 "setlgen.pcc"
154 #line 97 "setlgen.pcc"
158 ///////////////////////////////////////////////////////////////////////////////
160 // Code generation method for expressions
162 ///////////////////////////////////////////////////////////////////////////////
163 void SETLCompiler::gen_exp (Exp exp)
167 ///////////////////////////////////////////////////////////////////////////////
169 // Code generation method for an expression list
171 ///////////////////////////////////////////////////////////////////////////////
172 void SETLCompiler::gen_exps (Exps exps)
174 #line 115 "setlgen.pcc"
175 #line 117 "setlgen.pcc"
177 for (;;) {
178 if (exps) {
179 if (exps->_2) {
180 #line 117 "setlgen.pcc"
181 gen_exp(exps->_1); exps = exps->_2;
182 #line 117 "setlgen.pcc"
183 } else {
184 #line 116 "setlgen.pcc"
185 gen_exp(exps->_1); exps =
186 #line 116 "setlgen.pcc"
187 #line 116 "setlgen.pcc"
188 nil_1_
189 #line 116 "setlgen.pcc"
190 #line 116 "setlgen.pcc"
192 #line 116 "setlgen.pcc"
194 } else { goto L3; }
196 L3:;
198 #line 118 "setlgen.pcc"
199 #line 118 "setlgen.pcc"
202 #line 120 "setlgen.pcc"
204 ------------------------------- Statistics -------------------------------
205 Merge matching rules = yes
206 Number of DFA nodes merged = 4
207 Number of ifs generated = 5
208 Number of switches generated = 1
209 Number of labels = 0
210 Number of gotos = 0
211 Adaptive matching = enabled
212 Fast string matching = disabled
213 Inline downcasts = enabled
214 --------------------------------------------------------------------------