compiler: allow slicing arrays of a named type
Этот коммит содержится в:
родитель
873c1c3b4d
коммит
f44dff6f59
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) {
|
switch typ := expr.X.Type().Underlying().(type) {
|
||||||
case *types.Pointer: // pointer to array
|
case *types.Pointer: // pointer to array
|
||||||
// slice an 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)
|
llvmLen := llvm.ConstInt(c.uintptrType, uint64(length), false)
|
||||||
if high.IsNil() {
|
if high.IsNil() {
|
||||||
high = llvmLen
|
high = llvmLen
|
||||||
|
|
8
testdata/slice.go
предоставленный
8
testdata/slice.go
предоставленный
|
@ -1,5 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
|
type MySlice [32]byte
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
l := 5
|
l := 5
|
||||||
foo := []int{1, 2, 4, 5}
|
foo := []int{1, 2, 4, 5}
|
||||||
|
@ -89,6 +91,12 @@ func main() {
|
||||||
print(" ", n)
|
print(" ", n)
|
||||||
}
|
}
|
||||||
println()
|
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) {
|
func printslice(name string, s []int) {
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче