83 lines
1.5 KiB
Markdown
83 lines
1.5 KiB
Markdown
---
|
|
weight: 100
|
|
title: "MV_INLINE"
|
|
description: "Make preprocessor macros"
|
|
icon: "code_blocks"
|
|
date: "2025-05-01T18:47:58-05:00"
|
|
lastmod: "2025-05-01T18:47:58-05:00"
|
|
---
|
|
|
|
`declare function MV_INLINE<A..., R...>(inlineFunction: (A...) -> R...): (A...) -> R...`
|
|
|
|
will mark the passed function to be inlined where used.
|
|
|
|
Some limitations apply:
|
|
- The passed function cannot be variadic (i.e. no ... usage)
|
|
- The passed function cannot tailcall or otherwise recursively call itself.
|
|
- You must use this macro in it's specific form, i.e. `local <var> = MV_INLINE(function() ... end)`
|
|
|
|
## Valid Usage
|
|
|
|
```lua
|
|
local testFunc = MV_INLINE(function(start, endn)
|
|
local total = 0
|
|
for i = start, endn do
|
|
total = total + i
|
|
end
|
|
return total
|
|
end)
|
|
|
|
local testFunc2 = MV_INLINE(function()
|
|
return testFunc(1, 10), testFunc(11, 20), testFunc(1, 15)
|
|
end)
|
|
|
|
print(testFunc2())
|
|
```
|
|
|
|
turns into:
|
|
|
|
```lua
|
|
...
|
|
local b=o(nil)
|
|
repeat
|
|
local j=nil
|
|
repeat
|
|
local c=0
|
|
for e=1,10 do
|
|
c=c+e
|
|
end
|
|
do
|
|
j=c
|
|
break
|
|
end
|
|
until true
|
|
local a=nil
|
|
repeat
|
|
local f=0
|
|
for g=11,20 do
|
|
f=f+g
|
|
end
|
|
do
|
|
a=f
|
|
break
|
|
end
|
|
until true
|
|
local p=nil
|
|
repeat
|
|
local l=0
|
|
for i=1,15 do
|
|
l=l+i
|
|
end
|
|
do
|
|
p=l
|
|
break
|
|
end
|
|
until true
|
|
do
|
|
b=o(j,a,p)
|
|
break
|
|
end
|
|
until true;
|
|
|
|
print(m(b[1],1,b[2]))
|
|
``` |