fixed bugs

This commit is contained in:
Valk Richard Li
2019-11-14 16:53:29 +08:00
committed by GitHub
parent ac3b5719bc
commit f0053576b3
3 changed files with 18 additions and 8 deletions

View File

@@ -449,7 +449,9 @@ var abstract_syntax_tree::call_identifier()
if(temp.get_type()==__null_type)
{
exit_type=__get_value_failure;
std::cout<<">>[Runtime-error] line "<<line<<": cannot find a hash-member named \'"<<i->name<<"\'."<<std::endl;
std::cout<<">>[Runtime-error] line "<<line<<": cannot find a hash-member named \'"<<i->name<<"\' or this value is set to __null_type. detail: ";
temp.print_var();
std::cout<<"."<<std::endl;
break;
}
}
@@ -732,12 +734,12 @@ int abstract_syntax_tree::run_ifelse()
scope.add_new_local_scope();
for(std::list<abstract_syntax_tree>::iterator i=children.begin();i!=children.end();++i)
{
if(i->type!=__else && i->children.front().condition_check())
if((i->type==__if || i->type==__elsif) && i->children.front().condition_check())
{
ret=i->children.back().run_block();
break;
}
else
else if(i->type==__else)
{
ret=i->children.back().run_block();
break;

View File

@@ -192,6 +192,7 @@ abstract_syntax_tree balloon_parse::choose()
return new_node;
}
temp.add_child(block());
new_node.add_child(temp);
}
else// real else
{
@@ -199,9 +200,9 @@ abstract_syntax_tree balloon_parse::choose()
temp.set_line(this_token.line);
parse.push(this_token);
temp.add_child(block());
new_node.add_child(temp);
break;
}
new_node.add_child(temp);
}
else if(this_token.type==__elsif)
{

View File

@@ -75,6 +75,13 @@ class var
function=p.function;
return *this;
}
void print_var()
{
std::cout<<"[type: ";
print_scalar(type);
std::cout<<",name: "<<name<<",number: "<<number<<",string: "<<str<<" ]";
return;
}
void set_type(int);
void set_name(std::string);
void set_number(double);
@@ -86,9 +93,9 @@ class var
std::string get_name();
double get_number();
std::string get_string();
var& get_array_member(int);
var get_array_member(int);
var* get_array_member_addr(int);
var& get_hash_member(std::string);
var get_hash_member(std::string);
var* get_hash_member_addr(std::string);
abstract_syntax_tree& get_function();
};
@@ -157,7 +164,7 @@ std::string var::get_string()
return str;
}
var& var::get_array_member(int _place)
var var::get_array_member(int _place)
{
if(balloon_array.empty())
{
@@ -191,7 +198,7 @@ var* var::get_array_member_addr(int _place)
return &error_var;
}
var& var::get_hash_member(std::string _name)
var var::get_hash_member(std::string _name)
{
for(std::list<var>::iterator i=balloon_hash.begin();i!=balloon_hash.end();++i)
if(i->name==_name)