🐛 fix compilation warnings on macOS

This commit is contained in:
ValKmjolnir 2023-04-11 00:28:12 +08:00
parent db47ab4445
commit a37ce6aadd
1 changed files with 46 additions and 49 deletions

View File

@ -270,43 +270,45 @@ std::ostream& operator<<(std::ostream& out,nas_vec& vec) {
var nas_hash::get_val(const string& key) { var nas_hash::get_val(const string& key) {
if (elems.count(key)) { if (elems.count(key)) {
return elems.at(key); return elems.at(key);
} else if (elems.count("parents")) { } else if (!elems.count("parents")) {
var ret=var::none(); return var::none();
var val=elems.at("parents"); }
if (val.type!=vm_vec) { var ret=var::none();
var val=elems.at("parents");
if (val.type!=vm_vec) {
return ret;
}
for(auto& i:val.vec().elems) {
if (i.type==vm_hash) {
ret=i.hash().get_val(key);
}
if (ret.type!=vm_none) {
return ret; return ret;
} }
for(auto& i:val.vec().elems) {
if (i.type==vm_hash) {
ret=i.hash().get_val(key);
}
if (ret.type!=vm_none) {
return ret;
}
}
} }
return var::none(); return ret;
} }
var* nas_hash::get_mem(const string& key) { var* nas_hash::get_mem(const string& key) {
if (elems.count(key)) { if (elems.count(key)) {
return &elems.at(key); return &elems.at(key);
} else if (elems.count("parents")) { } else if (!elems.count("parents")) {
var* addr=nullptr; return nullptr;
var val=elems.at("parents"); }
if (val.type!=vm_vec) { var* addr=nullptr;
var val=elems.at("parents");
if (val.type!=vm_vec) {
return addr;
}
for(auto& i:val.vec().elems) {
if (i.type==vm_hash) {
addr=i.hash().get_mem(key);
}
if (addr) {
return addr; return addr;
} }
for(auto& i:val.vec().elems) {
if (i.type==vm_hash) {
addr=i.hash().get_mem(key);
}
if (addr) {
return addr;
}
}
} }
return nullptr; return addr;
} }
std::ostream& operator<<(std::ostream& out,nas_hash& hash) { std::ostream& operator<<(std::ostream& out,nas_hash& hash) {
@ -441,43 +443,35 @@ bool var::objchk(obj_type objtype) {
} }
var var::none() { var var::none() {
return {vm_none,0}; return {vm_none,{0}};
} }
var var::nil() { var var::nil() {
return {vm_nil,0}; return {vm_nil,{0}};
} }
var var::ret(u32 pc) { var var::ret(u32 pc) {
return {vm_ret,pc}; return {vm_ret,{.ret=pc}};
} }
var var::cnt(i64 n) { var var::cnt(i64 n) {
var t; return {vm_cnt,{.cnt=n}};
t.type=vm_cnt;
t.val.cnt=n;
return t;
} }
var var::num(f64 n) { var var::num(f64 n) {
var t; return {vm_num,{.num=n}};
t.type=vm_num;
t.val.num=n;
return t;
} }
var var::gcobj(nas_val* p) { var var::gcobj(nas_val* p) {
var t; var tmp={p->type,{0}};
t.type=p->type; // use nas_val::type directly tmp.val.gcobj=p;
t.val.gcobj=p; return tmp;
return t;
} }
var var::addr(var* p) { var var::addr(var* p) {
var t; var tmp={vm_addr,{0}};
t.type=vm_addr; tmp.val.addr=p;
t.val.addr=p; return tmp;
return t;
} }
var* var::addr () {return val.addr; } var* var::addr () {return val.addr; }
@ -823,11 +817,14 @@ var nas_err(const string& err_f,const string& info) {
return var::none(); return var::none();
} }
typedef var (*mod)(var*,usize,gc*); // module function type // module function type
typedef var (*mod)(var*,usize,gc*);
typedef struct { // module function stores in tables with this type, end with {nullptr,nullptr}
struct mod_func {
const char* name; const char* name;
mod fd; mod fd;
} mod_func; // module function stores in tables with this type, end with {nullptr,nullptr} };
typedef mod_func* (*getptr)(); // module function "get" type // module function "get" type
typedef mod_func* (*getptr)();