update
This commit is contained in:
parent
a03d8a440d
commit
e169ffc5ee
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue