-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Closed
Labels
Description
I've noticed that the current libraries haven't been cut by someone who is familiar with the Lua C interface APIs and as a result the only a subset of the API is used with standard features being reimplemented inline in the library code. A good example is in the gpio.c
module where:
const char *str = luaL_checklstring( L, 2, &sl );
if (str == NULL)
return luaL_error( L, "wrong arg type" );
if(sl == 2 && c_strcmp(str, "up") == 0){
type = GPIO_PIN_INTR_POSEDGE;
}else if(sl == 4 && c_strcmp(str, "down") == 0){
type = GPIO_PIN_INTR_NEGEDGE;
}else if(sl == 4 && c_strcmp(str, "both") == 0){
type = GPIO_PIN_INTR_ANYEDGE;
}else if(sl == 3 && c_strcmp(str, "low") == 0){
type = GPIO_PIN_INTR_LOLEVEL;
}else if(sl == 4 && c_strcmp(str, "high") == 0){
type = GPIO_PIN_INTR_HILEVEL;
}else{
type = GPIO_PIN_INTR_DISABLE;
}
can be better coded:
static const char * const opts[] = {"", "up", "down", "both", "low", "high"};
static const int opts_type[] = {
GPIO_PIN_INTR_DISABLE, GPIO_PIN_INTR_POSEDGE, GPIO_PIN_INTR_NEGEDGE,
GPIO_PIN_INTR_ANYEDGE, GPIO_PIN_INTR_LOLEVEL, GPIO_PIN_INTR_HILEVEL
};
int type = opts_type[luaL_checkoption(L, 2, "", opts)];
This is shorter, easier to read and uses less code space.
My suggestion is that it is not worth going though the modules tidying up such loose coding as a separate exercise, but that if anyone is doing material changes to any specific module, then it does make sense doing this tidy up also at the same time if there is a code space saving.
Though given Nick's recent comments, maybe this tidy up is best done as a precursor commit.