c2go icon indicating copy to clipboard operation
c2go copied to clipboard

Multiple For Loop Variables

Open dc0d opened this issue 7 years ago • 5 comments

For this C code:

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

typedef __int32_t int32;

int32 sampleFunc(int32 input) 
{
    return input * 2;
}

int32 sampleAction()
{
    int32 i, t, dt, dummy;
    dummy = 0;
    dt = 12;
    for (i = 0, t = 0; i <= 2; i += 1, t += dt)
    {
        dummy += i * t;
    }
    return dummy;
}

int main()
{
    printf("Hello World\n");
    return 0;
}

Skipping ceremonial parts, we get:

func sampleAction() int32 {
	var i int32
	var t int32
	var dt int32
	var dummy int32
	dummy = int32(0)
	dt = int32(12)
	for i = int32(0) , (t = int32(0)); i <= 2; i += 1 , (t += dt) { // syntax error
		dummy += i*t
	}
	return dummy
}

While equivalent, working Go code is:

func sampleAction() int32 {
	var i int32
	var t int32
	var dt int32
	var dummy int32
	dummy = int32(0)
	dt = int32(12)
	for i, t = int32(0), int32(0); i <= 2; i, t = i+1, t+dt { // correct syntax
		dummy += i * t
	}
	return dummy
}

dc0d avatar May 27 '17 09:05 dc0d

Thanks for pointing this out - it is a bug. Feel like putting in a PR for it?

elliotchance avatar May 27 '17 15:05 elliotchance

I'm not sure if I'm any good with Programming Languages things (ASTs, Lexers, Parsers), just the concepts. Maybe that's why I've played with languages as much as I could!

dc0d avatar May 27 '17 18:05 dc0d

Say hello in our Gitter, and we'd be happy to help you 😄

Join the chat at https://gitter.im/c2goproject

elliotchance avatar May 28 '17 08:05 elliotchance

Thank for snippet . I will try to solve in this week.

Konstantin8105 avatar Jun 28 '17 21:06 Konstantin8105

Present version:

type int32 int // <<--- HERE NAME IS NOT LIKE IN C

func sampleFunc(input int) int { // <<-- OUTPUT TYPE IS NOT int32
        return input * int((int((2))))
}

func sampleAction() int { // <<-- OUTPUT TYPE IS NOT int32
        var i int // <<--TYPE IS NOT int32
        var t int // <<--TYPE IS NOT int32
        var dt int // <<--TYPE IS NOT int32
        var dummy int // <<--TYPE IS NOT int32
        dummy = int((int((0)))) // <<-- STRANGE TYPE CONVERTION
        dt = int((int((12))))// <<-- STRANGE TYPE CONVERTION
        for {
                break
        }
        {
                i = int((int((0))))
                t = int((int((0))))
                for t = int((int((0)))); i <= 2; {
                        dummy += i*t
                        i += 1
                        t += dt
                }
        }
        return dummy
}

func main() {
        __init()
        noarch.Printf([]byte("Hello World\n\x00"))
        return
}

Konstantin8105 avatar Dec 20 '17 19:12 Konstantin8105