Transpiling C code to Go code

Build Status Go Report Card codecov GitHub license GoDoc

A tool for transpiling C code to Go code.

Milestones of the project:

  1. Transpiling project GNU GSL.
  2. Transpiling project GTK+.

Notes:

Installation

Installation with version generation.

# get code
go get -u github.com/Konstantin8105/c4go

# move to project source
cd $GOPATH/src/github.com/Konstantin8105/c4go

# generate version
go generate ./...

# install
go install

# testing
c4go version

Usage example

# Change your location to the folder with examples:
cd $GOPATH/src/github.com/Konstantin8105/c4go/examples/

# Transpile one file from the C example folder:
c4go transpile prime.c

# Look at the result
nano prime.go

# Check the result:
go run prime.go
# Enter a number
# 13
# The number is: 13
# Prime number.

C code of file prime.c:

#include <stdio.h>

int main()
{
    int n, c;

    printf("Enter a number\n");
    // get value
    scanf("%d", &n);
    printf("The number is: %d\n", n);

    // -------
    if (n == 2)
        printf("Prime number.\n");
    else {
        for (c = 2; c <= n - 1; c++) {
            if (n % c == 0)
                break;
        }
        if (c != n)
            printf("Not prime.\n");
        else
            printf("Prime number.\n");
    }
    return 0;
}

Go code of file prime.go:

//
//	Package - transpiled by c4go
//
//	If you have found any issues, please raise an issue at:
//	https://github.com/Konstantin8105/c4go/
//

package main

import "unsafe"
import "github.com/Konstantin8105/c4go/noarch"
import "fmt"

// main - transpiled function from  C4GO/examples/prime.c:3
func main() {
	var n int32
	var c int32
	fmt.Printf("Enter a number\n")
	// get value
	noarch.Scanf([]byte("%d\x00"), c4goUnsafeConvert_int32(&n))
	noarch.Printf([]byte("The number is: %d\n\x00"), n)
	if n == 2 {
		// -------
		fmt.Printf("Prime number.\n")
	} else {
		for c = 2; c <= n-1; c++ {
			if n%c == 0 {
				break
			}
		}
		if c != n {
			fmt.Printf("Not prime.\n")
		} else {
			fmt.Printf("Prime number.\n")
		}
	}
	return
}

// c4goUnsafeConvert_int32 : created by c4go
func c4goUnsafeConvert_int32(c4go_name *int32) []int32 {
	return (*[1000000]int32)(unsafe.Pointer(c4go_name))[:]
}

Example with binding function

C:

#include <math.h>
#include <stdio.h>

int main()
{
    int n;
    double param = 8.0, result;
    result = frexp(param, &n);
    printf("result = %5.2f\n", result);
    printf("n      = %d\n", n);
    return 0;
}

c4go add automatically C binding for function without implementation:

//
//	Package - transpiled by c4go
//
//	If you have found any issues, please raise an issue at:
//	https://github.com/Konstantin8105/c4go/
//

package main

// #include </usr/include/math.h>
import "C"

import "github.com/Konstantin8105/c4go/noarch"
import "unsafe"

// main - transpiled function from  C4GO/examples/math.c:4
func main() {
	var n int32
	var param float64 = 8
	var result float64
	result = frexp(param, c4goUnsafeConvert_int32(&n))
	noarch.Printf([]byte("result = %5.2f\n\x00"), result)
	noarch.Printf([]byte("n      = %d\n\x00"), n)
	return
}

// c4goUnsafeConvert_int32 : created by c4go
func c4goUnsafeConvert_int32(c4go_name *int32) []int32 {
	return (*[1000000]int32)(unsafe.Pointer(c4go_name))[:]
}

// frexp - add c-binding for implemention function
func frexp(arg0 float64, arg1 []int32) float64 {
 	return float64(C.frexp(C.double(arg0), (*C.int)(unsafe.Pointer(&arg1[0]))))
}

Example with C-pointers and C-arrays

#include <stdio.h>

// input argument - C-pointer
void a(int* v1) { printf("a: %d\n", *v1); }

// input argument - C-array
void b(int v1[], int size)
{
    for (size--; size >= 0; size--) {
        printf("b: %d %d\n", size, v1[size]);
    }
}

int main()
{
    // value
    int i1 = 42;
    a(&i1);
    b(&i1, 1);

    // C-array
    int i2[] = { 11, 22 };
    a(i2);
    b(i2, 2);

    // C-pointer from value
    int* i3 = &i1;
    a(i3);
    b(i3, 1);

    // C-pointer from array
    int* i4 = i2;
    a(i4);
    b(i4, 2);

    // C-pointer from array
    int* i5 = i2[1];
    a(i5);
    b(i5, 1);

    return 0;
}
//
//	Package - transpiled by c4go
//
//	If you have found any issues, please raise an issue at:
//	https://github.com/Konstantin8105/c4go/
//

