luaur_code_gen/functions/
handle_builtin_effects.rs1use luaur_common::enums::luau_builtin_function::LuauBuiltinFunction;
2
3use crate::records::const_prop_state::ConstPropState;
4
5pub fn handle_builtin_effects(
6 state: &mut ConstPropState,
7 bfid: LuauBuiltinFunction,
8 first_return_reg: u32,
9 _nresults: i32,
10) {
11 match bfid {
13 LuauBuiltinFunction::LBF_NONE
14 | LuauBuiltinFunction::LBF_ASSERT
15 | LuauBuiltinFunction::LBF_MATH_ABS
16 | LuauBuiltinFunction::LBF_MATH_ACOS
17 | LuauBuiltinFunction::LBF_MATH_ASIN
18 | LuauBuiltinFunction::LBF_MATH_ATAN2
19 | LuauBuiltinFunction::LBF_MATH_ATAN
20 | LuauBuiltinFunction::LBF_MATH_CEIL
21 | LuauBuiltinFunction::LBF_MATH_COSH
22 | LuauBuiltinFunction::LBF_MATH_COS
23 | LuauBuiltinFunction::LBF_MATH_DEG
24 | LuauBuiltinFunction::LBF_MATH_EXP
25 | LuauBuiltinFunction::LBF_MATH_FLOOR
26 | LuauBuiltinFunction::LBF_MATH_FMOD
27 | LuauBuiltinFunction::LBF_MATH_FREXP
28 | LuauBuiltinFunction::LBF_MATH_LDEXP
29 | LuauBuiltinFunction::LBF_MATH_LOG10
30 | LuauBuiltinFunction::LBF_MATH_LOG
31 | LuauBuiltinFunction::LBF_MATH_MAX
32 | LuauBuiltinFunction::LBF_MATH_MIN
33 | LuauBuiltinFunction::LBF_MATH_MODF
34 | LuauBuiltinFunction::LBF_MATH_POW
35 | LuauBuiltinFunction::LBF_MATH_RAD
36 | LuauBuiltinFunction::LBF_MATH_SINH
37 | LuauBuiltinFunction::LBF_MATH_SIN
38 | LuauBuiltinFunction::LBF_MATH_SQRT
39 | LuauBuiltinFunction::LBF_MATH_TANH
40 | LuauBuiltinFunction::LBF_MATH_TAN
41 | LuauBuiltinFunction::LBF_BIT32_ARSHIFT
42 | LuauBuiltinFunction::LBF_BIT32_BAND
43 | LuauBuiltinFunction::LBF_BIT32_BNOT
44 | LuauBuiltinFunction::LBF_BIT32_BOR
45 | LuauBuiltinFunction::LBF_BIT32_BXOR
46 | LuauBuiltinFunction::LBF_BIT32_BTEST
47 | LuauBuiltinFunction::LBF_BIT32_EXTRACT
48 | LuauBuiltinFunction::LBF_BIT32_LROTATE
49 | LuauBuiltinFunction::LBF_BIT32_LSHIFT
50 | LuauBuiltinFunction::LBF_BIT32_REPLACE
51 | LuauBuiltinFunction::LBF_BIT32_RROTATE
52 | LuauBuiltinFunction::LBF_BIT32_RSHIFT
53 | LuauBuiltinFunction::LBF_TYPE
54 | LuauBuiltinFunction::LBF_STRING_BYTE
55 | LuauBuiltinFunction::LBF_STRING_CHAR
56 | LuauBuiltinFunction::LBF_STRING_LEN
57 | LuauBuiltinFunction::LBF_TYPEOF
58 | LuauBuiltinFunction::LBF_STRING_SUB
59 | LuauBuiltinFunction::LBF_MATH_CLAMP
60 | LuauBuiltinFunction::LBF_MATH_SIGN
61 | LuauBuiltinFunction::LBF_MATH_ROUND
62 | LuauBuiltinFunction::LBF_RAWGET
63 | LuauBuiltinFunction::LBF_RAWEQUAL
64 | LuauBuiltinFunction::LBF_TABLE_UNPACK
65 | LuauBuiltinFunction::LBF_VECTOR
66 | LuauBuiltinFunction::LBF_BIT32_COUNTLZ
67 | LuauBuiltinFunction::LBF_BIT32_COUNTRZ
68 | LuauBuiltinFunction::LBF_SELECT_VARARG
69 | LuauBuiltinFunction::LBF_RAWLEN
70 | LuauBuiltinFunction::LBF_BIT32_EXTRACTK
71 | LuauBuiltinFunction::LBF_GETMETATABLE
72 | LuauBuiltinFunction::LBF_TONUMBER
73 | LuauBuiltinFunction::LBF_TOSTRING
74 | LuauBuiltinFunction::LBF_BIT32_BYTESWAP
75 | LuauBuiltinFunction::LBF_BUFFER_READI8
76 | LuauBuiltinFunction::LBF_BUFFER_READU8
77 | LuauBuiltinFunction::LBF_BUFFER_READI16
78 | LuauBuiltinFunction::LBF_BUFFER_READU16
79 | LuauBuiltinFunction::LBF_BUFFER_READI32
80 | LuauBuiltinFunction::LBF_BUFFER_READU32
81 | LuauBuiltinFunction::LBF_BUFFER_READF32
82 | LuauBuiltinFunction::LBF_BUFFER_READF64
83 | LuauBuiltinFunction::LBF_BUFFER_READINTEGER
84 | LuauBuiltinFunction::LBF_VECTOR_MAGNITUDE
85 | LuauBuiltinFunction::LBF_VECTOR_NORMALIZE
86 | LuauBuiltinFunction::LBF_VECTOR_CROSS
87 | LuauBuiltinFunction::LBF_VECTOR_DOT
88 | LuauBuiltinFunction::LBF_VECTOR_FLOOR
89 | LuauBuiltinFunction::LBF_VECTOR_CEIL
90 | LuauBuiltinFunction::LBF_VECTOR_ABS
91 | LuauBuiltinFunction::LBF_VECTOR_SIGN
92 | LuauBuiltinFunction::LBF_VECTOR_CLAMP
93 | LuauBuiltinFunction::LBF_VECTOR_MIN
94 | LuauBuiltinFunction::LBF_VECTOR_MAX
95 | LuauBuiltinFunction::LBF_VECTOR_LERP
96 | LuauBuiltinFunction::LBF_MATH_LERP
97 | LuauBuiltinFunction::LBF_MATH_ISNAN
98 | LuauBuiltinFunction::LBF_MATH_ISINF
99 | LuauBuiltinFunction::LBF_MATH_ISFINITE
100 | LuauBuiltinFunction::LBF_INTEGER_ADD
101 | LuauBuiltinFunction::LBF_INTEGER_MUL
102 | LuauBuiltinFunction::LBF_INTEGER_IDIV
103 | LuauBuiltinFunction::LBF_INTEGER_LT
104 | LuauBuiltinFunction::LBF_INTEGER_CREATE
105 | LuauBuiltinFunction::LBF_INTEGER_MOD
106 | LuauBuiltinFunction::LBF_INTEGER_SUB
107 | LuauBuiltinFunction::LBF_INTEGER_LE
108 | LuauBuiltinFunction::LBF_INTEGER_GT
109 | LuauBuiltinFunction::LBF_INTEGER_GE
110 | LuauBuiltinFunction::LBF_INTEGER_ULT
111 | LuauBuiltinFunction::LBF_INTEGER_ULE
112 | LuauBuiltinFunction::LBF_INTEGER_UGT
113 | LuauBuiltinFunction::LBF_INTEGER_UGE
114 | LuauBuiltinFunction::LBF_INTEGER_DIV
115 | LuauBuiltinFunction::LBF_INTEGER_NEG
116 | LuauBuiltinFunction::LBF_INTEGER_BSWAP
117 | LuauBuiltinFunction::LBF_INTEGER_MIN
118 | LuauBuiltinFunction::LBF_INTEGER_MAX
119 | LuauBuiltinFunction::LBF_INTEGER_REM
120 | LuauBuiltinFunction::LBF_INTEGER_UDIV
121 | LuauBuiltinFunction::LBF_INTEGER_UREM
122 | LuauBuiltinFunction::LBF_INTEGER_BAND
123 | LuauBuiltinFunction::LBF_INTEGER_BOR
124 | LuauBuiltinFunction::LBF_INTEGER_BNOT
125 | LuauBuiltinFunction::LBF_INTEGER_BXOR
126 | LuauBuiltinFunction::LBF_INTEGER_BTEST
127 | LuauBuiltinFunction::LBF_INTEGER_COUNTRZ
128 | LuauBuiltinFunction::LBF_INTEGER_COUNTLZ
129 | LuauBuiltinFunction::LBF_INTEGER_LSHIFT
130 | LuauBuiltinFunction::LBF_INTEGER_RSHIFT
131 | LuauBuiltinFunction::LBF_INTEGER_ARSHIFT
132 | LuauBuiltinFunction::LBF_INTEGER_LROTATE
133 | LuauBuiltinFunction::LBF_INTEGER_RROTATE
134 | LuauBuiltinFunction::LBF_INTEGER_CLAMP
135 | LuauBuiltinFunction::LBF_INTEGER_EXTRACT
136 | LuauBuiltinFunction::LBF_INTEGER_TONUMBER => {}
137 LuauBuiltinFunction::LBF_BUFFER_WRITEU8
138 | LuauBuiltinFunction::LBF_BUFFER_WRITEU16
139 | LuauBuiltinFunction::LBF_BUFFER_WRITEU32
140 | LuauBuiltinFunction::LBF_BUFFER_WRITEF32
141 | LuauBuiltinFunction::LBF_BUFFER_WRITEF64
142 | LuauBuiltinFunction::LBF_BUFFER_WRITEINTEGER => {
143 state.invalidate_heap_buffer_data();
144 }
145 LuauBuiltinFunction::LBF_TABLE_INSERT => {
146 state.invalidate_heap();
147 return; }
149 LuauBuiltinFunction::LBF_RAWSET => {
150 state.invalidate_heap();
151 }
152 LuauBuiltinFunction::LBF_SETMETATABLE => {
153 state.invalidate_heap();
154 }
155 }
156
157 state.invalidate_registers_from(first_return_reg as i32);
160}