Select Git revision
C_CodeGen.jrag
C_CodeGen.jrag 42.56 KiB
import java.util.Vector;
aspect C_CodeGenEnv {
// Environment wrapper for C-code generation
// handles qualid nesting, indentation, file writing and
// prefix propagation
public class C_env {
final private static class C_printer {
private boolean newline = true;
private PrintStream out;
public C_printer(PrintStream out) {
this.out = out;
}
public void print(C_env env, String s) {
if (newline) {
newline = false;
for (int i = 0 ; i < env.indent ; i++) {
out.print(" ");
}
}
out.print(s);
}
public void println(C_env env, String s) {
print(env, s);
out.println();
newline = true;
}
}
public final String qualid;
public final String lcName;
public final String rawPrefix;
public final String prefix;
private int indent;
public final int depth;
private C_printer printer;
public final int nestedLevel;
private boolean rootIsPointer;
private int rootLevel;
private C_env(String qualid, String lcName, String rawPrefix,
int indent, int depth, C_printer printer,
int nestedLevel)
{
this.qualid = qualid;
this.lcName = lcName;
this.rawPrefix = rawPrefix;
if (rawPrefix == null) {
System.err.println("WARNING: prefix==null");
this.prefix = "";
} else if (rawPrefix.equals("")) {
this.prefix = rawPrefix;
} else {
this.prefix = rawPrefix + "_";
}
this.indent = indent;
this.depth = depth;
this.printer = printer;
this.nestedLevel = nestedLevel;
}
public C_env(String qualid, String lcName, String rawPrefix,
PrintStream out)
{