package main

import "unsafe"
import "github.com/Konstantin8105/c4go/noarch"

// a - transpiled function from  C4GO/examples/ap.c:4
func a(v1 []int32) {
	// input argument - C-pointer
	noarch.Printf([]byte("a: %d\n\x00"), v1[0])
}

// b - transpiled function from  C4GO/examples/ap.c:7
func b(v1 []int32, size int32) {
	{
		// input argument - C-array
		for size -= 1; size >= 0; size-- {
			noarch.Printf([]byte("b: %d %d\n\x00"), size, v1[size])
		}
	}
}

// main - transpiled function from  C4GO/examples/ap.c:14
func main() {
	var i1 int32 = 42
	// value
	a(c4goUnsafeConvert_int32(&i1))
	b(c4goUnsafeConvert_int32(&i1), 1)
	var i2 []int32 = []int32{11, 22}
	// C-array
	a(i2)
	b(i2, 2)
	var i3 []int32 = c4goUnsafeConvert_int32(&i1)
	// C-pointer from value
	a(i3)
	b(i3, 1)
	var i4 []int32 = i2
	// C-pointer from array
	a(i4)
	b(i4, 2)
	var i5 []int32 = i2[1:]
	// C-pointer from array
	a(i5)
	b(i5, 1)

	return
}

// c4goUnsafeConvert_int32 : created by c4go
func c4goUnsafeConvert_int32(c4go_name *int32) []int32 {
	return (*[1000000]int32)(unsafe.Pointer(c4go_name))[:]
}

Example of transpilation neatvi.

# clone git repository
git clone https://github.com/aligrudi/neatvi.git

# move in folder
cd neatvi

# look in Makefile
cat Makefile

Makefile:

CC = cc
CFLAGS = -Wall -O2
LDFLAGS =

OBJS = vi.o ex.o lbuf.o mot.o sbuf.o ren.o dir.o syn.o reg.o led.o \
	uc.o term.o rset.o regex.o cmd.o conf.o

all: vi

conf.o: conf.h

%.o: %.c
	$(CC) -c $(CFLAGS) $<
vi: $(OBJS)
	$(CC) -o $@ $(OBJS) $(LDFLAGS)
clean:
rm -f *.o vi

As we see not need any specific, for example -clang-flag.

Let's try transpile:

c4go transpile *.c

Result:

panic: clang failed: exit status 1:

/temp/neatvi/reg.c:6:14: error: redefinition of 'bufs' with a different type: 'char *[256]' vs 'struct buf [8]'
static char *bufs[256];
             ^
/temp/neatvi/ex.c:35:3: note: previous definition is here
} bufs[8];
  ^
/temp/neatvi/reg.c:12:9: error: returning 'struct buf' from a function with incompatible result type 'char *'
 return bufs[c];
        ^~~~~~~
/temp/neatvi/reg.c:17:81: error: invalid operands to binary expression ('int' and 'struct buf')
 char *pre = ((*__ctype_b_loc ())[(int) ((c))] & (unsigned short int) _ISupper) && bufs[tolower(c)] ? bufs[tolower(c)] : "";
             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^  ~~~~~~~~~~~~~~~~
/temp/neatvi/reg.c:21:7: error: passing 'struct buf' to parameter of incompatible type 'void *'
 free(bufs[tolower(c)]);
      ^~~~~~~~~~~~~~~~
/usr/include/stdlib.h:483:25: note: passing argument to parameter '__ptr' here
extern void free (void *__ptr) __attribute__ ((__nothrow__ ));
                        ^
/temp/neatvi/reg.c:22:19: error: assigning to 'struct buf' from incompatible type 'char *'
 bufs[tolower(c)] = buf;
                  ^ ~~~
/temp/neatvi/reg.c:43:8: error: passing 'struct buf' to parameter of incompatible type 'void *'
  free(bufs[i]);
       ^~~~~~~
/usr/include/stdlib.h:483:25: note: passing argument to parameter '__ptr' here
extern void free (void *__ptr) __attribute__ ((__nothrow__ ));
                        ^
/temp/neatvi/regex.c:98:12: error: static declaration of 'uc_len' follows non-static declaration
static int uc_len(char *s)
           ^
/temp/neatvi/vi.h:83:5: note: previous declaration is here
int uc_len(char *s);
    ^
/temp/neatvi/regex.c:200:14: error: static declaration of 'uc_beg' follows non-static declaration
static char *uc_beg(char *beg, char *s)
             ^
