implemented pick

This commit is contained in:
Kyler Olsen 2025-11-29 15:36:16 -07:00
parent b287c00c65
commit 69c211ec06
1 changed files with 72 additions and 2 deletions

View File

@ -1601,8 +1601,78 @@ Boolean builtin_or(InterpreterState *interpreter_state) {
}
Boolean builtin_pick(InterpreterState *interpreter_state) {
(void)interpreter_state;
NUMERIC_TYPE;
(void)af;
if (type & NUMERIC_FLOAT)
return FALSE;
StackItem *picked = interpreter_state->stack->next;
for (size_t i = 0; i < ai; i++) {
picked = picked->next;
if (picked == NULL) return FALSE;
}
if (picked == NULL) return FALSE;
StackItem *node = interpreter_state->stack;
if (node == NULL) return FALSE;
interpreter_state->stack = node->next;
node->next = NULL;
clean_stack(node);
StackItem *item = (StackItem *)malloc(sizeof(StackItem));
if (item == NULL) return FALSE;
item->type = picked->type;
item->next = interpreter_state->stack;
switch (interpreter_state->stack->type) {
case STACK_IDENTIFIER:
item->identifier = picked->identifier;
break;
case STACK_I64:
item->i64 = picked->i64;
break;
case STACK_I32:
item->i32 = picked->i32;
break;
case STACK_I16:
item->i16 = picked->i16;
break;
case STACK_I8:
item->i8 = picked->i8;
break;
case STACK_U64:
item->u64 = picked->u64;
break;
case STACK_U32:
item->u32 = picked->u32;
break;
case STACK_U16:
item->u16 = picked->u16;
break;
case STACK_U8:
item->u8 = picked->u8;
break;
case STACK_FLOAT:
item->f32 = picked->f32;
break;
case STACK_DOUBLE:
item->f64 = picked->f64;
break;
case STACK_CHARACTER:
item->character = picked->character;
break;
case STACK_BOOLEAN:
item->boolean = picked->boolean;
break;
case STACK_TOKEN_STRING:
item->token_string = copy_token_string(picked->token_string);
break;
}
interpreter_state->stack = item;
return TRUE;
}
Boolean builtin_rand(InterpreterState *interpreter_state) {