Index: src/builtin.c =================================================================== --- src/builtin.c (revision 13) +++ src/builtin.c (working copy) @@ -31,6 +31,7 @@ STRING *namespace; /* same */ } Builtins; +#define N_BUILTINS (int)(sizeof(builtins) / sizeof(builtins[0])) static Builtins builtins[] = { { "acos", "PJO", "Float", 0, 0 }, { "asec", "PJO", "Float", 0, 0 }, @@ -95,12 +96,11 @@ void Parrot_init_builtins(Interp *interpreter) { - size_t i, n; + size_t i; char buffer[128]; - n = sizeof(builtins) / sizeof(builtins[0]); buffer[0] = buffer[1] = '_'; - for (i = 0; i < n; ++i) { + for (i = 0; i < N_BUILTINS; ++i) { /* XXX mangle yes or no */ #ifdef MANGLE_BUILTINS strcpy(buffer + 2, builtins[i].c_name); @@ -118,11 +118,11 @@ } static int -find_builtin(Interp *interpreter, char *func) +find_builtin(Interp *interpreter, const char *func) { - size_t i, n; + size_t i; - n = sizeof(builtins) / sizeof(builtins[0]); + const size_t n = sizeof(builtins) / sizeof(builtins[0]); /* TODO either hash or use binsearch */ for (i = 0; i < n; ++i) { if (strcmp(func, builtins[i].c_name) == 0) @@ -134,11 +134,10 @@ static int find_builtin_s(Interp *interpreter, STRING *func) { - size_t i, n; + size_t i; - n = sizeof(builtins) / sizeof(builtins[0]); /* TODO either hash or use binsearch */ - for (i = 0; i < n; ++i) { + for (i = 0; i < N_BUILTINS; ++i) { if (string_equal(interpreter, func, builtins[i].meth_name) == 0) return i; } @@ -146,9 +145,9 @@ } static int -check_builtin_sig(Interp *interpreter, size_t i, char *sig, int pass) +check_builtin_sig(Interp *interpreter, size_t i, const char *sig, int pass) { - Builtins *b = builtins + i; + const Builtins * const b = builtins + i; const char *p; int opt = 0; @@ -178,23 +177,22 @@ } int -Parrot_is_builtin(Interp *interpreter, char *func, char *sig) +Parrot_is_builtin(Interp *interpreter, const char *func, const char *sig) { - int bi, i, n, pass; + int bi, i, pass; i = find_builtin(interpreter, func); if (i < 0) return -1; if (!sig) return i; - n = sizeof(builtins) / sizeof(builtins[0]); bi = i; for (pass = 0; pass <= 1; ++pass) { i = bi; again: if (check_builtin_sig(interpreter, i, sig, pass)) return i; - if (i < n - 1) { + if (i < N_BUILTINS - 1) { /* try next with same name */ ++i; if (strcmp(func, builtins[i].c_name)) @@ -226,30 +224,21 @@ const char * Parrot_builtin_get_c_namespace(Interp *interpreter, int bi) { - int n; - - n = sizeof(builtins) / sizeof(builtins[0]); - assert(bi >= 0 && bi < n); + assert(bi >= 0 && bi < N_BUILTINS); return builtins[bi].c_ns; } int Parrot_builtin_is_class_method(Interp *interpreter, int bi) { - int n; - - n = sizeof(builtins) / sizeof(builtins[0]); - assert(bi >= 0 && bi < n); + assert(bi >= 0 && bi < N_BUILTINS); return builtins[bi].signature[2] != 'O'; } int Parrot_builtin_is_void(Interp *interpreter, int bi) { - int n; - - n = sizeof(builtins) / sizeof(builtins[0]); - assert(bi >= 0 && bi < n); + assert(bi >= 0 && bi < N_BUILTINS); return builtins[bi].signature[0] == 'v'; } Index: include/parrot/builtin.h =================================================================== --- include/parrot/builtin.h (revision 13) +++ include/parrot/builtin.h (working copy) @@ -13,12 +13,12 @@ #if !defined(PARROT_BUILTIN_H_GUARD) #define PARROT_BUILTIN_H_GUARD -void Parrot_init_builtins(Interp *); -int Parrot_is_builtin(Interp *, char *func, char *sig); +void Parrot_init_builtins(Interp *interpreter); +int Parrot_is_builtin(Interp *interpreter, const char *func, const char *sig); PMC* Parrot_find_builtin(Interp *interpreter, STRING *func); -const char * Parrot_builtin_get_c_namespace(Interp *, int bi); -int Parrot_builtin_is_class_method(Interp *, int bi); -int Parrot_builtin_is_void(Interp *, int bi); +const char * Parrot_builtin_get_c_namespace(Interp *interpreter, int bi); +int Parrot_builtin_is_class_method(Interp *interpreter, int bi); +int Parrot_builtin_is_void(Interp *interpreter, int bi); #endif /* PARROT_BUILTIN_H_GUARD */ Index: compilers/imcc/parser_util.c =================================================================== --- compilers/imcc/parser_util.c (revision 13) +++ compilers/imcc/parser_util.c (working copy) @@ -20,6 +20,7 @@ #include "parrot/interp_guts.h" #include "parrot/dynext.h" #include "parrot/embed.h" +#include "parrot/builtin.h" #include "pbc.h" #include "parser.h" @@ -168,8 +169,6 @@ return op; } -int Parrot_is_builtin(Interp *, char *func, char *sig); - static Instruction * maybe_builtin(Interp *interpreter, IMC_Unit *unit, char *name, SymReg **r, int n)