The macro definition is as follows: .macro CHECK_PROCEDURE_KIND PROCEDURE_KIND OK = 0 ; Assume procedure_kind is unknown .irp REFERENCE_KIND,BOUND,NULL, REGISTER,STACK .if identical, <PROCEDURE_KIND>, <REFERENCE_KIND> OK = 1 ; Procedure_kind is known .mexit ; No need to look further .endc .endr .if eq, OK ; If unknown procedure kind .error "Unknown procedure kind: PROCEDURE_KIND" .endc .endm CHECK_PROCEDURE_KIND CHECK_PROCEDURE_KIND REGISTER CHECK_PROCEDURE_KIND FOOZLE The macro call and expansion of the previously defined macro is as follows: CHECK_PROCEDURE_KIND REGISTER OK = 0 ; Assume procedure kind is unknown .if identical,<REGISTER>,<BOUND> .endc .if identical,<REGISTER>,<NULL> .endc .if identical,<REGISTER>,<REGISTER> OK = 1 ; Procedure kind is known .mexit ; No need to look further .if eq, OK ; If unknown procedure kind .endc CHECK_PROCEDURE_KIND FOOZLE OK = 0 ; Assume procedure kind is unknown .if identical,<FOOZLE>,<BOUND> .endc .if identical,<FOOZLE>,<NULL> .endc .if identical,<FOOZLE>,<REGISTER> .endc .if identical,<FOOZLE>,<STACK> .endc .if eq, OK ; If unknown procedure kind .error "Unknown procedure kind: FOOZLE" .endc In this example the CHECK_PROCEDURE_KIND macro uses the .IRP directive to iterate over a list of reference keywords to determine if its argument matches one of the reference keywords. If a match is not found, the macro displays an error message.