compiler: allow slicing arrays of a named type

Этот коммит содержится в:
Konstantin Yegupov 2019-01-03 08:02:44 +00:00 коммит произвёл Ayke van Laethem
родитель 873c1c3b4d
коммит f44dff6f59
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED
2 изменённых файлов: 9 добавлений и 1 удалений

Просмотреть файл

@ -2334,7 +2334,7 @@ func (c *Compiler) parseExpr(frame *Frame, expr ssa.Value) (llvm.Value, error) {
switch typ := expr.X.Type().Underlying().(type) {
case *types.Pointer: // pointer to array
// slice an array
length := typ.Elem().(*types.Array).Len()
length := typ.Elem().Underlying().(*types.Array).Len()
llvmLen := llvm.ConstInt(c.uintptrType, uint64(length), false)
if high.IsNil() {
high = llvmLen

8
testdata/slice.go предоставленный
Просмотреть файл

@ -1,5 +1,7 @@
package main
type MySlice [32]byte
func main() {
l := 5
foo := []int{1, 2, 4, 5}
@ -89,6 +91,12 @@ func main() {
print(" ", n)
}
println()
// Verify the fix in https://github.com/aykevl/tinygo/pull/119
var unnamed [32]byte
var named MySlice
assert(len(unnamed[:]) == 32)
assert(len(named[:]) == 32)
}
func printslice(name string, s []int) {