forked from xxq250/Nasal-Interpreter
fixed bugs
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user