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
math
random_int.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
32
33
case
OP_RANDOM_INT
: {
34
Value
hi = pop_value(vm);
35
Value
lo
= pop_value(vm);
36
if
(
lo
.type !=
VAL_INT
|| hi.
type
!=
VAL_INT
) {
37
fprintf
(stderr,
"RANDOM_INT expects (int, int)\n"
);
38
exit
(1);
39
}
40
int64_t
a
=
lo
.i,
b
= hi.
i
;
41
if
(
b
<=
a
) {
42
push_value
(vm,
make_int
((int64_t)
a
));
43
free_value
(
lo
);
44
free_value
(hi);
45
break
;
46
}
47
int64_t
span
=
b
-
a
;
48
int64_t
r
= (int64_t)(rand() % (
span
));
49
push_value
(vm,
make_int
(
a
+
r
));
50
free_value
(
lo
);
51
free_value
(hi);
52
break
;
53
}
a
Value a
Definition
add.c:37
b
uint32_t b
Definition
band.c:32
r
uint32_t r
Definition
band.c:33
OP_RANDOM_INT
@ OP_RANDOM_INT
Definition
bytecode.h:127
lo
Value lo
Definition
clamp.c:31
span
int64_t span
Definition
random_int.c:47
free_value
free_value(lo)
push_value
push_value(vm, make_int(a+r))
Value
Tagged union representing a Fun value.
Definition
value.h:68
Value::i
int64_t i
Definition
value.h:71
Value::type
ValueType type
Definition
value.h:69
make_int
Value make_int(int64_t v)
Construct a Value representing a 64-bit integer.
Definition
value.c:51
VAL_INT
@ VAL_INT
Definition
value.h:51
fprintf
#define fprintf
Definition
vm.c:200
exit
#define exit(code)
Definition
vm.c:230
Generated on
for Fun by
1.16.1