compiler: support i16 uintptr in cap builtin
Этот коммит содержится в:
родитель
f967c6919a
коммит
a965882a34
1 изменённых файлов: 7 добавлений и 2 удалений
|
@ -1095,16 +1095,21 @@ func (c *Compiler) parseBuiltin(frame *Frame, args []ssa.Value, callName string,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return llvm.Value{}, err
|
return llvm.Value{}, err
|
||||||
}
|
}
|
||||||
|
var llvmCap llvm.Value
|
||||||
switch args[0].Type().(type) {
|
switch args[0].Type().(type) {
|
||||||
case *types.Chan:
|
case *types.Chan:
|
||||||
// Channel. Buffered channels haven't been implemented yet so always
|
// Channel. Buffered channels haven't been implemented yet so always
|
||||||
// return 0.
|
// return 0.
|
||||||
return llvm.ConstInt(c.intType, 0, false), nil
|
llvmCap = llvm.ConstInt(c.intType, 0, false)
|
||||||
case *types.Slice:
|
case *types.Slice:
|
||||||
return c.builder.CreateExtractValue(value, 2, "cap"), nil
|
llvmCap = c.builder.CreateExtractValue(value, 2, "cap")
|
||||||
default:
|
default:
|
||||||
return llvm.Value{}, c.makeError(pos, "todo: cap: unknown type")
|
return llvm.Value{}, c.makeError(pos, "todo: cap: unknown type")
|
||||||
}
|
}
|
||||||
|
if c.targetData.TypeAllocSize(llvmCap.Type()) < c.targetData.TypeAllocSize(c.intType) {
|
||||||
|
llvmCap = c.builder.CreateZExt(llvmCap, c.intType, "len.int")
|
||||||
|
}
|
||||||
|
return llvmCap, nil
|
||||||
case "close":
|
case "close":
|
||||||
return llvm.Value{}, c.emitChanClose(frame, args[0])
|
return llvm.Value{}, c.emitChanClose(frame, args[0])
|
||||||
case "complex":
|
case "complex":
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче