I've been spending a lot of time the past 6 months (more?) doing source code cleanup on the Perl 5 source code.
I'd like to spend some time doing the same for Parrot, too. I hope that doing the kind of maintenance I'm interested in makes things easier for the core Parrot developers do their jobs. Here's my first patch. Let me know if y'all see this sort of work as useful, or if I shouldn't bother. xoxo, Andy -- Andy Lester => [EMAIL PROTECTED] => www.petdance.com => AIM:petdance
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)