print can show more details.
This commit is contained in:
parent
2b4b1af72c
commit
5c253bac88
|
@ -25,14 +25,12 @@ int nasal_runtime::builtin_print(int local_scope_addr)
|
||||||
case vm_nil:std::cout<<"nil";break;
|
case vm_nil:std::cout<<"nil";break;
|
||||||
case vm_number:std::cout<<tmp.get_number();break;
|
case vm_number:std::cout<<tmp.get_number();break;
|
||||||
case vm_string:std::cout<<tmp.get_string();break;
|
case vm_string:std::cout<<tmp.get_string();break;
|
||||||
case vm_vector:std::cout<<"[...]";break;
|
case vm_vector:tmp.get_vector().print();break;
|
||||||
case vm_hash:std::cout<<"{...}";break;
|
case vm_hash:tmp.get_hash().print();break;
|
||||||
case vm_function:std::cout<<"func(...){...}";break;
|
case vm_function:std::cout<<"func(...){...}";break;
|
||||||
case vm_closure:std::cout<<"closure{{...}}";break;
|
|
||||||
}
|
}
|
||||||
if(i==size-1)
|
|
||||||
std::cout<<'\n';
|
|
||||||
}
|
}
|
||||||
|
std::cout<<"\n";
|
||||||
// generate return value
|
// generate return value
|
||||||
int ret_addr=nasal_vm.gc_alloc();
|
int ret_addr=nasal_vm.gc_alloc();
|
||||||
nasal_vm.gc_get(ret_addr).set_type(vm_nil);
|
nasal_vm.gc_get(ret_addr).set_type(vm_nil);
|
||||||
|
|
45
nasal_gc.h
45
nasal_gc.h
|
@ -25,6 +25,7 @@ public:
|
||||||
int size();
|
int size();
|
||||||
int get_value_address(int);
|
int get_value_address(int);
|
||||||
int get_mem_address(int);
|
int get_mem_address(int);
|
||||||
|
void print();
|
||||||
};
|
};
|
||||||
|
|
||||||
class nasal_hash
|
class nasal_hash
|
||||||
|
@ -41,7 +42,8 @@ public:
|
||||||
int get_value_address(std::string);
|
int get_value_address(std::string);
|
||||||
int get_mem_address(std::string);
|
int get_mem_address(std::string);
|
||||||
bool check_contain(std::string);
|
bool check_contain(std::string);
|
||||||
int get_keys();
|
int get_keys();
|
||||||
|
void print();
|
||||||
};
|
};
|
||||||
|
|
||||||
class nasal_function
|
class nasal_function
|
||||||
|
@ -226,6 +228,26 @@ int nasal_vector::get_mem_address(int index)
|
||||||
}
|
}
|
||||||
return elems[(index+vec_size)%vec_size];
|
return elems[(index+vec_size)%vec_size];
|
||||||
}
|
}
|
||||||
|
void nasal_vector::print()
|
||||||
|
{
|
||||||
|
int size=elems.size();
|
||||||
|
std::cout<<"[";
|
||||||
|
for(int i=0;i<size;++i)
|
||||||
|
{
|
||||||
|
nasal_scalar& tmp=nasal_vm.gc_get(nasal_vm.mem_get(elems[i]));
|
||||||
|
switch(tmp.get_type())
|
||||||
|
{
|
||||||
|
case vm_nil:std::cout<<"nil";break;
|
||||||
|
case vm_number:std::cout<<tmp.get_number();break;
|
||||||
|
case vm_string:std::cout<<tmp.get_string();break;
|
||||||
|
case vm_vector:tmp.get_vector().print();break;
|
||||||
|
case vm_hash:tmp.get_hash().print();break;
|
||||||
|
case vm_function:std::cout<<"func(...){...}";break;
|
||||||
|
}
|
||||||
|
std::cout<<",]"[i==size-1];
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*functions of nasal_hash*/
|
/*functions of nasal_hash*/
|
||||||
nasal_hash::nasal_hash()
|
nasal_hash::nasal_hash()
|
||||||
|
@ -364,6 +386,27 @@ int nasal_hash::get_keys()
|
||||||
}
|
}
|
||||||
return ret_addr;
|
return ret_addr;
|
||||||
}
|
}
|
||||||
|
void nasal_hash::print()
|
||||||
|
{
|
||||||
|
std::cout<<"{";
|
||||||
|
for(std::map<std::string,int>::iterator i=elems.begin();i!=elems.end();++i)
|
||||||
|
{
|
||||||
|
std::cout<<i->first<<":";
|
||||||
|
nasal_scalar& tmp=nasal_vm.gc_get(nasal_vm.mem_get(i->second));
|
||||||
|
switch(tmp.get_type())
|
||||||
|
{
|
||||||
|
case vm_nil:std::cout<<"nil";break;
|
||||||
|
case vm_number:std::cout<<tmp.get_number();break;
|
||||||
|
case vm_string:std::cout<<tmp.get_string();break;
|
||||||
|
case vm_vector:tmp.get_vector().print();break;
|
||||||
|
case vm_hash:tmp.get_hash().print();break;
|
||||||
|
case vm_function:std::cout<<"func(...){...}";break;
|
||||||
|
}
|
||||||
|
std::cout<<",}"[(++i)==elems.end()];
|
||||||
|
--i;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/*functions of nasal_function*/
|
/*functions of nasal_function*/
|
||||||
nasal_function::nasal_function()
|
nasal_function::nasal_function()
|
||||||
|
|
Loading…
Reference in New Issue