Merge pull request #1361 from nspcc-dev/feature/iota

compiler: support `iota`
This commit is contained in:
Roman Khimov 2020-08-25 15:50:20 +03:00 committed by GitHub
commit 962f45f35e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 1 deletions

View file

@ -408,7 +408,12 @@ func (c *codegen) Visit(node ast.Node) ast.Visitor {
for _, spec := range n.Specs { for _, spec := range n.Specs {
vs := spec.(*ast.ValueSpec) vs := spec.(*ast.ValueSpec)
for i := range vs.Names { for i := range vs.Names {
c.constMap[c.getIdentName("", vs.Names[i].Name)] = c.typeAndValueOf(vs.Values[i]) info := c.buildInfo.program.Package(c.currPkg.Path())
obj := info.Defs[vs.Names[i]]
c.constMap[c.getIdentName("", vs.Names[i].Name)] = types.TypeAndValue{
Type: obj.Type(),
Value: obj.(*types.Const).Val(),
}
} }
} }
return nil return nil

View file

@ -72,3 +72,17 @@ func TestGlobalsWithFunctionParams(t *testing.T) {
` `
eval(t, src, []byte("FOO")) eval(t, src, []byte("FOO"))
} }
func TestIota(t *testing.T) {
src := `package foo
const (
a = 2 << iota
b
c = 11
)
func Main() int {
return a + b + c
}`
eval(t, src, big.NewInt(17))
}