From f0053576b3543bad93cb5b0f24544bbec9b09610 Mon Sep 17 00:00:00 2001 From: Valk Richard Li <48872266+ValKmjolnir@users.noreply.github.com> Date: Thu, 14 Nov 2019 16:53:29 +0800 Subject: [PATCH] fixed bugs --- balloon/abstract_syntax_tree.cpp | 8 +++++--- balloon/balloon_parse.h | 3 ++- balloon/balloon_var.h | 15 +++++++++++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/balloon/abstract_syntax_tree.cpp b/balloon/abstract_syntax_tree.cpp index 272d23e..8dae46d 100644 --- a/balloon/abstract_syntax_tree.cpp +++ b/balloon/abstract_syntax_tree.cpp @@ -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 "<name<<"\'."<>[Runtime-error] line "<name<<"\' or this value is set to __null_type. detail: "; + temp.print_var(); + std::cout<<"."<::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; diff --git a/balloon/balloon_parse.h b/balloon/balloon_parse.h index 2fb3e3b..a518fd6 100644 --- a/balloon/balloon_parse.h +++ b/balloon/balloon_parse.h @@ -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) { diff --git a/balloon/balloon_var.h b/balloon/balloon_var.h index 81bd084..755ff2b 100644 --- a/balloon/balloon_var.h +++ b/balloon/balloon_var.h @@ -75,6 +75,13 @@ class var function=p.function; return *this; } + void print_var() + { + std::cout<<"[type: "; + print_scalar(type); + std::cout<<",name: "<::iterator i=balloon_hash.begin();i!=balloon_hash.end();++i) if(i->name==_name)