logic stuff:3

This commit is contained in:
ame 2023-09-14 12:46:29 -05:00
parent 7c151136eb
commit 65f0a57f28
2 changed files with 59 additions and 2 deletions

View File

@ -98,6 +98,37 @@ namespace builtin {
//if(std::get<int>(l->args[1].value)>ob.size()) p_ferr("out of range",1);
//return ob[std::get<int>(l->args[1].value)];
}
std::any _equ(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)==std::get<int>(l->args[1].value));
}
std::any _great(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)>std::get<int>(l->args[1].value));
}
std::any _less(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)<std::get<int>(l->args[1].value));
}
std::any _great_o_equ(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)>=std::get<int>(l->args[1].value));
}
std::any _less_o_equ(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)<=std::get<int>(l->args[1].value));
}
std::any _nequ(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)!=std::get<int>(l->args[1].value));
}
std::any _and(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)&&std::get<int>(l->args[1].value));
}
std::any _not(lexi*l,state*s){
return (int)!std::get<int>(l->args[0].value);
}
std::any _or(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)||std::get<int>(l->args[1].value));
}
std::any _xor(lexi*l,state*s){
return (int)(std::get<int>(l->args[0].value)^std::get<int>(l->args[1].value));
}
}
void ttest(lexi l){

View File

@ -53,7 +53,18 @@ namespace builtin {
std::any _mod(lexi*, state*);
std::any _get(lexi*, state*);
std::any _set(lexi*, state*);
std::any _equ(lexi*, state*);
std::any _great(lexi*, state*);
std::any _less(lexi*, state*);
std::any _great_o_equ(lexi*, state*);
std::any _less_o_equ(lexi*, state*);
std::any _nequ(lexi*, state*);
std::any _and(lexi*, state*);
std::any _not(lexi*, state*);
std::any _or(lexi*, state*);
std::any _xor(lexi*, state*);
}
@ -70,9 +81,24 @@ static builtin::builtin _mod("%",{INT,INT},INT,builtin::_mod);
static builtin::builtin _get("get",{ARRAY,INT},ANY,builtin::_get);
static builtin::builtin _set("set",{NONE,INT,ANY},NONE,builtin::_set);
static builtin::builtin _equ("==",{INT,INT},INT,builtin::_equ);
static builtin::builtin _great(">",{INT,INT},INT,builtin::_great);
static builtin::builtin _less("<",{INT,INT},INT,builtin::_less);
static builtin::builtin _great_o_equ(">=",{INT,INT},INT,builtin::_great_o_equ);
static builtin::builtin _less_o_equ("<=",{INT,INT},INT,builtin::_less_o_equ);
static builtin::builtin _nequ("!=",{INT,INT},INT,builtin::_nequ);
static builtin::builtin _and("&&",{INT,INT},INT,builtin::_and);
static builtin::builtin _not("!",{INT},INT,builtin::_not);
static builtin::builtin _or("||",{INT,INT},INT,builtin::_or);
static builtin::builtin _xor("^",{INT,INT},INT,builtin::_xor);
static std::map<std::string, builtin::builtin*> builtins = {
{"write",&_write},{"exit",&_exit},{"if",&_if},{"__anon",&__anon},{"def",&_def},{"+",&_add}
,{"-",&_sub},{"*",&_mul},{"/",&_div},{"%",&_mod},{"get",&_get},{"set",&_set}
,{"-",&_sub},{"*",&_mul},{"/",&_div},{"%",&_mod},{"get",&_get},{"set",&_set},{"==",&_equ},
{">",&_great},{"<",&_less},{">=",&_great_o_equ},{"<=",&_less_o_equ},{"!=",&_nequ},{"&&",&_and},
{"!",&_not},{"||",&_or},{"^",&_xor},
};
void ttest(lexi);