@target mips, mipt2

package main;
import (
    //palavra "sub" 
    "git.gojus.com.br/eugeniucarvalho/samples"
    "git.gojus.com.br/eugeniucarvalho/xxla"
)

const (
    DIVISOR = 2
    MULTIPLICADOR = 2
)

//type time int

type A struct {
    //samples.Entidade
    Vivo  bool
    Idade int
}

type G struct {
    //main.A
    //main.A
    valores   int
    ID        int
}

func Z(x int) int {
    return x + 3
}
func L(x *int) int,int {
    a := Z(3)
    return  *x + 1, 2 + 2
}



//var (
//    v1  G
//)

func main() {
    var (
        i        int
        j        int
        t        int
        variavel G
        //variavel = G{}
        /*
variavel = G{
            A: A{
                Vivo:true,
            },
            valores:1,
            ID:2,
        }
*/
        //m        int
        k        *int
        //b        bool
        v        = true
        array    = []int{1,2,3,4,5,}
        array2   [DIVISOR][4]int
    )
    /*
    i = 2
    array[i] = 1
    t = array[i]
    array[6] = 1

    t[1] = 1

    */

    i = 2 + t
    j,t = L(k)

    *k = 4

    variavel.ID = 1
    t = variavel.ID

    /*

    k = &i
    i = *k
    t++
    i = 2 + *k
    */

    //t = array2[1][2]
    //array2[i][2] = t


/**
IF3:
    if (i == 0 || (i != 4 || j > 10)) {
        v1.ID = 1
    } else {
        j = 10
    }

Saltos

IF0:
    if (i == 0 ){
        j = 20
    }
IF1:
    if true {
        j = 20
    }
IF2:
    if (i == 0 ){
        j = 10
    } else {
        j = 30
    }

IF4:
    
    if (i == 0 && (i != 4 && j > 10)) {
        j = 1
    } else {
        j = 10
    }

SWITCH:
    switch {
        case k < 10:
            variavel.ID = variavel.ID + k
            fallthrough
        case true == false:
            variavel.ID = variavel.ID - k
        default:
            variavel.ID = variavel.ID - k
    }

FOR1:
    i = 0
    for i < 10  {
        variavel.ID = variavel.ID + i
        i++
    }
FOR2:
    i = 0
    for i < 10 && j = true  {
        variavel.ID = variavel.ID + i
        i++
    }
FOR3:
    for i < 10 || j = true  {
        variavel.ID = variavel.ID + i
        i++
    }
  
      
   <main.L>:
 6:	 0:		pop_param _V2		  T< pop_param >
 7:	 1:		_T4 := *_V2		  T< pointer_assignment >
 8:	 2:		_T5 := _T4 + 1		  T< assign >
 9:	 3:		push_return _T5		  T< push_return >
10:	 4:		return 1		  T< return >
  :		<main.L-end>:

10:  00048021	addu s0,zero,a0	.6.--pop param
11:  33d10000	lw s1,fp,0	.7.--load address stored in _V2
12:  32280000	lw t0,s1,0	.7.--load content of address stored in s1
13:  01490001	addiu t1,t2,1	.8.
*/














    //variavel.ID = *k
    //i = variavel.ID
    //variavel.ID = 1
    
    //variavel.valores = &i



    //variavel.ID = 10
    //variavel.Entidade.ID = 20
    //variavel.valores = &i
    

    //j = 10
    //i = 10
    //m = L(&i)
    //m = L(k)
    //k = &i
    //j = *k
    //*k = j


    /*

   j = *variavel.valores  +  2

    i := 0
    for i < 10  {
        variavel.ID = variavel.ID + i
        i++
    }


    if 1 != b {
        variavel.ID = -20
    }

    z := InitA(10)
    
    i = -10
    k = -i

    b = !true
    t = !b
 
    k = (i + 10) / 2

    z1 := InitA(10)

    k = i + z
    k = 10 % 2

    if k > 10 {
        variavel.ID = 1
    }


    switch {
        case k < 10:
            variavel.ID = variavel.ID + k
            fallthrough
        case true == false:
            variavel.ID = variavel.ID - k
        default:
            variavel.ID = variavel.ID - k
    }
*/

}















 /*


    var (
        k = 1
        estrutura *A
        Y *int 
    )
    
    x := samples.DoPacote()

    na := A {
        valid : true,
        id    : 1,
    }

    a := 1
    k  = &a // Atualizar o valor do endereco do ponteiro
    *k = 3  // Atribuicao do valor a variavel referenciado pelo ponteiro
    *k = *k // Copia do conteudo de um ponteiro para outro ponteiro

    y := lista(k)
    z := listaEstrutura(estrutura, 1)


// fim

    var G variavel

    //res := variavel.Ativada()
    
    res := false || true
    k   := 1
X0:
    switch res := variavel.Ativada(); res {
        case 'a', 'b', 'd':
            variavel.ID = variavel.ID + k
            break
            variavel.ID = variavel.ID + k
            fallthrough
        case 'c':
            variavel.ID = variavel.ID - k
    }
X1:
    switch {
        case 1 < 10:
            variavel.ID = variavel.ID + k
            fallthrough
        case true == false:
            variavel.ID = variavel.ID - k
        default:
            variavel.ID = variavel.ID - k
    }
 X2:
    if res == true && 4 < 2 {
        variavel.ID = 15 + 1
    } else if res == true || 4 < 2 {
        variavel.ID = 15 + 1
    } else {
        variavel.ID = 5 + 11
    }

X3:
    if res := variavel.Ativada(); res {
        variavel.ID = 15 + 1
    } 
X4:
    for i := 0; i < 10; i++ {
        res = variavel.Somar(10)
        goto X1
        variavel.ID = variavel.ID + i
        continue
    }
X5:
    i := 0
    for i < 10  {
        res = variavel.Somar(10)
        variavel.ID = variavel.ID + i
        i++
    }
X6:




// saia
    for x, y := range lista() {
        res = variavel.Somar(10)
        variavel.ID = variavel.ID + i
        i++
    }


    variavel.A.Nome = 10

    res = res || (true && false)

    b, x := Crazy(10)

    variavel.ID++



   
    */

/** 
func (x *G) Somar(i int) int {
    return i + x.ID
}

func Crazy(x int) bool, int {
    return x, true
}

func lista(v *int) int {
    return v + 1
}

func InitA(v int) int {
    return v + 1
}

func listaEstrutura(r *A) int {
    return r.valid + 1
}

func L(a *int) *int {
    *a = *a + 1
    return a
}


*/