@shirleyquirk Sorry, but I have a followup question related to C as I am trying 
to translate that to Nim.

In that C example, I see
    
    
    typedef struct t_vpi_systf_data {
      PLI_INT32 type;     // vpiSysTask, vpiSysFunc
      PLI_INT32 sysfunctype; // vpiSysTask, vpi[Int,Real,Time,Sized, 
SizedSigned]Func
      PLI_BYTE8 *tfname;  // First character must be `$'
      PLI_INT32 (*calltf)(PLI_BYTE8 *);
      PLI_INT32 (*compiletf)(PLI_BYTE8 *);
      PLI_INT32 (*sizetf)(PLI_BYTE8 *); // For sized function callbacks only
      PLI_BYTE8 *user_data;
    } s_vpi_systf_data, *p_vpi_systf_data;
    
    
    Run

If we focus on `PLI_INT32 (*calltf)(PLI_BYTE8 *);` bit, that's a pointer to a 
function accepting a char array pointer (cstring) and returning an int, right?

But then I see this:
    
    
    void hello() {
      vpi_printf("\n\nHello!!\n\n");
    }
    
    void registerHelloSystfs() {
        s_vpi_systf_data task_data_s;
        p_vpi_systf_data task_data_p = &task_data_s;
        task_data_p->type = vpiSysTask;
        task_data_p->tfname = "$hello";
        task_data_p->calltf = hello;
        task_data_p->compiletf = 0;
        
        vpi_register_systf(task_data_p);
    }
    
    
    Run

... `task_data_p->calltf = hello;` Here, `hello` is not a function that's 
accepting a cstring.

The whole example actually runs fine in C, so I am confused why.

Reply via email to