change parameter::name to std::string

This commit is contained in:
ValKmjolnir 2023-06-26 19:35:21 +08:00
parent fb3d9ed2f3
commit 8a10f07ce7
6 changed files with 22 additions and 38 deletions

View File

@ -116,18 +116,14 @@ bool ast_dumper::visit_code_block(code_block* node) {
bool ast_dumper::visit_parameter(parameter* node) {
dump_indent();
std::cout << "parameter";
std::cout << "parameter " << node->get_parameter_name();
std::cout << format_location(node->get_location());
push_indent();
if (!node->get_default_value()) {
set_last();
}
node->get_parameter_name()->accept(this);
if (node->get_default_value()) {
push_indent();
set_last();
node->get_default_value()->accept(this);
pop_indent();
}
pop_indent();
return true;
}

View File

@ -66,7 +66,6 @@ bool ast_visitor::visit_code_block(code_block* node) {
}
bool ast_visitor::visit_parameter(parameter* node) {
node->get_parameter_name()->accept(this);
if (node->get_default_value()) {
node->get_default_value()->accept(this);
}

View File

@ -83,9 +83,6 @@ void code_block::accept(ast_visitor* visitor) {
}
parameter::~parameter() {
if (name) {
delete name;
}
if (default_value) {
delete default_value;
}

View File

@ -51,14 +51,15 @@ class multi_identifier;
class code_block;
class if_expr;
class ast_abstract_node {
class expr {
protected:
span nd_loc;
expr_type nd_type;
public:
ast_abstract_node(const span& location, expr_type node_type):
expr(const span& location, expr_type node_type):
nd_loc(location), nd_type(node_type) {}
~expr() = default;
void set_begin(u32 line, u32 column) {
nd_loc.begin_line = line;
nd_loc.begin_column = column;
@ -69,15 +70,7 @@ public:
nd_loc.end_line = location.end_line;
nd_loc.end_column = location.end_column;
}
virtual void accept(ast_visitor*) = 0;
};
class expr:public ast_abstract_node {
public:
expr(const span& location, expr_type node_type):
ast_abstract_node(location, node_type) {}
~expr() = default;
void accept(ast_visitor*);
virtual void accept(ast_visitor*);
};
class null_expr:public expr {
@ -227,19 +220,19 @@ public:
private:
param_type type;
identifier* name;
std::string name;
expr* default_value;
public:
parameter(const span& location):
expr(location, expr_type::ast_param),
name(nullptr), default_value(nullptr) {}
name(""), default_value(nullptr) {}
~parameter();
void set_parameter_type(param_type pt) {type = pt;}
void set_parameter_name(identifier* node) {name = node;}
void set_parameter_name(const std::string& pname) {name = pname;}
void set_default_value(expr* node) {default_value = node;}
param_type get_type() {return type;}
identifier* get_parameter_name() {return name;}
const std::string& get_parameter_name() const {return name;}
expr* get_default_value() {return default_value;}
void accept(ast_visitor*) override;
};

View File

@ -284,16 +284,16 @@ void parse::params(function* func_node) {
match(tok::lcurve);
while(!lookahead(tok::rcurve)) {
auto param = new parameter(toks[ptr].loc);
param->set_parameter_name(id());
if (lookahead(tok::eq) || lookahead(tok::ellipsis)) {
if (lookahead(tok::eq)) {
match(tok::eq);
param->set_parameter_type(parameter::param_type::default_parameter);
param->set_default_value(calc());
} else {
match(tok::ellipsis);
param->set_parameter_type(parameter::param_type::dynamic_parameter);
}
auto id_node = id();
param->set_parameter_name(id_node->get_name());
delete id_node;
if (lookahead(tok::eq)) {
match(tok::eq);
param->set_parameter_type(parameter::param_type::default_parameter);
param->set_default_value(calc());
} else if (lookahead(tok::ellipsis)) {
match(tok::ellipsis);
param->set_parameter_type(parameter::param_type::dynamic_parameter);
} else {
param->set_parameter_type(parameter::param_type::normal_parameter);
}

View File

@ -222,8 +222,7 @@ var isfunc=func(f){
}
var isghost=func(g){
die("this runtime has no ghost object");
return 0;
return typeof(f)=="obj";
}
var ishash=func(h){