show function entry file location

in call trace info
This commit is contained in:
ValKmjolnir 2023-12-01 19:31:47 +08:00
parent 14ec9d2a34
commit 476fbdb859
3 changed files with 17 additions and 19 deletions

View File

@ -58,7 +58,6 @@ private:
std::string var_generate(var&);
std::string vector_generate(nas_vec&);
std::string hash_generate(nas_hash&);
std::string map_generate(nas_map&);
private:
bool is_num(char c) {
@ -95,11 +94,23 @@ std::string json::var_generate(var& value) {
case vm_type::vm_num: {
std::stringstream out;
out << value.num();
if (std::isnan(value.num())) {
error_info() += "json::stringify: cannot generate number nan\n";
}
if (std::isinf(value.num())) {
error_info() += "json::stringify: cannot generate number inf\n";
}
return out.str();
}
case vm_type::vm_str: return "\"" + value.str() + "\"";
case vm_type::vm_vec: return vector_generate(value.vec());
case vm_type::vm_hash: return hash_generate(value.hash());
case vm_type::vm_func:
error_info() += "json::stringify: cannot generate function\n"; break;
case vm_type::vm_ghost:
error_info() += "json::stringify: cannot generate ghost type\n"; break;
case vm_type::vm_map:
error_info() += "json::stringify: cannot generate namespace type\n"; break;
default: break;
}
return "\"undefined\"";
@ -130,26 +141,12 @@ std::string json::hash_generate(nas_hash& hash) {
return out;
}
std::string json::map_generate(nas_map& nmap) {
std::string out = "{";
for(auto& i : nmap.mapper) {
out += "\"" + i.first + "\":";
out += var_generate(*i.second) + ",";
}
if (out.back()==',') {
out.pop_back();
}
out += "}";
return out;
}
std::string json::stringify(var& object) {
error_info() = "";
if (object.is_vec()) {
return vector_generate(object.vec());
} else if (object.is_hash()) {
return hash_generate(object.hash());
} else if (object.is_map()) {
return map_generate(object.map());
}
return "[]";
}
@ -349,7 +346,7 @@ var json::parse(const std::string& input, gc* ngc) {
var stringify(var* args, usize size, gc* ngc) {
auto object = args[0];
if (!object.is_vec() && !object.is_hash() && !object.is_map()) {
if (!object.is_vec() && !object.is_hash()) {
return nas_err("json::stringify", "must use hashmap or vector");
}
return ngc->newstr(json().stringify(object));

View File

@ -111,7 +111,7 @@ void codestream::dump(std::ostream& out) const {
break;
}
if (files) {
out << "(" << files[code.fidx] << ":" << code.line << ")";
out << " (" << files[code.fidx] << ":" << code.line << ")";
}
}

View File

@ -129,7 +129,8 @@ void vm::function_detail_info(const nas_func& func) {
std::clog << const_string[func.dynamic_parameter_index] << "...";
}
std::clog << ") ";
std::clog << "{entry: 0x" << std::hex << func.entry << std::dec << "}";
const auto& code = bytecode[func.entry];
std::clog << "{ entry: " << files[code.fidx] << ":" << code.line << " }";
}
void vm::function_call_trace() {