implemented and, not, and or
This commit is contained in:
parent
aa8a69b261
commit
2f36271439
|
|
@ -26,6 +26,7 @@ Boolean builtin_equal_to(InterpreterState *interpreter_state);
|
|||
Boolean builtin_not_equal_to(InterpreterState *interpreter_state);
|
||||
Boolean builtin_abs(InterpreterState *interpreter_state);
|
||||
Boolean builtin_acos(InterpreterState *interpreter_state);
|
||||
Boolean builtin_and(InterpreterState *interpreter_state);
|
||||
Boolean builtin_asin(InterpreterState *interpreter_state);
|
||||
// Boolean builtin_assert(InterpreterState *interpreter_state);
|
||||
// Boolean builtin_at(InterpreterState *interpreter_state);
|
||||
|
|
@ -204,6 +205,12 @@ Boolean load_builtins(InterpreterState *interpreter_state) {
|
|||
if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func))
|
||||
return FALSE;
|
||||
|
||||
func = (FunctionItem *)malloc(sizeof(FunctionItem));
|
||||
if (func == NULL) return FALSE;
|
||||
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_and};
|
||||
if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func))
|
||||
return FALSE;
|
||||
|
||||
func = (FunctionItem *)malloc(sizeof(FunctionItem));
|
||||
if (func == NULL) return FALSE;
|
||||
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_asin};
|
||||
|
|
@ -1049,6 +1056,27 @@ Boolean builtin_acos(InterpreterState *interpreter_state) {
|
|||
FLOAT_FUNCTION(acos);
|
||||
}
|
||||
|
||||
Boolean builtin_and(InterpreterState *interpreter_state) {
|
||||
NUMERIC_TYPES;
|
||||
|
||||
StackItem *node = interpreter_state->stack;
|
||||
interpreter_state->stack = interpreter_state->stack->next->next;
|
||||
node->next->next = NULL;
|
||||
clean_stack(node);
|
||||
|
||||
if (type & NUMERIC_FLOAT) {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ bf && af },
|
||||
});
|
||||
} else {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ bi && ai },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Boolean builtin_asin(InterpreterState *interpreter_state) {
|
||||
NUMERIC_TYPE;
|
||||
if (af < -1 || af > 1) return FALSE;
|
||||
|
|
@ -1180,13 +1208,45 @@ Boolean builtin_min(InterpreterState *interpreter_state) {
|
|||
}
|
||||
|
||||
Boolean builtin_not(InterpreterState *interpreter_state) {
|
||||
(void)interpreter_state;
|
||||
return FALSE;
|
||||
NUMERIC_TYPE;
|
||||
|
||||
StackItem *node = interpreter_state->stack;
|
||||
interpreter_state->stack = interpreter_state->stack->next->next;
|
||||
node->next->next = NULL;
|
||||
clean_stack(node);
|
||||
|
||||
if (type & NUMERIC_FLOAT) {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ !af },
|
||||
});
|
||||
} else {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ !ai },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Boolean builtin_or(InterpreterState *interpreter_state) {
|
||||
(void)interpreter_state;
|
||||
return FALSE;
|
||||
NUMERIC_TYPES;
|
||||
|
||||
StackItem *node = interpreter_state->stack;
|
||||
interpreter_state->stack = interpreter_state->stack->next->next;
|
||||
node->next->next = NULL;
|
||||
clean_stack(node);
|
||||
|
||||
if (type & NUMERIC_FLOAT) {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ bf || af },
|
||||
});
|
||||
} else {
|
||||
return push_token(interpreter_state, (Token){
|
||||
.type = TOKEN_BOOLEAN,
|
||||
.boolean_literal = (Boolean){ bi || ai },
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Boolean builtin_pick(InterpreterState *interpreter_state) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue