#ifndef __NASAL_FUNC_STACK_H__ #define __NASAL_FUNC_STACK_H__ #include "nasal_token.h" #include "nasal_func.h" struct func_stack_unit { std::string func_name; func func_statement; func_stack_unit *next; }; class func_stack { private: func_stack_unit *head; public: func_stack() { head=new func_stack_unit; head->func_name="null"; head->next=NULL; } ~func_stack() { func_stack_unit *temp=head; func_stack_unit *this_node=NULL; while(temp->next) { this_node=temp; temp=temp->next; delete this_node; } delete temp; } void append_function(std::string &function_name,func &temp_func) { func_stack_unit *temp=head; while(temp->next) { temp=temp->next; if(temp->func_name==function_name) { std::cout<<"[Error] Redeclaration of function \""<next=new func_stack_unit; temp=temp->next; temp->next=NULL; temp->func_name=function_name; temp->func_statement=temp_func; return; } // void run_function(std::string &function_name) // { // func_stack_unit *temp=head; // while(temp->next) // { // temp=temp->next; // if(temp->func_name==function_name) // { // temp->func_statement.run(); // return; // } // } // std::cout<<"[Error] Could not find this function."<next) { temp=temp->next; std::cout<<"function: "<func_name; temp->func_statement.print_info(); } return; } void pop_function() { func_stack_unit *temp=head; func_stack_unit *end_temp; if(!head->next) return; while(temp->next) { end_temp=temp; temp=temp->next; } end_temp->next=NULL; delete temp; } void delete_all() { func_stack_unit *temp=head->next; func_stack_unit *this_node=NULL; head->next=NULL; if(!temp) return; while(temp->next) { this_node=temp; temp=temp->next; delete this_node; } delete temp; return; } }; func_stack nasal_func_stack; #endif