"#{macroCall.codeOrigin} in call to #{macroCall.originalName}"
}
raiseMacroError,msg,backtrace
end
defdemacroify(macros)
myMacros=macros.dup
# We do an initial pass looking for all macros in order to allow forward references
@list.each{
| item |
ifitem.is_a?Macro
myMacros[item.name]=item.freshVariables
end
}
newList=[]
@list.each{
| item |
ifitem.is_a?Macro
# Ignore. We already looked for macros above and they should not be part of the final output
elsifitem.is_a?MacroCall
@@demacroifyStack << item
mapping={}
myMyMacros=myMacros.dup
macro=myMacros[item.name]
macroError"Could not find macro #{item.originalName}"unlessmacro
macroError"Argument count mismatch for call to #{item.originalName} (expected #{macro.variables.size} but got #{item.operands.size} arguments for macro #{item.originalName} defined at #{macro.codeOrigin})"unlessitem.operands.size == macro.variables.size