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_not_equal_to(InterpreterState *interpreter_state);
|
||||||
Boolean builtin_abs(InterpreterState *interpreter_state);
|
Boolean builtin_abs(InterpreterState *interpreter_state);
|
||||||
Boolean builtin_acos(InterpreterState *interpreter_state);
|
Boolean builtin_acos(InterpreterState *interpreter_state);
|
||||||
|
Boolean builtin_and(InterpreterState *interpreter_state);
|
||||||
Boolean builtin_asin(InterpreterState *interpreter_state);
|
Boolean builtin_asin(InterpreterState *interpreter_state);
|
||||||
// Boolean builtin_assert(InterpreterState *interpreter_state);
|
// Boolean builtin_assert(InterpreterState *interpreter_state);
|
||||||
// Boolean builtin_at(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))
|
if (!hash_table_put_funcs(interpreter_state->functions, SLS_STR("acos"), func))
|
||||||
return FALSE;
|
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));
|
func = (FunctionItem *)malloc(sizeof(FunctionItem));
|
||||||
if (func == NULL) return FALSE;
|
if (func == NULL) return FALSE;
|
||||||
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_asin};
|
*func = (FunctionItem){ .type = FUNCTION_BUILTIN, .builtin = *builtin_asin};
|
||||||
|
|
@ -1049,6 +1056,27 @@ Boolean builtin_acos(InterpreterState *interpreter_state) {
|
||||||
FLOAT_FUNCTION(acos);
|
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) {
|
Boolean builtin_asin(InterpreterState *interpreter_state) {
|
||||||
NUMERIC_TYPE;
|
NUMERIC_TYPE;
|
||||||
if (af < -1 || af > 1) return FALSE;
|
if (af < -1 || af > 1) return FALSE;
|
||||||
|
|
@ -1180,13 +1208,45 @@ Boolean builtin_min(InterpreterState *interpreter_state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Boolean builtin_not(InterpreterState *interpreter_state) {
|
Boolean builtin_not(InterpreterState *interpreter_state) {
|
||||||
(void)interpreter_state;
|
NUMERIC_TYPE;
|
||||||
return FALSE;
|
|
||||||
|
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) {
|
Boolean builtin_or(InterpreterState *interpreter_state) {
|
||||||
(void)interpreter_state;
|
NUMERIC_TYPES;
|
||||||
return FALSE;
|
|
||||||
|
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) {
|
Boolean builtin_pick(InterpreterState *interpreter_state) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue