Difference between revisions of "Macro Functions"

From GiderosMobile
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(12 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
'''Supported platforms:''' android, ios, mac, pc<br/>
+
<languages />
'''Available since:''' Gideros 2017.10<br/>
+
<!-- GIDEROSOBJ:Macro Functions -->
=== Description ===
+
'''<translate>Supported platforms</translate>:''' [[File:Platform android.png]][[File:Platform ios.png]][[File:Platform mac.png]][[File:Platform pc.png]]<br/>
<br />
+
'''<translate>Available since</translate>:''' Gideros 2017.10<br/>
Macro Functions receive a list of tokens and output a string which will be pasted into code at compile time.<br /><br />
 
  
name @ (| ...body... |)<br /><br />
+
=== <translate>Description</translate> ===
 +
Macro Functions receive a list of tokens and output a string which will be pasted into code at compile time.
 +
<syntaxhighlight lang="lua">
 +
name @ (| ...body... |)
 +
</syntaxhighlight>
  
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 should use parenthesis around markers - '|' is the preferred marker.
You can use any of these markers.<br />
 
\`~ ! # $ % ^ & * / + = |<br /><br />
 
  
You can redefine a macro with @@.<br />
+
The same marker should be used to close macro body with closing parenthesis right after it.
name @@ (| ...another_body... |)<br /><br />
+
 
 +
You can use any of these markers:
 +
 
 +
'''\`~ ! # $ % ^ & * / + = |'''
 +
 
 +
You can redefine a macro with @@:
 +
<syntaxhighlight lang="lua">
 +
name @@ (| ...another_body... |)
 +
</syntaxhighlight>
 +
 
 +
To call macro function use its name with parenthesis as with usual functions:
 +
<syntaxhighlight lang="lua">
 +
name(...arguments...)
 +
</syntaxhighlight>
 +
 
 +
=== <translate>Examples</translate> ===
 +
'''Enumeration'''
 +
<syntaxhighlight lang="lua">
 +
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</syntaxhighlight>
 +
 
 +
'''Turning off the print command'''
 +
<syntaxhighlight lang="lua">
 +
print @ (| return "" |)
 +
</syntaxhighlight>
 +
 
 +
'''Unroll loops'''
 +
<syntaxhighlight lang="lua">
 +
dotimes @ (|
 +
local times = table.remove(..., 1)
 +
return (table.concat(..., " ").." "):rep(times)
 +
|)
 +
 
 +
local t = {}
 +
 
 +
dotimes(10 print "Boom!")
 +
</syntaxhighlight>
 +
 
 +
'''A Sum macro example'''
 +
<syntaxhighlight lang="lua">
 +
-- comma counts as an argument meaning MYSUM(o1, o2) has three parameters
 +
MYSUM @ (| return "("..(...)[1] + (...)[3] ..")" |)
 +
print (MYSUM(1,2) * MYSUM(3,1))
 +
</syntaxhighlight>
  
To call macro function use it's name with parenthesis as with usual functions:<br />
 
name(...arguments...)<br /><br />
 
 
{|-
 
{|-
| style="width: 50%;"|
+
| style="width: 50%; vertical-align:top;"|
=== Methods ===
+
 
| style="width: 50%;"|
+
=== <translate>Methods</translate> ===
=== Events ===
+
| style="width: 50%; vertical-align:top;"|
=== Constants ===
+
=== <translate>Events</translate> ===
 +
=== <translate>Constants</translate> ===
 
|}
 
|}
 +
 +
{{GIDEROS IMPORTANT LINKS}}

Latest revision as of 14:31, 13 July 2023


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