✨ improve vm::value_info
This commit is contained in:
parent
0f80dd7588
commit
1205c6d788
|
@ -1,6 +1,6 @@
|
|||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(nasal VERSION 11.2)
|
||||
project(nasal VERSION 11.3)
|
||||
|
||||
message("CMAKE_HOST_SYSTEM_NAME: ${CMAKE_HOST_SYSTEM_NAME}")
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#ifndef __nasver__
|
||||
#define __nasver__ "11.2"
|
||||
#define __nasver__ "11.3"
|
||||
#endif
|
||||
|
||||
#include <cstddef>
|
||||
|
|
|
@ -63,45 +63,74 @@ void vm::context_and_global_init() {
|
|||
}
|
||||
}
|
||||
|
||||
void vm::hash_value_info(var& val) {
|
||||
std::clog << "{";
|
||||
usize count = 0;
|
||||
for(const auto& i : val.hash().elems) {
|
||||
++count;
|
||||
if (count>3) {
|
||||
break;
|
||||
}
|
||||
|
||||
std::clog << i.first;
|
||||
if (count!=val.hash().size()) {
|
||||
std::clog << ", ";
|
||||
}
|
||||
}
|
||||
if (val.hash().size()>3) {
|
||||
std::clog << "...";
|
||||
}
|
||||
std::clog << "}";
|
||||
}
|
||||
|
||||
void vm::value_info(var& val) {
|
||||
const auto p = reinterpret_cast<u64>(val.val.gcobj);
|
||||
switch(val.type) {
|
||||
case vm_type::vm_none: std::clog << "| null |"; break;
|
||||
case vm_type::vm_ret: std::clog << "| pc | 0x" << std::hex
|
||||
<< val.ret() << std::dec; break;
|
||||
case vm_type::vm_addr: std::clog << "| addr | 0x" << std::hex
|
||||
<< reinterpret_cast<u64>(val.addr())
|
||||
<< std::dec; break;
|
||||
case vm_type::vm_ret:
|
||||
std::clog << "| pc | 0x" << std::hex << val.ret() << std::dec;
|
||||
break;
|
||||
case vm_type::vm_addr:
|
||||
std::clog << "| addr | 0x";
|
||||
std::clog << std::hex << reinterpret_cast<u64>(val.addr()) << std::dec;
|
||||
break;
|
||||
case vm_type::vm_cnt: std::clog << "| cnt | " << val.cnt(); break;
|
||||
case vm_type::vm_nil: std::clog << "| nil |"; break;
|
||||
case vm_type::vm_num: std::clog << "| num | " << val.num(); break;
|
||||
case vm_type::vm_str: std::clog << "| str | <0x" << std::hex << p
|
||||
<< "> \"" << util::rawstr(val.str(), 16)
|
||||
<< "\"" << std::dec; break;
|
||||
case vm_type::vm_func: std::clog << "| func | <0x" << std::hex << p
|
||||
<< std::dec << "> " << val.func();
|
||||
break;
|
||||
case vm_type::vm_upval:std::clog << "| upval| <0x" << std::hex << p
|
||||
<< std::dec << "> [" << val.upval().size
|
||||
<< " val]"; break;
|
||||
case vm_type::vm_vec: std::clog << "| vec | <0x" << std::hex << p
|
||||
<< std::dec << "> [" << val.vec().size()
|
||||
<< " val]"; break;
|
||||
case vm_type::vm_hash: std::clog << "| hash | <0x" << std::hex << p
|
||||
<< std::dec << "> {" << val.hash().size()
|
||||
<< " val}"; break;
|
||||
case vm_type::vm_ghost:std::clog << "| obj | <0x" << std::hex << p
|
||||
<< "> obj:0x"
|
||||
<< reinterpret_cast<u64>(val.ghost().pointer)
|
||||
<< std::dec; break;
|
||||
case vm_type::vm_co: std::clog << "| co | <0x" << std::hex << p
|
||||
<< std::dec << "> coroutine"; break;
|
||||
case vm_type::vm_map: std::clog << "| nmspc| <0x" << std::hex << p
|
||||
<< std::dec << "> namespace ["
|
||||
<< val.map().mapper.size()
|
||||
<< " val]"; break;
|
||||
default: std::clog << "| err | <0x" << std::hex << p
|
||||
<< std::dec << "> unknown object"; break;
|
||||
case vm_type::vm_str:
|
||||
std::clog << "| str | <0x" << std::hex << p << "> " << std::dec;
|
||||
std::clog << "\"" << util::rawstr(val.str(), 16) << "\"";
|
||||
break;
|
||||
case vm_type::vm_func:
|
||||
std::clog << "| func | <0x" << std::hex << p << std::dec << "> ";
|
||||
std::clog << val.func();
|
||||
break;
|
||||
case vm_type::vm_upval:
|
||||
std::clog << "| upval| <0x" << std::hex << p << std::dec;
|
||||
std::clog << "> [" << val.upval().size << " val]"; break;
|
||||
case vm_type::vm_vec:
|
||||
std::clog << "| vec | <0x" << std::hex << p << std::dec;
|
||||
std::clog << "> [" << val.vec().size() << " val]"; break;
|
||||
case vm_type::vm_hash:
|
||||
std::clog << "| hash | <0x" << std::hex << p << std::dec << "> ";
|
||||
hash_value_info(val);
|
||||
break;
|
||||
case vm_type::vm_ghost:
|
||||
std::clog << "| obj | <0x" << std::hex << p << "> " << std::dec;
|
||||
std::clog << "obj:" << val.ghost().type_name;
|
||||
break;
|
||||
case vm_type::vm_co:
|
||||
std::clog << "| co | <0x" << std::hex << p << std::dec;
|
||||
std::clog << "> coroutine";
|
||||
break;
|
||||
case vm_type::vm_map:
|
||||
std::clog << "| nmspc| <0x" << std::hex << p << std::dec;
|
||||
std::clog << "> namespace [" << val.map().mapper.size() << " val]";
|
||||
break;
|
||||
default:
|
||||
std::clog << "| err | <0x" << std::hex << p << std::dec;
|
||||
std::clog << "> unknown object";
|
||||
break;
|
||||
}
|
||||
std::clog << "\n";
|
||||
}
|
||||
|
|
|
@ -65,6 +65,7 @@ protected:
|
|||
protected:
|
||||
/* debug functions */
|
||||
bool verbose = false;
|
||||
void hash_value_info(var&);
|
||||
void value_info(var&);
|
||||
void function_detail_info(const nas_func&);
|
||||
void function_call_trace();
|
||||
|
|
Loading…
Reference in New Issue