Skip to content

slwState_call_fn: Error when passing va_args to slwState_call_fn_at #1

@bit-garden

Description

@bit-garden

C doesn't allow passing va_args to another function accepting va_args with ... syntax. The receiving function needs to accept the arguments with type va_args.

The simple solution is just to duplicate the code from call_fn_at to call_fn, set the index to -1 and use as expected.

SLW_API bool slwState_call_fn(slwState *slw, const char *name, ...) { 
                                    
  SLW_CHECKSTATE(slw); 
                              
  lua_getglobal(slw->LState, name); 
                              
  lua_State *L = slw->LState; 
 
  if (!lua_isfunction(L, -1)) 
    return false; 
                
  int nargs = 0;  
 
  va_list args;              
  va_start(args);                                         
                                     
  slwTableValue *arg = NULL; 
  while ((arg = va_arg(args, slwTableValue *)) != NULL) { 
    _slwTable_push_value(slw, *arg); 
    ++nargs; 
  }                                             
  va_end(args);   
 
  if (lua_pcall(L, nargs, LUA_MULTRET, 0) != 0) 
    return false; 
                          
  return true; 
                                       
  // SLW_CHECKSTATE(slw); 
                   
  // lua_getglobal(slw->LState, name); 
 
  // va_list args;                                     
  // va_start(args); 
                   
  // bool result = slwState_call_fn_at(slw, -1, args); 
                    
  // va_end(args); 
 
  // return result; 
}                                                                          

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions