compiler: fix bug in for range loop over a named map type

Этот коммит содержится в:
Ayke van Laethem 2018-11-14 15:43:50 +01:00
родитель 9bddaae04a
коммит 6292a0fd2e
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: E97FF5335DFDFDED

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

@ -2450,11 +2450,11 @@ func (c *Compiler) parseExpr(frame *Frame, expr ssa.Value) (llvm.Value, error) {
if expr.IsString { if expr.IsString {
return c.createRuntimeCall("stringNext", []llvm.Value{llvmRangeVal, it}, "range.next"), nil return c.createRuntimeCall("stringNext", []llvm.Value{llvmRangeVal, it}, "range.next"), nil
} else { // map } else { // map
llvmKeyType, err := c.getLLVMType(rangeVal.Type().(*types.Map).Key()) llvmKeyType, err := c.getLLVMType(rangeVal.Type().Underlying().(*types.Map).Key())
if err != nil { if err != nil {
return llvm.Value{}, err return llvm.Value{}, err
} }
llvmValueType, err := c.getLLVMType(rangeVal.Type().(*types.Map).Elem()) llvmValueType, err := c.getLLVMType(rangeVal.Type().Underlying().(*types.Map).Elem())
if err != nil { if err != nil {
return llvm.Value{}, err return llvm.Value{}, err
} }