vlang / c2v

C/C++ to V translator
GNU General Public License v3.0
223 stars 31 forks source link

can't translate compound struct and union #172

Open 1000copy opened 8 months ago

1000copy commented 8 months ago

On my Mac OS X 13.6, I have c language code which already compiled with compiler, like the piece:

// filename : main.c
typedef enum {asymbol,anumber}atom_type;
typedef struct sexpr_ sexpr;
typedef struct {
    atom_type type;
    union{
        char* a;
        double num;
    };
} atom;
typedef enum {slist,satom}sexpr_type;
typedef struct{
    int len;
    sexpr* a;
} list;
typedef struct sexpr_{
    sexpr_type type;
    union{
        list* list;
        atom* atom;
    };
}sexpr;
#include <stdio.h>
int main(){
    sexpr s = {.type = satom};
    printf("%d",s.type);

}

When I run cmd c2v main.c,A error occured:

error: inline comment is deprecated, please use line comment
   21 | fn main()  {
   22 |     s := Sexpr {
   23 |     /*FAILED TO FIND STRUCT "Sexpr"*/Sexpr_type.satom, }
      |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   24 |     
   25 |     C.printf(c'%d', s.type_)

What should I do next to solve the problem?

JalonSolov commented 8 months ago

There are 2 bugs here.

1) V no longer supports inline comments, so c2v should stop generating them.

2) c2v didn't keep track of the rename from sexpr_type to Sexpr_type, as it needs to do.