#import "Identifier.h" OF_ASSUME_NONNULL_BEGIN #define COMMAND(name, nargs, block_) \ OF_CONSTRUCTOR() \ { \ enqueueInit(^{ \ Identifier.identifiers[@ #name] = \ [Command commandWithName:@ #name \ argumentsTypes:nargs \ block:block_]; \ }); \ } OF_DIRECT_MEMBERS @interface Command: Identifier @property (readonly, nonatomic) int argumentsTypes; + (instancetype)commandWithName:(OFString *)name argumentsTypes:(int)argumentsTypes block:(id)block; - (instancetype)initWithName:(OFString *)name OF_UNAVAILABLE; - (instancetype)initWithName:(OFString *)name argumentsTypes:(int)argumentsTypes block:(id)block OF_DESIGNATED_INITIALIZER; - (int)callWithArguments:(OFArray<OFString *> *)arguments isDown:(bool)isDown; @end OF_ASSUME_NONNULL_END