/temp/neatvi/vi.h:101:7: note: previous declaration is here
char *uc_beg(char *beg, char *s);
      ^
/temp/neatvi/vi.c:635:12: error: redefinition of 'linecount'
static int linecount(char *s)
           ^
/temp/neatvi/lbuf.c:124:12: note: previous definition is here
static int linecount(char *s)
           ^
9 errors generated.


goroutine 1 [running]:
main.generateAstLines(0x1, 0x0, 0xc000010140, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/go/src/github.com/Konstantin8105/c4go/main.go:438 +0xd40
main.Start(0x1, 0x0, 0xc000010140, 0x10, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
	/go/src/github.com/Konstantin8105/c4go/main.go:356 +0xa9
main.runCommand(0x0)
	/go/src/github.com/Konstantin8105/c4go/main.go:723 +0xa45
main.main()
	/go/src/github.com/Konstantin8105/c4go/main.go:556 +0x22

That error is good and enought information for next step of transpilation. Let's clarify one of them - we see 2 function with same function name and if you open files and compare.

/temp/neatvi/vi.c:635:12: error: redefinition of 'linecount'
static int linecount(char *s)

/temp/neatvi/lbuf.c:124:12: note: previous definition is here
static int linecount(char *s)

This is 2 absolute identical function, so we can remove one of them. I choose remove function linecount from file vi.c, because in according to error - it is duplicate.

Also remove next function in according to errors:

  • vi.c function linecount
  • regex.c function uc_len
  • regex.c function uc_bed

Next error is about duplicate of variable names:

/temp/neatvi/reg.c:6:14: error: redefinition of 'bufs' with a different type: 'char *[256]' vs 'struct buf [8]'
static char *bufs[256];
             ^
/temp/neatvi/ex.c:35:3: note: previous definition is here
} bufs[8];

Let's replace variable name in file reg.c and run:

sed -i.bak 's/bufs/bufs_postfix/g' reg.c

Now, let's try again and output in file vi.go:

c4go transpile -o vi.go *.c

Now transpiled without clang error. Look the result:

less vi.go

We see warning of lose some types:

// Warning (*ast.BinaryOperator):  /temp/neatvi/cmd.c:20 :Cannot transpile BinaryOperator with type 'int' : result type = {}. Error: operator is `=`. Cannot casting {__pid_t -> int}. err = Cannot resolve type '__pid_t' : I couldn't find an appropriate Go type for the C type '__pid_t'.

For fix that add flag -s for adding all type from C standard library:

c4go transpile -o vi.go -s *.c

Now, all is Ok. Look the result:

less vi.go

C standard library implementation

            assert.h	       1/1	         100%
             ctype.h	     13/13	         100%
             errno.h	       0/1	           0%
             float.h	          	    undefined
            iso646.h	          	    undefined
            limits.h	          	    undefined
            locale.h	       3/3	         100%
              math.h	     22/23	        95.7%
            setjmp.h	       0/3	           0%
            signal.h	       3/3	         100%
            stdarg.h	       4/4	         100%
            stddef.h	       3/4	          75%
             stdio.h	     37/41	        90.2%
            stdlib.h	     31/37	        83.8%
            string.h	     21/24	        87.5%
              time.h	     14/15	        93.3%
             wchar.h	      3/60	           5%
            wctype.h	      0/21	           0%

Contributing

Feel free to submit PRs or open issues. Main information from: en.cppreference.com

Testing

By default, only unit tests are run with go test. You can also include the integration tests:

go test -tags=integration ./...

Integration tests in the form of complete C programs that can be found in the tests directory.

Integration tests work like this:

  1. clang compiles the C to a binary as normal.
  2. c4go converts the C file to Go.
  3. Both binaries are executed and the output is compared. All C files will contain some output so the results can be verified.

Note

Use lastest version of clang.

If you use Ubuntu, then use command like next for choose clang version:

sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-6.0 1000

Performance

Main time of transpilation takes clang, for example run:

go test -tags=integration -run=Benchmark -bench=. -benchmem

Result looks for example:

goos: linux
goarch: amd64
pkg: github.com/Konstantin8105/c4go
BenchmarkTranspile/Full-6         	       5	 274922964 ns/op	43046865 B/op	  379676 allocs/op
BenchmarkTranspile/GoCode-6       	      20	  86806808 ns/op	36577533 B/op	  308060 allocs/op
PASS

So, transpilation time is just 30% of full time. In my point of view no need of performance optimization, see Amdahl's law.

Example of performance analyse

Please run:

# Run cpuprofiling for sqlite transpilation example
time ./scripts/sqlite.sh 

# Example of output:
#
# % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
#                                 Dload  Upload   Total   Spent    Left  Speed
#100 2217k  100 2217k    0     0   235k      0  0:00:09  0:00:09 --:--:--  357k
#Archive:  /tmp/SQLITE/sqlite-amalgamation-3250200.zip
#   creating: /tmp/SQLITE/sqlite-amalgamation-3250200/
#  inflating: /tmp/SQLITE/sqlite-amalgamation-3250200/sqlite3ext.h  
#  inflating: /tmp/SQLITE/sqlite-amalgamation-3250200/sqlite3.c  
#  inflating: /tmp/SQLITE/sqlite-amalgamation-3250200/sqlite3.h  
#  inflating: /tmp/SQLITE/sqlite-amalgamation-3250200/shell.c  
#After transpiling shell.c and sqlite3.c together, have summary: 695 warnings.
#In file sqlite.go summary : 3 warnings in go build.
#Amount unsafe package using: 2902
#
#real	0m18.434s
#user	0m14.212s
#sys	0m1.434s

# Run profiler
go tool pprof ./testdata/cpu.out

For more information, see Profiling Go Programs.

Comments
  • Transpiling modified lua5.1

    Transpiling modified lua5.1

    https://gitlab.com/the-language/the-language/tree/7ade276ad241c7fdff0163cf41295e03e869e7a5/core/arch/c/lang.c

    runtime: goroutine stack exceeds 1000000000-byte limit
    fatal error: stack overflow
    
    runtime stack:
    runtime.throw(0x6e2d89, 0xe)
    	/home/1828_sandbox/pkgs/go/src/runtime/panic.go:617 +0x72
    runtime.newstack()
    	/home/1828_sandbox/pkgs/go/src/runtime/stack.go:1041 +0x6f0
    runtime.morestack()
    	/home/1828_sandbox/pkgs/go/src/runtime/asm_amd64.s:429 +0x8f
    
    goroutine 1 [running]:
    strings.Replace(0xc0023a5da0, 0x52, 0x6dc600, 0x3, 0x6dc485, 0x2, 0xffffffffffffffff, 0xc0023a5da7, 0x4a)
    	/home/1828_sandbox/pkgs/go/src/strings/strings.go:848 +0x555 fp=0xc02c000370 sp=0xc02c000368 pc=0x4d51a5
    github.com/Konstantin8105/c4go/util.CleanCType(0xc0023a5da0, 0x52, 0x6e074f, 0x9)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/util/util.go:320 +0x83 fp=0xc02c000590 sp=0xc02c000370 pc=0x549c13
    github.com/Konstantin8105/c4go/util.GenerateCorrectType(0xc0023a5da0, 0x52, 0xc0023a5da0, 0x52)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/util/util.go:388 +0x69b fp=0xc02c0006f8 sp=0xc02c000590 pc=0x54ad6b
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:51 +0x264 fp=0xc02c000950 sp=0xc02c0006f8 pc=0x5baed4
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c000ba8 sp=0xc02c000950 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c000e00 sp=0xc02c000ba8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c001058 sp=0xc02c000e00 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c0012b0 sp=0xc02c001058 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c001508 sp=0xc02c0012b0 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c001760 sp=0xc02c001508 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c0019b8 sp=0xc02c001760 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c001c10 sp=0xc02c0019b8 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c001e68 sp=0xc02c001c10 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0001a7140, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c0020c0 sp=0xc02c001e68 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:115 +0x9ac fp=0xc02c002318 sp=0xc02c0020c0 pc=0x5bb61c
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c002570 sp=0xc02c002318 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c0027c8 sp=0xc02c002570 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c002a20 sp=0xc02c0027c8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c002c78 sp=0xc02c002a20 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c002ed0 sp=0xc02c002c78 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c003128 sp=0xc02c002ed0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c003380 sp=0xc02c003128 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c0035d8 sp=0xc02c003380 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c003830 sp=0xc02c0035d8 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c003a88 sp=0xc02c003830 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c003ce0 sp=0xc02c003a88 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c003f38 sp=0xc02c003ce0 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c004190 sp=0xc02c003f38 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c0043e8 sp=0xc02c004190 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c004640 sp=0xc02c0043e8 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c004898 sp=0xc02c004640 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c004af0 sp=0xc02c004898 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c004d48 sp=0xc02c004af0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c004fa0 sp=0xc02c004d48 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c0051f8 sp=0xc02c004fa0 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c005450 sp=0xc02c0051f8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c0056a8 sp=0xc02c005450 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c005900 sp=0xc02c0056a8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c005b58 sp=0xc02c005900 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c005db0 sp=0xc02c005b58 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c006008 sp=0xc02c005db0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c006260 sp=0xc02c006008 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c0064b8 sp=0xc02c006260 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c006710 sp=0xc02c0064b8 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c006968 sp=0xc02c006710 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c006bc0 sp=0xc02c006968 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c006e18 sp=0xc02c006bc0 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c007070 sp=0xc02c006e18 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c0072c8 sp=0xc02c007070 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c007520 sp=0xc02c0072c8 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c007778 sp=0xc02c007520 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c0079d0 sp=0xc02c007778 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c007c28 sp=0xc02c0079d0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0001a7140, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c007e80 sp=0xc02c007c28 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:115 +0x9ac fp=0xc02c0080d8 sp=0xc02c007e80 pc=0x5bb61c
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c008330 sp=0xc02c0080d8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c008588 sp=0xc02c008330 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c0087e0 sp=0xc02c008588 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c008a38 sp=0xc02c0087e0 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c008c90 sp=0xc02c008a38 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c008ee8 sp=0xc02c008c90 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c009140 sp=0xc02c008ee8 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c009398 sp=0xc02c009140 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c0095f0 sp=0xc02c009398 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c009848 sp=0xc02c0095f0 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c009aa0 sp=0xc02c009848 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c009cf8 sp=0xc02c009aa0 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c009f50 sp=0xc02c009cf8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00a1a8 sp=0xc02c009f50 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00a400 sp=0xc02c00a1a8 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00a658 sp=0xc02c00a400 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00a8b0 sp=0xc02c00a658 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00ab08 sp=0xc02c00a8b0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00ad60 sp=0xc02c00ab08 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00afb8 sp=0xc02c00ad60 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00b210 sp=0xc02c00afb8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00b468 sp=0xc02c00b210 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00b6c0 sp=0xc02c00b468 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00b918 sp=0xc02c00b6c0 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00bb70 sp=0xc02c00b918 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00bdc8 sp=0xc02c00bb70 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00c020 sp=0xc02c00bdc8 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00c278 sp=0xc02c00c020 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00c4d0 sp=0xc02c00c278 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00c728 sp=0xc02c00c4d0 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00c980 sp=0xc02c00c728 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00cbd8 sp=0xc02c00c980 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00ce30 sp=0xc02c00cbd8 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0001a7140, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00d088 sp=0xc02c00ce30 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:115 +0x9ac fp=0xc02c00d2e0 sp=0xc02c00d088 pc=0x5bb61c
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00d538 sp=0xc02c00d2e0 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00d790 sp=0xc02c00d538 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00d9e8 sp=0xc02c00d790 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00dc40 sp=0xc02c00d9e8 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00de98 sp=0xc02c00dc40 pc=0x5bb6a1
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc00391429d, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00e0f0 sp=0xc02c00de98 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003914301, 0xb, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:70 +0x55b fp=0xc02c00e348 sp=0xc02c00e0f0 pc=0x5bb1cb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc003913ebb, 0x4, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:40 +0x217b fp=0xc02c00e5a0 sp=0xc02c00e348 pc=0x5bcdeb
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0023a5da0, 0x52, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:73 +0x5cd fp=0xc02c00e7f8 sp=0xc02c00e5a0 pc=0x5bb23d
    github.com/Konstantin8105/c4go/types.SizeOf(0xc0001bc160, 0xc0039140d7, 0xa, 0x0, 0x0, 0x0)
    	/home/1828_sandbox/src/the-language/core/arch/go/deps/src/github.com/Konstantin8105/c4go/types/sizeof.go:118 +0xa31 fp=0xc02c00ea50 sp=0xc02c00e7f8 pc=0x5bb6a1
    ...additional frames elided...
    
  • stb_vorbis.c does not transpile

    stb_vorbis.c does not transpile

    https://github.com/nothings/stb/blob/master/stb_vorbis.c

    c4go transpile stb_vorbis.c
    panic: unknown operator: __extension__
    
    goroutine 1 [running]:
    github.com/Konstantin8105/c4go/transpiler.getTokenForOperator(0xc000e4c6e7, 0xd, 0xc0019a79e0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/operators.go:464 +0xa9a
    github.com/Konstantin8105/c4go/transpiler.transpileUnaryOperator(0xc0017285a0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/unary.go:523 +0xd7
    github.com/Konstantin8105/c4go/transpiler.transpileToExpr(0x73a220, 0xc0017285a0, 0xc00010a000, 0x73a201, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:205 +0xd51
    github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x73a220, 0xc0017285a0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:420 +0x257
    github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x73a220, 0xc0017285a0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:297 +0xe3
    github.com/Konstantin8105/c4go/transpiler.transpileBinaryOperatorComma(0xc0017281e0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/binary.go:38 +0x162
    github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x7389a0, 0xc0017281e0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:385 +0xa00
    github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x7389a0, 0xc0017281e0, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:297 +0xe3
    github.com/Konstantin8105/c4go/transpiler.transpileCompoundStmt(0xc00056f570, 0xc00010a000, 0xc00010a000, 0x738e60, 0xc00056f570, 0xc0019a80e8, 0x6edea8, 0xc0001558b0, 0xc0019a8040, 0xc000000180, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:66 +0x613
    github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x738e60, 0xc00056f570, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:380 +0xab1
    github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x738e60, 0xc00056f570, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:297 +0xe3
    github.com/Konstantin8105/c4go/transpiler.transpileToBlockStmt(0x738e60, 0xc00056f570, 0xc00010a000, 0x739600, 0xc0006e3f80, 0x0, 0x0, 0x7376a0, 0xc00052d2f0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:93 +0x49
    github.com/Konstantin8105/c4go/transpiler.transpileIfStmt(0xc0006e3f80, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/branch.go:95 +0x981
    github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x739620, 0xc0006e3f80, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:370 +0xdee
    github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x739620, 0xc0006e3f80, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:297 +0xe3
    github.com/Konstantin8105/c4go/transpiler.transpileCompoundStmt(0xc00056f340, 0xc00010a000, 0xc00010a000, 0x738e60, 0xc00056f340, 0xc0019a8780, 0x9, 0x0, 0x0, 0xc000000180, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:66 +0x613
    github.com/Konstantin8105/c4go/transpiler.transpileToStmt(0x738e60, 0xc00056f340, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:380 +0xab1
    github.com/Konstantin8105/c4go/transpiler.transpileToStmts(0x738e60, 0xc00056f340, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:297 +0xe3
    github.com/Konstantin8105/c4go/transpiler.transpileToBlockStmt(0x738e60, 0xc00056f340, 0xc00010a000, 0xc000d9ca20, 0x1, 0xc0017c0730, 0x0, 0x1, 0x0, 0x0, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/scope.go:93 +0x49
    github.com/Konstantin8105/c4go/transpiler.transpileFunctionDecl(0xc000199790, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/functions.go:116 +0x25c6
    github.com/Konstantin8105/c4go/transpiler.transpileToNode(0x7394a0, 0xc000199790, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:597 +0x679
    github.com/Konstantin8105/c4go/transpiler.transpileTranslationUnitDecl(0xc00010a000, 0xc000130060, 0xc0019a9858, 0x73a0a0, 0xc000130060, 0xc00010a000, 0x4d3ea8)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/translation_unit.go:40 +0x1ee
    github.com/Konstantin8105/c4go/transpiler.transpileToNode(0x73a0a0, 0xc000130060, 0xc00010a000, 0x0, 0x0, 0x0, 0x0, 0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:482 +0xcfb
    github.com/Konstantin8105/c4go/transpiler.TranspileAST(0x0, 0x0, 0x6d542e, 0x4, 0xc000130000, 0xc00010a000, 0x73a0a0, 0xc000130060, 0xc000170000, 0x3ab, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/transpiler/transpiler.go:102 +0x221
    main.generateGoCode(0x0, 0xc0000101a0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d542e, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/main.go:469 +0x6d3
    main.Start(0x0, 0xc0000101a0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d542e, ...)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/main.go:337 +0x217
    main.runCommand(0x0)
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/main.go:639 +0x8ea
    main.main()
        /home/tp/program_lang/go/src/github.com/Konstantin8105/c4go/main.go:510 +0x22
    
    
  • c4go transpile prime.c -> fail

    c4go transpile prime.c -> fail

    OS:linux CentOS 7 64 bit It's conversion fail ,why?

    Error: [root@localhost examples]# c4go transpile prime.c panic: interface conversion: interface is nil, not ast.Node goroutine 1 [running]: main.generateGoCode(0x0, 0xc420084080, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b422b, ...) /home/go/src/github.com/Konstantin8105/c4go/main.go:470 +0x61d main.Start(0x0, 0xc420084080, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6b422b, ...) /home/go/src/github.com/Konstantin8105/c4go/main.go:337 +0x282 main.runCommand(0x0) /home/go/src/github.com/Konstantin8105/c4go/main.go:639 +0x904 main.main() /home/go/src/github.com/Konstantin8105/c4go/main.go:510 +0x22

  • Stdlib example from README

    Stdlib example from README

    In README we can see example:

    #include <stdio.h>
    
    int main()
    {
        int n, c;
    
        printf("Enter a number\n");
        // get value
        scanf("%d", &n);
        printf("The number is: %d\n", n);
    
        // -------
        if (n == 2)
            printf("Prime number.\n");
        else {
            for (c = 2; c <= n - 1; c++) {
                if (n % c == 0)
                    break;
            }
            if (c != n)
                printf("Not prime.\n");
            else
                printf("Prime number.\n");
        }
        return 0;
    }
    

    that can be simplified to

    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	var n, c int
    
    	fmt.Print("Enter a number\n")
    	// get value
    	fmt.Scanf("%d", &n)
    	fmt.Printf("The number is: %d\n", n)
    
    	// -------
    	if n == 2 {
    		fmt.Printf("Prime number.\n")
    	} else {
    		for c = 2; c <= n-1; c++ {
    			if n%c == 0 {
    				break
    			}
    		}
    		if c != n {
    			fmt.Printf("Not prime.\n")
    		} else {
    			fmt.Printf("Prime number.\n")
    		}
    	}
    }
    

    I do not quite understand the meaning of using unsafe and noarch packages in this case, when you can translate this code much easier.

    @Konstantin8105, What you think?

  • math.log1p

    math.log1p

    Add test and implementation on Go for function math.log1p Description: https://en.cppreference.com/w/c/numeric/math/log1p File for test code add : c4go/tests/math.c

  • stdlib.system

    stdlib.system

    Add test and implementation on Go for function stdlib.h system Description: https://en.cppreference.com/w/c/program/system File for test code add : c4go/tests/stdlib.c

  • can't convert open62541.c

    can't convert open62541.c

    Hello, I am trying to convert https://github.com/open62541/open62541/releases/download/0.3-rc2/open62541.c

    and get many AST error, see https://github.com/eugeis/gopen62541/blob/master/open62541.go

    Is it easy to resolve or too difficult? Thank You

  • time.localtime

    time.localtime

    Add test and implementation on Go for function time.h localtime Description: https://en.cppreference.com/w/c/chrono/localtime File for test code add : c4go/tests/time.c Example see #155

  • string.memcmp

    string.memcmp

    Add test and implementation on Go for function string.h memcmp Description: https://en.cppreference.com/w/c/string/byte/memcmp File for test code add : c4go/tests/string.c

  • Error in sputc Mac OSX.

    Error in sputc Mac OSX.

    Compiler message: syntax error: unexpected =, expecting )

    in function sputc / __sputc - transpiled function from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:264

    The syntax error is in this line: }())[0] = uint8(_c)))

    The whole function: func __sputc(_c int, _p *noarch.File) (c4goDefaultReturn int) { if func() int { tempVar := &_p[0]._w *tempVar -- defer func() { }() return *tempVar }() >= 0 || _p[0]._w >= _p[0]._lbfsize && int(byte(_c)) != int('\n') { return int(((func() []uint8 { tempVar := &_p[0]._p defer func() { *tempVar ++ }() return *tempVar }())[0] = uint8(_c))) // Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _w // Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _lbfsize // Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _w // Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:265 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _lbfsize // Warning (*ast.MemberExpr): /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/stdio.h:266 :cannot determine type for LHS 'FILE *', will use 'void *' for all fields. Is lvalue = true. n.Name = _p } else { return (__swbuf(_c, _p)) } return }

  • AST Error in trans-piling your program only --prime.c

    AST Error in trans-piling your program only --prime.c

    $ c4go transpile prime.c AST error #0: /* AST Error : unknown node type: MSAllocatorAttr 0x1621a951520 <line:420:25> / AST error #1: / AST Error : unknown node type: MSAllocatorAttr 0x1621a91ab48 <line:187:25> */

    Followed all the steps as mentioned in this project description but facing this issue. Please help

  • unknown node type: `TypeVisibilityAttr 0x2962acf3b20 <<invalid sloc>> Implicit Default`

    unknown node type: `TypeVisibilityAttr 0x2962acf3b20 <> Implicit Default`

    /* AST Error : unknown node type: TypeVisibilityAttr 0x2962acf3b20 <<invalid sloc>> Implicit Default / / AST Error : unknown node type: MSAllocatorAttr 0x2962aee6218 <line:190:25> / / AST Error : unknown node type: MSAllocatorAttr 0x2962af30c50 <line:425:25> */ please check on this.

  • strange usage of switch won't be able to be transpiled to Go

    strange usage of switch won't be able to be transpiled to Go

    for example:

    int i;
    int x = /** some code */;
    switch (x) {
    case 0: for (i = 0; i < 3; i++) {
    case 1: /** some code */;
    case 2: /** some code */;
    case 3: /** some code */; }
    }
    
A compiler from Go to JavaScript for running Go code in a browser

GopherJS - A compiler from Go to JavaScript GopherJS compiles Go code (golang.org) to pure JavaScript code. Its main purpose is to give you the opport

Dec 30, 2022
Grumpy is a Python to Go source code transcompiler and runtime.

Grumpy: Go running Python Overview Grumpy is a Python to Go source code transcompiler and runtime that is intended to be a near drop-in replacement fo

Jan 7, 2023
Transform Go code into it's AST

Welcome to go2ast ?? Transform Go code into it's AST Usage echo "a := 1" | go run main.go Example output []ast.Stmt { &ast.AssignStmt {

Dec 13, 2022
Compile Go regular expressions to Go code

regexp2go regexp2go is an alternate backend for the regexp package that allows to perform ahead-of-time compilation of regular expressions to Go code.

Jul 11, 2022
Syntax-aware Go code search, based on the mvdan/gogrep
Syntax-aware Go code search, based on the mvdan/gogrep

gogrep WIP: this is an attempt to move modified gogrep from the go-ruleguard project, so it can be used outside of the ruleguard as a library. Acknowl

Nov 9, 2022
Transpiling fortran code to golang code

f4go Example of use > # Install golang > # Compile f4go > go get -u github.com/Konstantin8105/f4go > cd $GOPATH/src/github.com/Konstantin8105/f4go > g

Sep 26, 2022
⚖️ A tool for transpiling C to Go.

A tool for converting C to Go. The goals of this project are: To create a generic tool that can convert C to Go. To be cross platform (linux and mac)

Dec 29, 2022
Test your code without writing mocks with ephemeral Docker containers 📦 Setup popular services with just a couple lines of code ⏱️ No bash, no yaml, only code 💻

Gnomock – tests without mocks ??️ Spin up entire dependency stack ?? Setup initial dependency state – easily! ?? Test against actual, close to product

Dec 29, 2022
:triangular_ruler:gofmtmd formats go source code block in Markdown. detects fenced code & formats code using gofmt.
:triangular_ruler:gofmtmd formats go source code block in Markdown. detects fenced code & formats code using gofmt.

gofmtmd gofmtmd formats go source code block in Markdown. detects fenced code & formats code using gofmt. Installation $ go get github.com/po3rin/gofm

Oct 31, 2022
octocov is a tool for collecting code metrics (code coverage, code to test ratio and test execution time).

octocov is a tool for collecting code metrics (code coverage, code to test ratio and test execution time).

Jan 9, 2023
sail is an operation framework based on Ansible/Helm. sail follows the principles of Infrastructure as Code (IaC), Operation as Code (OaC), and Everything as Code. So it is a tool for DevOps.

sail 中文文档 sail is an operation framework based on Ansible/Helm. sail follows the principles of Infrastructure as Code (IaC), Operation as Code (OaC),a

Dec 16, 2021
The most opinionated Go source code linter for code audit.
The most opinionated Go source code linter for code audit.

go-critic Highly extensible Go source code linter providing checks currently missing from other linters. There is never too much static code analysis.

Jan 6, 2023
VS Code code snippet generator

VS Code code snippets generator.

Sep 2, 2022
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

Sloc Cloc and Code (scc) A tool similar to cloc, sloccount and tokei. For counting physical the lines of code, blank lines, comment lines, and physica

Jan 8, 2023
🐶 Automated code review tool integrated with any code analysis tools regardless of programming language
🐶 Automated code review tool integrated with any code analysis tools regardless of programming language

reviewdog - A code review dog who keeps your codebase healthy. reviewdog provides a way to post review comments to code hosting service, such as GitHu

Jan 2, 2023
A Golang tool that does static analysis, unit testing, code review and generate code quality report.
A Golang tool that does static analysis, unit testing, code review and generate code quality report.

goreporter A Golang tool that does static analysis, unit testing, code review and generate code quality report. This is a tool that concurrently runs

Jan 8, 2023
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go
Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go

Sloc Cloc and Code (scc) A tool similar to cloc, sloccount and tokei. For counting physical the lines of code, blank lines, comment lines, and physica

Jan 4, 2023
The High Code Framework (low-code for devs)

hof - the high code framework The hof tool tries to remove redundent development activities by using high level designs, code generation, and diff3 wh

Dec 24, 2022
Floppa programming language inspired by the brainf*ck programming language. Created just for fun and you can convert your brainf*ck code to floppa code.

Floppa Programming Language Created just for fun. But if you want to contribute, why not? Floppa p.l. inspired by the brainf*ck programming language.

Oct 20, 2022