using c++ cast (wip)

This commit is contained in:
ValKmjolnir 2023-09-14 00:34:31 +08:00
parent c157d8a9b1
commit 36a2aa67ef
6 changed files with 30 additions and 16 deletions

View File

@ -42,9 +42,10 @@ const auto ghost_for_test = "ghost_for_test";
void ghost_for_test_destructor(void* ptr) { void ghost_for_test_destructor(void* ptr) {
std::cout << "ghost_for_test::destructor (0x"; std::cout << "ghost_for_test::destructor (0x";
std::cout << std::hex << (u64)ptr << std::dec << ") {\n"; std::cout << std::hex << reinterpret_cast<u64>(ptr) << std::dec << ") {\n";
delete (u32*)ptr; delete static_cast<u32*>(ptr);
std::cout << " delete 0x" << std::hex << (u64)ptr << std::dec << ";\n"; std::cout << " delete 0x" << std::hex;
std::cout << reinterpret_cast<u64>(ptr) << std::dec << ";\n";
std::cout << "}\n"; std::cout << "}\n";
} }

View File

@ -3,23 +3,35 @@
namespace nasal { namespace nasal {
var builtin_u32xor(var* local, gc& ngc) { var builtin_u32xor(var* local, gc& ngc) {
return var::num((f64)(u32(local[1].num())^u32(local[2].num()))); return var::num((f64)(
static_cast<u32>(local[1].num()) ^
static_cast<u32>(local[2].num())
));
} }
var builtin_u32and(var* local, gc& ngc) { var builtin_u32and(var* local, gc& ngc) {
return var::num((f64)(u32(local[1].num())&u32(local[2].num()))); return var::num((f64)(
static_cast<u32>(local[1].num()) &
static_cast<u32>(local[2].num())
));
} }
var builtin_u32or(var* local, gc& ngc) { var builtin_u32or(var* local, gc& ngc) {
return var::num((f64)(u32(local[1].num())|u32(local[2].num()))); return var::num((f64)(
static_cast<u32>(local[1].num()) |
static_cast<u32>(local[2].num())
));
} }
var builtin_u32nand(var* local, gc& ngc) { var builtin_u32nand(var* local, gc& ngc) {
return var::num((f64)(u32)(~(u32(local[1].num())&u32(local[2].num())))); return var::num(static_cast<f64>(~(
static_cast<u32>(local[1].num()) &
static_cast<u32>(local[2].num())
)));
} }
var builtin_u32not(var* local, gc& ngc) { var builtin_u32not(var* local, gc& ngc) {
return var::num((f64)(u32)(~u32(local[1].num()))); return var::num(static_cast<f64>(~static_cast<u32>(local[1].num())));
} }
var builtin_fld(var* local, gc& ngc) { var builtin_fld(var* local, gc& ngc) {
@ -79,7 +91,7 @@ var builtin_sfld(var* local, gc& ngc) {
if (res&(1<<(len-1))) { if (res&(1<<(len-1))) {
res |= ~((1<<len)-1); res |= ~((1<<len)-1);
} }
return var::num((f64)((i32)res)); return var::num(static_cast<f64>(static_cast<i32>(res)));
} }
var builtin_setfld(var* local, gc& ngc) { var builtin_setfld(var* local, gc& ngc) {

View File

@ -52,7 +52,7 @@ std::ostream& help(std::ostream& out) {
<< " -t, --time | show execute time.\n" << " -t, --time | show execute time.\n"
<< " -d, --detail | get detail info.\n" << " -d, --detail | get detail info.\n"
<< " -dbg, --debug | debug mode.\n" << " -dbg, --debug | debug mode.\n"
<< " --prof | show profiling result, available under debug mode.\n" << " --prof | show profiling result, available in debug mode.\n"
<< " --prof-all | show profiling result of all files," << " --prof-all | show profiling result of all files,"
<< "available under debug mode.\n" << "available under debug mode.\n"
<< "file:\n" << "file:\n"

View File

@ -51,7 +51,7 @@ var builtin_setsize(var* local, gc& ngc) {
if (size.type!=vm_num || size.num()<0) { if (size.type!=vm_num || size.num()<0) {
return nil; return nil;
} }
vec.vec().elems.resize((i64)size.num(), nil); vec.vec().elems.resize(static_cast<i64>(size.num()), nil);
return nil; return nil;
} }
@ -144,7 +144,7 @@ var builtin_int(var* local, gc& ngc) {
if (val.type!=vm_num && val.type!=vm_str) { if (val.type!=vm_num && val.type!=vm_str) {
return nil; return nil;
} }
return var::num(f64((i32)val.tonum())); return var::num(static_cast<f64>(static_cast<i32>(val.tonum())));
} }
var builtin_floor(var* local, gc& ngc) { var builtin_floor(var* local, gc& ngc) {
@ -333,7 +333,7 @@ var builtin_right(var* local, gc& ngc) {
if (len.type!=vm_num) { if (len.type!=vm_num) {
return nas_err("right", "\"length\" must be number"); return nas_err("right", "\"length\" must be number");
} }
i32 length = (i32)len.num(); i32 length = static_cast<i32>(len.num());
i32 srclen = str.str().length(); i32 srclen = str.str().length();
if (length>srclen) { if (length>srclen) {
length = srclen; length = srclen;

View File

@ -154,7 +154,8 @@ void nas_co::clear() {
} }
std::ostream& operator<<(std::ostream& out, const nas_co& co) { std::ostream& operator<<(std::ostream& out, const nas_co& co) {
out << "<coroutine at 0x" << std::hex << u64(&co) << std::dec << ">"; out << "<coroutine at 0x" << std::hex;
out << reinterpret_cast<u64>(&co) << std::dec << ">";
return out; return out;
} }

View File

@ -130,11 +130,11 @@ void vm::stackinfo(const u32 limit = 10) {
var* bottom = ctx.stack; var* bottom = ctx.stack;
std::clog << "stack (0x" << std::hex << (u64)bottom << std::dec; std::clog << "stack (0x" << std::hex << (u64)bottom << std::dec;
std::clog << ", limit " << limit << ", total "; std::clog << ", limit " << limit << ", total ";
std::clog << (top<bottom? 0:(i64)(top-bottom+1)) << ")\n"; std::clog << (top<bottom? 0:static_cast<i64>(top-bottom+1)) << ")\n";
for(u32 i = 0; i<limit && top>=bottom; ++i, --top) { for(u32 i = 0; i<limit && top>=bottom; ++i, --top) {
std::clog << " 0x" << std::hex std::clog << " 0x" << std::hex
<< std::setw(6) << std::setfill('0') << std::setw(6) << std::setfill('0')
<< (u64)(top-bottom) << std::dec << static_cast<u64>(top-bottom) << std::dec
<< " "; << " ";
valinfo(top[0]); valinfo(top[0]);
} }