X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fir%2Firreflect.h;h=cb83f2511400c724c9797e21524f92f797a06f15;hb=fed1bdc07c9ec7b4d07a9243ad093c9fdd239fbd;hp=019e6ba3667035698ed9332d10bc25dd7ffa869b;hpb=a855b8f68c97cf18d2c7308bbc6157be9b72096f;p=libfirm diff --git a/ir/ir/irreflect.h b/ir/ir/irreflect.h index 019e6ba36..cb83f2511 100644 --- a/ir/ir/irreflect.h +++ b/ir/ir/irreflect.h @@ -1,5 +1,5 @@ /** - * @file reflect.h + * @file irreflect.h * @date 9.9.2004 * @author Sebastian Hack * @brief Reflection for Firm operations. @@ -7,11 +7,10 @@ * $Id$ */ -#ifndef __REFLECT_H -#define __REFLECT_H +#ifndef _FIRM_REFLECT_H +#define _FIRM_REFLECT_H #include -#include #include "irop.h" #include "irnode.h" @@ -47,7 +46,7 @@ typedef enum { typedef struct _rflct_arg_t { const char *name; /**< The name of the argument (just a description). */ - bool is_variadic; /**< True, if this argument can have multiple parameters. */ + int is_variadic; /**< non-zero, if this argument can have multiple parameters. */ rflct_mode_class_t accepted_modes; /**< The set of accepted modes. */ int mode_equals; /**< If not variadic: You can specify the index of @@ -93,7 +92,7 @@ int rflct_get_signature_count(opcode opc); * @param irn The node. * @return The first matching signature or -1, if no signature matches. */ -int rflct_get_signature(ir_node *irn); +int rflct_get_signature(const ir_node *irn); /** * Get the number of in arguments. @@ -113,6 +112,9 @@ int rflct_get_in_args_count(opcode opc, int sig); */ int rflct_get_out_args_count(opcode opc, int sig); +#define rflct_get_args_count(opc, sig, use) \ + ((use) ? rflct_get_in_args_count(opc, sig) : rflct_get_out_args_count(opc, sig)) + /** * Get the array of use args. * The array is terminated with an entry for which @@ -135,6 +137,9 @@ const rflct_arg_t *rflct_get_in_args(opcode opc, int sig); */ const rflct_arg_t *rflct_get_out_args(opcode opc, int sig); +#define rflct_get_args(opc, sig, use) \ + ((use) ? rflct_get_in_args(opc, sig) : rflct_get_out_args(opc, sig)) + /** * Make a string representation of a signature of an opcode. * @param buf The buffer to put the string to. @@ -156,20 +161,20 @@ char *rflct_mode_class_name(char *str, int n, rflct_mode_class_t mc); /** * Create a new opcode. - * @param opc The Firm opcode. - * @param name A name. - * @param commutative True, if the opcode is commuatative. + * @param opc The Firm opcode. + * @param name A name. + * @param commutative non-zero, if the opcode is commutative. */ -void rflct_new_opcode(opcode opc, const char *name, bool commutative); +void rflct_new_opcode(opcode opc, const char *name, int commutative); /** * Add a signature to the opcode. - * @param opc The opcode. - * @param args The signature. - * @return true, if the signature was added sucessfully, false if no + * @param opc The opcode. + * @param sig The signature. + * @return non-zero, if the signature was added successfully, false if no * more signatures can be added to the opcode. */ -bool rflct_opcode_add_signature(opcode opc, rflct_sig_t *sig); +int rflct_opcode_add_signature(opcode opc, rflct_sig_t *sig); /** * Allocate a new signature. @@ -181,13 +186,14 @@ rflct_sig_t *rflct_signature_allocate(int defs, int uses); /** * Set an argument in a signature. - * @param sig The signature. - * @param is_use true, if the argument is a use, else it is considered a - * def. - * @param num The index of the argument. - * @param name The name of the argument. - * @param mc The mode class of the argument. - * @param is_variadic true, if the argument is variadic. + * + * @param sig The signature. + * @param is_use non-zero, if the argument is a use, else it is + * considered a def. + * @param num The index of the argument. + * @param name The name of the argument. + * @param mc The mode class of the argument. + * @param is_variadic non-zero, if the argument is variadic. * @param mode_equals This variable has following meaning: If the * argument is variadic, a 1 indicates that all operands binding to this * argument must have the same mode. A 0 indicates, that their mode must @@ -199,17 +205,17 @@ rflct_sig_t *rflct_signature_allocate(int defs, int uses); * @return The index of the argument. Only use this index in mode_equals * parameters of other arguments. */ -int rflct_signature_set_arg(rflct_sig_t *sig, bool is_use, int num, - const char *name, rflct_mode_class_t mc, bool is_variadic, int mode_equals); +int rflct_signature_set_arg(rflct_sig_t *sig, int is_use, int num, + const char *name, rflct_mode_class_t mc, int is_variadic, int mode_equals); /** * Get the arguments array index for an argument. - * @param sig The signature. - * @param is_use True, if the argument indicates a use or def argument. - * @param num The number of the argument. + * @param sig The signature. + * @param is_use non-zero, if the argument indicates a use or def argument. + * @param num The number of the argument. * @return The index into the arguments array. */ -int rflct_signature_get_index(const rflct_sig_t *sig, bool is_use, int num); +int rflct_signature_get_index(const rflct_sig_t *sig, int is_use, int num); -#endif +#endif /* _FIRM_REFLECT_H */