✨ 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) {
|
bool ast_dumper::visit_parameter(parameter* node) {
|
||||||
dump_indent();
|
dump_indent();
|
||||||
std::cout << "parameter";
|
std::cout << "parameter " << node->get_parameter_name();
|
||||||
std::cout << format_location(node->get_location());
|
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()) {
|
if (node->get_default_value()) {
|
||||||
|
push_indent();
|
||||||
set_last();
|
set_last();
|
||||||
node->get_default_value()->accept(this);
|
node->get_default_value()->accept(this);
|
||||||
|
pop_indent();
|
||||||
}
|
}
|
||||||
pop_indent();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,6 @@ bool ast_visitor::visit_code_block(code_block* node) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ast_visitor::visit_parameter(parameter* node) {
|
bool ast_visitor::visit_parameter(parameter* node) {
|
||||||
node->get_parameter_name()->accept(this);
|
|
||||||
if (node->get_default_value()) {
|
if (node->get_default_value()) {
|
||||||
node->get_default_value()->accept(this);
|
node->get_default_value()->accept(this);
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,9 +83,6 @@ void code_block::accept(ast_visitor* visitor) {
|
||||||
}
|
}
|
||||||
|
|
||||||
parameter::~parameter() {
|
parameter::~parameter() {
|
||||||
if (name) {
|
|
||||||
delete name;
|
|
||||||
}
|
|
||||||
if (default_value) {
|
if (default_value) {
|
||||||
delete default_value;
|
delete default_value;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,14 +51,15 @@ class multi_identifier;
|
||||||
class code_block;
|
class code_block;
|
||||||
class if_expr;
|
class if_expr;
|
||||||
|
|
||||||
class ast_abstract_node {
|
class expr {
|
||||||
protected:
|
protected:
|
||||||
span nd_loc;
|
span nd_loc;
|
||||||
expr_type nd_type;
|
expr_type nd_type;
|
||||||
|
|
||||||
public:
|
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) {}
|
nd_loc(location), nd_type(node_type) {}
|
||||||
|
~expr() = default;
|
||||||
void set_begin(u32 line, u32 column) {
|
void set_begin(u32 line, u32 column) {
|
||||||
nd_loc.begin_line = line;
|
nd_loc.begin_line = line;
|
||||||
nd_loc.begin_column = column;
|
nd_loc.begin_column = column;
|
||||||
|
@ -69,15 +70,7 @@ public:
|
||||||
nd_loc.end_line = location.end_line;
|
nd_loc.end_line = location.end_line;
|
||||||
nd_loc.end_column = location.end_column;
|
nd_loc.end_column = location.end_column;
|
||||||
}
|
}
|
||||||
virtual void accept(ast_visitor*) = 0;
|
virtual void accept(ast_visitor*);
|
||||||
};
|
|
||||||
|
|
||||||
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*);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class null_expr:public expr {
|
class null_expr:public expr {
|
||||||
|
@ -227,19 +220,19 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
param_type type;
|
param_type type;
|
||||||
identifier* name;
|
std::string name;
|
||||||
expr* default_value;
|
expr* default_value;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
parameter(const span& location):
|
parameter(const span& location):
|
||||||
expr(location, expr_type::ast_param),
|
expr(location, expr_type::ast_param),
|
||||||
name(nullptr), default_value(nullptr) {}
|
name(""), default_value(nullptr) {}
|
||||||
~parameter();
|
~parameter();
|
||||||
void set_parameter_type(param_type pt) {type = pt;}
|
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;}
|
void set_default_value(expr* node) {default_value = node;}
|
||||||
param_type get_type() {return type;}
|
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;}
|
expr* get_default_value() {return default_value;}
|
||||||
void accept(ast_visitor*) override;
|
void accept(ast_visitor*) override;
|
||||||
};
|
};
|
||||||
|
|
|
@ -284,16 +284,16 @@ void parse::params(function* func_node) {
|
||||||
match(tok::lcurve);
|
match(tok::lcurve);
|
||||||
while(!lookahead(tok::rcurve)) {
|
while(!lookahead(tok::rcurve)) {
|
||||||
auto param = new parameter(toks[ptr].loc);
|
auto param = new parameter(toks[ptr].loc);
|
||||||
param->set_parameter_name(id());
|
auto id_node = id();
|
||||||
if (lookahead(tok::eq) || lookahead(tok::ellipsis)) {
|
param->set_parameter_name(id_node->get_name());
|
||||||
if (lookahead(tok::eq)) {
|
delete id_node;
|
||||||
match(tok::eq);
|
if (lookahead(tok::eq)) {
|
||||||
param->set_parameter_type(parameter::param_type::default_parameter);
|
match(tok::eq);
|
||||||
param->set_default_value(calc());
|
param->set_parameter_type(parameter::param_type::default_parameter);
|
||||||
} else {
|
param->set_default_value(calc());
|
||||||
match(tok::ellipsis);
|
} else if (lookahead(tok::ellipsis)) {
|
||||||
param->set_parameter_type(parameter::param_type::dynamic_parameter);
|
match(tok::ellipsis);
|
||||||
}
|
param->set_parameter_type(parameter::param_type::dynamic_parameter);
|
||||||
} else {
|
} else {
|
||||||
param->set_parameter_type(parameter::param_type::normal_parameter);
|
param->set_parameter_type(parameter::param_type::normal_parameter);
|
||||||
}
|
}
|
||||||
|
|
|
@ -222,8 +222,7 @@ var isfunc=func(f){
|
||||||
}
|
}
|
||||||
|
|
||||||
var isghost=func(g){
|
var isghost=func(g){
|
||||||
die("this runtime has no ghost object");
|
return typeof(f)=="obj";
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var ishash=func(h){
|
var ishash=func(h){
|
||||||
|
|
Loading…
Reference in New Issue