Macro Functions

From GiderosMobile
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This page contains changes which are not marked for translation.


Supported platforms: Platform android.pngPlatform ios.pngPlatform mac.pngPlatform pc.png
Available since: Gideros 2017.10

Description

Macro Functions receive a list of tokens and output a string which will be pasted into code at compile time.

name @ (| ...body... |)

You should use parenthesis around markers - '|' is the preferred marker.

The same marker should be used to close macro body with closing parenthesis right after it.

You can use any of these markers:

\`~ ! # $ % ^ & * / + = |

You can redefine a macro with @@:

name @@ (| ...another_body... |)

To call macro function use its name with parenthesis as with usual functions:

name(...arguments...)

Examples

Enumeration

enum @ (|
	local t = ...
	local r = {}
	for i = 1, #t, 2 do
		table.insert(r, t[i] .. " @ " .. i // 2 + 1)
	end
	print(table.concat(r, " "))
	return table.concat(r, " ")
|)

enum(apple, orange, melon)
print(apple, orange, melon) --> 1 2 3

Turning off the print command

print @ (| return "" |)

Unroll loops

dotimes @ (|
	local times = table.remove(..., 1)
	return (table.concat(..., " ").." "):rep(times)
|)

local t = {}

dotimes(10 print "Boom!")

A Sum macro example

-- comma counts as an argument meaning MYSUM(o1, o2) has three parameters
MYSUM @ (| return "("..(...)[1] + (...)[3] ..")" |)
print (MYSUM(1,2) * MYSUM(3,1))

Methods

Events

Constants