implemented dup

This commit is contained in:
Kyler Olsen 2025-11-29 15:26:52 -07:00
parent 8a5e3494e6
commit b287c00c65
1 changed files with 55 additions and 3 deletions

View File

@ -515,7 +515,7 @@ Boolean load_builtins(InterpreterState *interpreter_state) {
break; \
case STACK_TOKEN_STRING: \
return FALSE; \
}
} \
#define NUMERIC_TYPES \
double af = 0, bf = 0; \
@ -1445,8 +1445,60 @@ Boolean builtin_drop(InterpreterState *interpreter_state) {
}
Boolean builtin_dup(InterpreterState *interpreter_state) {
(void)interpreter_state;
return FALSE;
if (interpreter_state->stack == NULL) return FALSE;
StackItem *item = (StackItem *)malloc(sizeof(StackItem));
if (item == NULL) return FALSE;
item->type = interpreter_state->stack->type;
item->next = interpreter_state->stack;
switch (interpreter_state->stack->type) {
case STACK_IDENTIFIER:
item->identifier = interpreter_state->stack->identifier;
break;
case STACK_I64:
item->i64 = interpreter_state->stack->i64;
break;
case STACK_I32:
item->i32 = interpreter_state->stack->i32;
break;
case STACK_I16:
item->i16 = interpreter_state->stack->i16;
break;
case STACK_I8:
item->i8 = interpreter_state->stack->i8;
break;
case STACK_U64:
item->u64 = interpreter_state->stack->u64;
break;
case STACK_U32:
item->u32 = interpreter_state->stack->u32;
break;
case STACK_U16:
item->u16 = interpreter_state->stack->u16;
break;
case STACK_U8:
item->u8 = interpreter_state->stack->u8;
break;
case STACK_FLOAT:
item->f32 = interpreter_state->stack->f32;
break;
case STACK_DOUBLE:
item->f64 = interpreter_state->stack->f64;
break;
case STACK_CHARACTER:
item->character = interpreter_state->stack->character;
break;
case STACK_BOOLEAN:
item->boolean = interpreter_state->stack->boolean;
break;
case STACK_TOKEN_STRING:
item->token_string = copy_token_string(interpreter_state->stack->token_string);
break;
}
interpreter_state->stack = item;
return TRUE;
}
Boolean builtin_eval(InterpreterState *interpreter_state) {