📝 change eol to lf

This commit is contained in:
ValKmjolnir 2024-05-22 20:29:13 +08:00
parent 6a155f56e5
commit f9f2cf6d47
1 changed files with 112 additions and 112 deletions

View File

@ -1,112 +1,112 @@
#pragma once #pragma once
#include "ast_visitor.h" #include "ast_visitor.h"
#ifdef _WIN32 #ifdef _WIN32
#include <windows.h> #include <windows.h>
#endif #endif
#include <iostream> #include <iostream>
#include <cstring> #include <cstring>
#include <sstream> #include <sstream>
#include <vector> #include <vector>
namespace nasal { namespace nasal {
class ast_dumper: public ast_visitor { class ast_dumper: public ast_visitor {
private: private:
std::vector<std::string> indent; std::vector<std::string> indent;
private: private:
void push_indent() { void push_indent() {
if (indent.size()) { if (indent.size()) {
if (indent.back()=="├──") { if (indent.back()=="├──") {
indent.back() = ""; indent.back() = "";
} else if (indent.back()=="└──") { } else if (indent.back()=="└──") {
indent.back() = " "; indent.back() = " ";
} }
} }
indent.push_back("├──"); indent.push_back("├──");
} }
void pop_indent() { void pop_indent() {
indent.pop_back(); indent.pop_back();
} }
void set_last() { void set_last() {
indent.back() = "└──"; indent.back() = "└──";
} }
void dump_indent() { void dump_indent() {
if (indent.size() && indent.back()=="") { if (indent.size() && indent.back()=="") {
indent.back() = "├──"; indent.back() = "├──";
} }
for(const auto& i : indent) { for(const auto& i : indent) {
std::cout << i; std::cout << i;
} }
} }
std::string format_location(expr* node) { std::string format_location(expr* node) {
std::stringstream ss; std::stringstream ss;
ss << " → ["; ss << " → [";
node->get_location().dump_begin(ss); node->get_location().dump_begin(ss);
ss << "]\n"; ss << "]\n";
return ss.str(); return ss.str();
} }
public: public:
bool visit_use_stmt(use_stmt*) override; bool visit_use_stmt(use_stmt*) override;
bool visit_null_expr(null_expr*) override; bool visit_null_expr(null_expr*) override;
bool visit_nil_expr(nil_expr*) override; bool visit_nil_expr(nil_expr*) override;
bool visit_number_literal(number_literal*) override; bool visit_number_literal(number_literal*) override;
bool visit_string_literal(string_literal*) override; bool visit_string_literal(string_literal*) override;
bool visit_identifier(identifier*) override; bool visit_identifier(identifier*) override;
bool visit_bool_literal(bool_literal*) override; bool visit_bool_literal(bool_literal*) override;
bool visit_vector_expr(vector_expr*) override; bool visit_vector_expr(vector_expr*) override;
bool visit_hash_expr(hash_expr*) override; bool visit_hash_expr(hash_expr*) override;
bool visit_hash_pair(hash_pair*) override; bool visit_hash_pair(hash_pair*) override;
bool visit_function(function*) override; bool visit_function(function*) override;
bool visit_code_block(code_block*) override; bool visit_code_block(code_block*) override;
bool visit_parameter(parameter*) override; bool visit_parameter(parameter*) override;
bool visit_ternary_operator(ternary_operator*) override; bool visit_ternary_operator(ternary_operator*) override;
bool visit_binary_operator(binary_operator*) override; bool visit_binary_operator(binary_operator*) override;
bool visit_unary_operator(unary_operator*) override; bool visit_unary_operator(unary_operator*) override;
bool visit_call_expr(call_expr*) override; bool visit_call_expr(call_expr*) override;
bool visit_call_hash(call_hash*) override; bool visit_call_hash(call_hash*) override;
bool visit_call_vector(call_vector*) override; bool visit_call_vector(call_vector*) override;
bool visit_call_function(call_function*) override; bool visit_call_function(call_function*) override;
bool visit_slice_vector(slice_vector*) override; bool visit_slice_vector(slice_vector*) override;
bool visit_definition_expr(definition_expr*) override; bool visit_definition_expr(definition_expr*) override;
bool visit_assignment_expr(assignment_expr*) override; bool visit_assignment_expr(assignment_expr*) override;
bool visit_multi_identifier(multi_identifier*) override; bool visit_multi_identifier(multi_identifier*) override;
bool visit_tuple_expr(tuple_expr*) override; bool visit_tuple_expr(tuple_expr*) override;
bool visit_multi_assign(multi_assign*) override; bool visit_multi_assign(multi_assign*) override;
bool visit_while_expr(while_expr*) override; bool visit_while_expr(while_expr*) override;
bool visit_for_expr(for_expr*) override; bool visit_for_expr(for_expr*) override;
bool visit_iter_expr(iter_expr*) override; bool visit_iter_expr(iter_expr*) override;
bool visit_forei_expr(forei_expr*) override; bool visit_forei_expr(forei_expr*) override;
bool visit_condition_expr(condition_expr*) override; bool visit_condition_expr(condition_expr*) override;
bool visit_if_expr(if_expr*) override; bool visit_if_expr(if_expr*) override;
bool visit_continue_expr(continue_expr*) override; bool visit_continue_expr(continue_expr*) override;
bool visit_break_expr(break_expr*) override; bool visit_break_expr(break_expr*) override;
bool visit_return_expr(return_expr*) override; bool visit_return_expr(return_expr*) override;
public: public:
void dump(code_block* root) { void dump(code_block* root) {
#ifdef _WIN32 #ifdef _WIN32
// store previous code page // store previous code page
auto cp = GetConsoleOutputCP(); auto cp = GetConsoleOutputCP();
// allow 65001 code page // allow 65001 code page
SetConsoleOutputCP(CP_UTF8); SetConsoleOutputCP(CP_UTF8);
#endif #endif
root->accept(this); root->accept(this);
#ifdef _WIN32 #ifdef _WIN32
// restore previous code page // restore previous code page
SetConsoleOutputCP(cp); SetConsoleOutputCP(cp);
#endif #endif
} }
}; };
} }