Call / Macro Statements ======================= call ---- Instantiate a [macro](#macro) within the current namespace. There may be zero or more parameters passed to the macro (with zero parameters this is similar to the [`blockinherit`](cil_container_statements.md#blockinherit) ([`call`](cil_call_macro_statements.md#call)) / [`blockabstract`](cil_container_statements.md#blockabstract) ([`macro`](cil_call_macro_statements.md#macro)) statements). Each parameter passed contains an argument to be resolved by the [macro](#macro), these can be named or anonymous but must conform to the parameter types defined in the [`macro`](cil_call_macro_statements.md#macro) statement. Macro rules are resolved by searching in the following order: - The macro namespace (If found this means that the name was declared in the macro and is now declared in the namespace of one of the parents of the call.) - The call arguments - The parent namespaces of the macro being called (if any) with the exception of the global namespace. - The parent namespaces of the call (if any) with the exception of the global namespace. - The global namespace **Statement definition:** ```secil (call macro_id [(param ...)]) ``` **Where:**
|
The |
|
The identifier of the |
|
Zero or more parameters that are passed to the macro. |
|
The |
|
The |
|
Zero or more parameters that are passed to the macro. The The list of valid |
|
The parameter identifier used to reference the entry within the macro body (e.g. |
|
Zero or more valid CIL statements. |