}
if (dump_tree != null) {
- var code_writer = new CodeWriter (true);
+ var code_writer = new CodeWriter (CodeWriterType.DUMP);
code_writer.write_file (context, dump_tree);
}
return quit();
}
- var interface_writer = new CodeWriter (false, true);
+ var interface_writer = new CodeWriter (CodeWriterType.INTERNAL);
interface_writer.set_cheader_override(header_filename, internal_header_filename);
string vapi_filename = internal_vapi_filename;
Scope current_scope;
- bool dump_tree;
- bool emit_internal;
+ CodeWriterType type;
string? override_header = null;
string? header_to_override = null;
- public CodeWriter (bool dump_tree = false, bool emit_internal = false) {
- this.dump_tree = dump_tree;
- this.emit_internal = emit_internal;
+ public CodeWriter (CodeWriterType type = CodeWriterType.EXTERNAL) {
+ this.type = type;
}
/**
}
public override void visit_constructor (Constructor c) {
- if (!dump_tree) {
+ if (type != CodeWriterType.DUMP) {
return;
}
// don't write interface implementation unless it's an abstract or virtual method
if (!check_accessibility (m) || (m.base_interface_method != null && !m.is_abstract && !m.is_virtual)) {
- if (!dump_tree) {
+ if (type != CodeWriterType.DUMP) {
return;
}
}
}
void write_code_block (Block? block) {
- if (block == null || !dump_tree) {
+ if (block == null || type != CodeWriterType.DUMP) {
write_string (";");
return;
}
}
private bool check_accessibility (Symbol sym) {
- if (dump_tree) {
- return true;
- } else {
- if (!emit_internal &&
- ( sym.access == SymbolAccessibility.PUBLIC ||
- sym.access == SymbolAccessibility.PROTECTED)) {
- return true;
- } else if (emit_internal &&
- ( sym.access == SymbolAccessibility.INTERNAL ||
- sym.access == SymbolAccessibility.PUBLIC ||
- sym.access == SymbolAccessibility.PROTECTED)) {
+ switch (type) {
+ case CodeWriterType.EXTERNAL:
+ return sym.access == SymbolAccessibility.PUBLIC ||
+ sym.access == SymbolAccessibility.PROTECTED;
+
+ case CodeWriterType.INTERNAL:
+ return sym.access == SymbolAccessibility.INTERNAL ||
+ sym.access == SymbolAccessibility.PUBLIC ||
+ sym.access == SymbolAccessibility.PROTECTED;
+
+ case CodeWriterType.DUMP:
return true;
- }
- }
- return false;
+ default:
+ assert_not_reached ();
+ }
}
private void write_attributes (CodeNode node) {
}
}
}
+
+public enum CodeWriterType {
+ EXTERNAL,
+ INTERNAL,
+ DUMP
+}