This commit is contained in:
Valk Richard Li 2020-02-15 17:02:04 +08:00 committed by GitHub
parent a03d8a440d
commit e169ffc5ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 51 additions and 22 deletions

View File

@ -12,17 +12,24 @@ struct gc_unit
gc_unit()
{
collected=true;
//elem=0;
elem.set_clear();
refcnt=0;
return;
}
gc_unit(const gc_unit& tmp)
{
collected=tmp.collected;
//elem=tmp.elem;
elem =tmp.elem;
refcnt =tmp.refcnt;
return;
}
void set_clear()
{
collected=true;
elem.set_clear();
refcnt=0;
return;
}
};
class gc_manager
@ -61,7 +68,7 @@ class gc_manager
for(int i=0;i<memory_size;++i)
if((memory[i].refcnt<=0) && (!memory[i].collected))
{
memory[i].collected=true;
memory[i].set_clear();
free_space.push_back(i);
std::cout<<">> [Gc] collected ";
prt_hex(i);

View File

@ -5,6 +5,7 @@ class nasal_runtime
{
private:
sym_hash_map global;
// local hash_map will be used when running
public:
nasal_runtime()
{
@ -18,14 +19,16 @@ class nasal_runtime
nasal_gc.gc_init();
return;
}
void before_running_init()
void func_proc()
{
global.set_clear();
nasal_gc.gc_init();
return;
}
void main_proc(abstract_syntax_tree& root)
{
// init
global.set_clear();
nasal_gc.gc_init();
return;
}
};

View File

@ -19,6 +19,22 @@ class nasal_function
function_root.set_clear();
return;
}
void set_clear()
{
local_scope.clear();
function_root.set_clear();
return;
}
nasal_function& operator=(const nasal_function& tmp)
{
local_scope=tmp.local_scope;
function_root=tmp.function_root;
return *this;
}
std::map<std::string,int>& get_local_scope()
{
return local_scope;
}
};
class nasal_scalar
@ -47,6 +63,7 @@ class nasal_scalar
var_number=tmp.var_number;
var_array =tmp.var_array;
var_hash =tmp.var_hash;
var_func =tmp.var_func;
return;
}
nasal_scalar& operator=(const nasal_scalar& tmp)
@ -56,6 +73,7 @@ class nasal_scalar
var_number=tmp.var_number;
var_array =tmp.var_array;
var_hash =tmp.var_hash;
var_func =tmp.var_func;
return *this;
}
void set_clear()
@ -65,6 +83,7 @@ class nasal_scalar
var_number=0;
var_array.clear();
var_hash.clear();
var_func.set_clear();
return;
}
void set_type(const int tmp_type)