Nasal-Interpreter/version0.5/nasal_var.cpp

141 lines
2.7 KiB
C++
Raw Normal View History

2019-08-21 22:24:03 +08:00
#ifndef __NASAL_VAR_CPP__
#define __NASAL_VAR_CPP__
var::var()
{
type=VAR_NONE;
data=NULL;
}
var::var(const var &temp)
{
type=temp.type;
switch(type)
{
case VAR_NONE:
data=NULL;
break;
case VAR_LLINT:
data=new long long int;
*((long long int *)data)=*((long long int *)temp.data);
break;
case VAR_DOUBLE:
data=new double;
*((double *)data)=*((double *)temp.data);
break;
case VAR_CHAR:
data=new char;
*((char *)data)=*((char *)temp.data);
break;
case VAR_STRING:
data=new std::string;
*((std::string *)data)=*((std::string *)temp.data);
break;
case VAR_LIST:
data=new nasal_list;
*((nasal_list *)data)=*((nasal_list *)temp.data);
break;
case VAR_HASH:
data=new nasal_hash;
*((nasal_hash *)data)=*((nasal_hash *)temp.data);
break;
case VAR_FUNC:
data=new func;
*((func *)data)=*((func *)temp.data);
break;
}
}
var::~var()
{
if(data)
switch(type)
{
case VAR_LLINT:
delete (long long int *)data;
break;
case VAR_DOUBLE:
delete (double *)data;
break;
case VAR_CHAR:
delete (char *)data;
break;
case VAR_STRING:
delete (std::string *)data;
break;
case VAR_LIST:
delete (nasal_list *)data;
break;
case VAR_HASH:
delete (nasal_hash *)data;
break;
case VAR_FUNC:
delete (func *)data;
break;
}
}
var& var::operator=(const var &temp)
{
if(data)
switch(type)
{
case VAR_LLINT:
delete (long long int *)data;
break;
case VAR_DOUBLE:
delete (double *)data;
break;
case VAR_CHAR:
delete (char *)data;
break;
case VAR_STRING:
delete (std::string *)data;
break;
case VAR_LIST:
delete (nasal_list *)data;
break;
case VAR_HASH:
delete (nasal_hash *)data;
break;
case VAR_FUNC:
delete (func *)data;
break;
}
type=temp.type;
switch(type)
{
case VAR_NONE:
data=NULL;
break;
case VAR_LLINT:
data=new long long int;
*((long long int *)data)=*((long long int *)temp.data);
break;
case VAR_DOUBLE:
data=new double;
*((double *)data)=*((double *)temp.data);
break;
case VAR_CHAR:
data=new char;
*((char *)data)=*((char *)temp.data);
break;
case VAR_STRING:
data=new std::string;
*((std::string *)data)=*((std::string *)temp.data);
break;
case VAR_LIST:
data=new nasal_list;
*((nasal_list *)data)=*((nasal_list *)temp.data);
break;
case VAR_HASH:
data=new nasal_hash;
*((nasal_hash *)data)=*((nasal_hash *)temp.data);
break;
case VAR_FUNC:
data=new func;
*((func *)data)=*((func *)temp.data);
break;
}
return *this;
}
#endif