Macro Functions

A function definition can be prefixed with 'macro ' (followed by space, not tab!) to create a macro instead of function. Macro will use caller's scope for all variables except for parameters, function parameters will be resolved to local variables. Dynamic variable references will also use caller's scope. Global and static variables are not supported in macros.

macro function ...

Example

;Deref function example:

fun()
fun(){
	MyVar:="AutoHotkey_H"
	MsgBox deref("Calling deref ``% from %A_ThisFunc% in %MyVar%")
}
macro deref(__deref__,__out__:="",__set__:=""){
	Loop Parse, __deref__, "%"
		If __set__&&!__set__:=false
			__out__.=%A_LoopField%
		else if SubStr(A_LoopField,-1)="``"
			__out__.=SubStr(A_LoopField,1,-1) "%"
		else __out__.=A_LoopField,__set__:=true
	return __out__
}

;Alternative deref function example:

fun()
fun(){
	MyVar:="AutoHotkey_H"
	MsgBox deref(["A_ThisFunc","MyVar"],"Calling deref ``% from `a in `a","`a")
}
macro deref(__vars__,__text__,__delimiter__,__out__:=""){
	Loop Parse, __text__, __delimiter__
		if A_LoopField
			__delimiter__:=__vars__[A_Index],__out__.=A_LoopField %__delimiter__%
	return __out__
}