This commit is contained in:
Valk Richard Li
2019-11-12 23:23:42 +08:00
committed by GitHub
parent a61415fbed
commit 6aef19ce7a
7 changed files with 469 additions and 37 deletions
+41 -1
View File
@@ -7,9 +7,27 @@ enum var_type
__var_number,
__var_string,
__var_array,
__var_hash
__var_hash,
__var_function
};
void print_scalar(int type)
{
std::string str="";
switch(type)
{
case __null_type: str="null";break;
case __var_number: str="number";break;
case __var_string: str="string";break;
case __var_array: str="array";break;
case __var_hash: str="hash";break;
case __var_function:str="function";break;
default: str="unknown";break;
}
std::cout<<str;
return;
}
class var
{
private:
@@ -28,6 +46,7 @@ class var
name="";
balloon_array.clear();
balloon_hash.clear();
function.set_clear();
return;
}
var(const var& p)
@@ -38,6 +57,7 @@ class var
name=p.name;
balloon_array=p.balloon_array;
balloon_hash=p.balloon_hash;
function=p.function;
return;
}
var& operator=(const var& p)
@@ -48,8 +68,10 @@ class var
name=p.name;
balloon_array.clear();
balloon_hash.clear();
function.set_clear();
balloon_array=p.balloon_array;
balloon_hash=p.balloon_hash;
function=p.function;
return *this;
}
void set_type(int);
@@ -59,6 +81,7 @@ class var
void set_function(abstract_syntax_tree&);
void append_array(var);
void append_hash(var);
int get_type();
std::string get_name();
double get_number();
std::string get_string();
@@ -74,48 +97,63 @@ void var::set_type(int _type)
type=_type;
return;
}
void var::set_name(std::string _name)
{
name=_name;
return;
}
void var::set_number(double _num)
{
number=_num;
return;
}
void var::set_string(std::string _str)
{
str=_str;
return;
}
void var::set_function(abstract_syntax_tree& p)
{
function=p;
return;
}
void var::append_array(var _new_var)
{
balloon_array.push_back(_new_var);
return;
}
void var::append_hash(var _new_var)
{
balloon_hash.push_back(_new_var);
return;
}
int var::get_type()
{
return type;
}
std::string var::get_name()
{
return name;
}
double var::get_number()
{
return number;
}
std::string var::get_string()
{
return str;
}
var& var::get_array_member(int _place)
{
if(balloon_array.empty())
@@ -130,6 +168,7 @@ var& var::get_array_member(int _place)
std::cout<<">>[Runtime-error] overflow when searching member "<<_place<<" but the max size of array \'"<<name<<"\' is "<<cnt<<"(this means 0-"<<cnt-1<<")."<<std::endl;
return error_var;
}
var& var::get_hash_member(std::string _name)
{
for(std::list<var>::iterator i=balloon_hash.begin();i!=balloon_hash.end();++i)
@@ -138,6 +177,7 @@ var& var::get_hash_member(std::string _name)
std::cout<<">>[Runtime-error] hash \'"<<name<<"\' does not have a member named \'"<<_name<<"\'"<<std::endl;
return error_var;
}
abstract_syntax_tree& var::get_function()
{
return function;