On Tuesday, 21 February 2017 12:23:44 UTC-5, Arpit Aggarwal wrote:
>
> I am doing a project in which I need Go compiler's intermediate
> representation(IR) (which is semantics preserving and I can get all all
> info like line number and data type and other features) (human readable) to
> convert to another IR of a tool.
>
The most convenient way to access the semantics of a Go program is to use
the golang.org/x/tools/go/ssa package, which builds a high-level SSA-based
intermediate representation.
$ cat fib.go
package fib
func fib(x int) int {
if x < 2 {
return x
}
return fib(x-2) + fib(x-1)
}
$ go build golang.org/x/tools/cmd/ssadump
$ ./ssadump -build=F fib.go
# Name: fib.fib
# Package: fib
# Location: fib.go:3:6
func fib(x int) int:
0: entry P:0
S:2
t0 = x < 2:int
bool
if t0 goto 1 else 2
1: if.then P:1
S:0
return x
2: if.done P:1
S:0
t1 = x - 2:int
int
t2 = fib(t1)
int
t3 = x - 1:int
int
t4 = fib(t3)
int
t5 = t2 + t4
int
return t5
# Name: fib.init
# Package: fib
# Synthetic: package initializer
func init():
0: entry P:0
S:2
t0 = *init$guard
bool
if t0 goto 2 else 1
1: init.start P:1
S:1
*init$guard = true:bool
jump 2
2: init.done P:2
S:0
return
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.