mirror of
https://codeberg.org/ProgramSnail/lang.git
synced 2025-12-07 23:48:44 +00:00
fixes, part of statement printers done
This commit is contained in:
parent
bf49f4030c
commit
c176d1b11d
4 changed files with 315 additions and 7 deletions
86
src/statement_printers.cpp
Normal file
86
src/statement_printers.cpp
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
#include "statement_printers.hpp"
|
||||
|
||||
#include "basic_printers.hpp"
|
||||
#include "expression_printers.hpp"
|
||||
|
||||
namespace printers {
|
||||
|
||||
void print_import(const nodes::Import &statement, Printer &printer) {
|
||||
printer.print(":: ");
|
||||
|
||||
print_identifier(*statement.get_import_name(), printer);
|
||||
|
||||
if (*statement.get_import_name()->get() !=
|
||||
*statement.get_module_name()->get()) {
|
||||
printer.print(" = ");
|
||||
print_identifier(*statement.get_module_name(), printer);
|
||||
}
|
||||
|
||||
if (statement.symbols_size() > 0) {
|
||||
printer.print(" :");
|
||||
for (size_t i = 0; i < statement.symbols_size(); ++i) {
|
||||
printer.space();
|
||||
// TODO: properly print operator identifier
|
||||
print_identifier(*statement.get_symbol(i), printer);
|
||||
}
|
||||
}
|
||||
printer.print(";");
|
||||
|
||||
printer.new_indent_line();
|
||||
printer.new_indent_line();
|
||||
} // IN PROGRESS
|
||||
|
||||
void print_constraint(const nodes::Constraint &statement, Printer &printer) {
|
||||
printer.print("? ");
|
||||
print_expression(*statement.get_expression(), printer);
|
||||
printer.print(";");
|
||||
}
|
||||
|
||||
void print_type_definition(const nodes::TypeDefinition &statement,
|
||||
Printer &printer) {
|
||||
print_docs(*statement.get_docs(), printer); // TODO
|
||||
} // IN PROGRESS
|
||||
|
||||
void print_function_definition(const nodes::FunctionDefinition &statement,
|
||||
Printer &printer) {
|
||||
print_docs(*statement.get_docs(), printer); // TODO
|
||||
} // IN PROGRESS
|
||||
|
||||
void print_typeclass_definition(const nodes::TypeclassDefinition &statement,
|
||||
Printer &printer) {
|
||||
print_docs(*statement.get_docs(), printer); // TODO
|
||||
|
||||
print_identifier(*statement.get_name(), printer);
|
||||
|
||||
if (statement.get_base_typeclasses_size() > 0) {
|
||||
printer.print(" :");
|
||||
for (size_t i = 0; i < statement.get_base_typeclasses_size(); ++i) {
|
||||
printer.space();
|
||||
print_identifier(*statement.get_base_typeclass(i), printer);
|
||||
}
|
||||
}
|
||||
|
||||
if (statement.get_methods_size() > 0) {
|
||||
printer.print(" {");
|
||||
printer.indent();
|
||||
|
||||
for (size_t i = 0; i < statement.get_methods_size(); ++i) {
|
||||
printer.new_indent_line();
|
||||
print_function_definition(*statement.get_method(i), printer);
|
||||
printer.new_indent_line();
|
||||
}
|
||||
|
||||
printer.deindent();
|
||||
printer.new_indent_line();
|
||||
printer.print("} ");
|
||||
} else {
|
||||
printer.print(";");
|
||||
}
|
||||
|
||||
printer.new_indent_line();
|
||||
printer.new_indent_line();
|
||||
} // IN PROGRESS
|
||||
|
||||
} // namespace printers
|
||||
|
||||
// TODO: print operator in ()
|
||||
Loading…
Add table
Add a link
Reference in a new issue