Fun
0.41.5
The programming language that makes you have fun!
Main Page
Data Structures
Files
File List
Globals
Loading...
Searching...
No Matches
src
vm
core
store_global.c
Go to the documentation of this file.
1
/*
2
* This file is part of the Fun programming language.
3
* https://fun-lang.xyz/
4
*
5
* Copyright 2025 Johannes Findeisen <you@hanez.org>
6
* Licensed under the terms of the Apache-2.0 license.
7
* https://opensource.org/license/apache-2-0
8
*/
9
10
/**
11
* @file store_global.c
12
* @brief Implements the OP_STORE_GLOBAL opcode for storing global variables in the VM.
13
*
14
* This file handles the OP_STORE_GLOBAL instruction, which stores a value into a global variable
15
* using its index.
16
*
17
* Behavior:
18
* - Pops the value from the stack.
19
* - Stores the value into the global variable at the specified index.
20
*
21
* Error Handling:
22
* - Exits with an error if the index is out of bounds.
23
*
24
* Example:
25
* - Bytecode: OP_STORE_GLOBAL 0
26
* - Stack before: [42]
27
* - Stack after: []
28
*/
29
30
case
OP_STORE_GLOBAL
: {
31
int
idx
= inst.operand;
32
if
(
idx < 0 || idx >
=
MAX_GLOBALS
) {
33
fprintf
(stderr,
"Runtime error: global index out of range\n"
);
34
exit
(1);
35
}
36
Value
v
=
pop_value
(vm);
37
#ifdef FUN_DEBUG
38
fprintf
(stderr,
"DEBUG STORE_GLOBAL[%d]: new.type=%d\n"
,
idx
,
v
.type);
39
#endif
40
free_value
(vm->globals[
idx
]);
41
vm->globals[
idx
] =
v
;
42
break
;
43
}
OP_STORE_GLOBAL
@ OP_STORE_GLOBAL
Definition
bytecode.h:42
v
Value v
Definition
cast.c:22
idx
int idx
Definition
index_of.c:38
free_value
free_value(vm->globals[idx])
Value
Tagged union representing a Fun value.
Definition
value.h:68
pop_value
static Value pop_value(VM *vm)
Pop a Value from the VM operand stack.
Definition
vm.c:580
fprintf
#define fprintf
Definition
vm.c:200
exit
#define exit(code)
Definition
vm.c:230
MAX_GLOBALS
#define MAX_GLOBALS
Definition
vm.h:34
Generated on
for Fun by
1.16.1