implemented pick
This commit is contained in:
parent
b287c00c65
commit
69c211ec06
|
|
@ -1601,8 +1601,78 @@ Boolean builtin_or(InterpreterState *interpreter_state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Boolean builtin_pick(InterpreterState *interpreter_state) {
|
Boolean builtin_pick(InterpreterState *interpreter_state) {
|
||||||
(void)interpreter_state;
|
NUMERIC_TYPE;
|
||||||
return FALSE;
|
(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) {
|
Boolean builtin_rand(InterpreterState *interpreter_state) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue