✨ change parameter::name to std::string
This commit is contained in:
parent
fb3d9ed2f3
commit
8a10f07ce7
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -83,9 +83,6 @@ void code_block::accept(ast_visitor* visitor) {
|
|||
}
|
||||
|
||||
parameter::~parameter() {
|
||||
if (name) {
|
||||
delete name;
|
||||
}
|
||||
if (default_value) {
|
||||
delete default_value;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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){
|
||||
|
|
Loading…
Reference in New Issue