From 41a50ec336e0878eafe7f0e3bfdf8ecbc39a7a99 Mon Sep 17 00:00:00 2001 From: Ayke van Laethem Date: Thu, 6 Sep 2018 10:52:36 +0200 Subject: [PATCH] compiler: simplify code for builtin len() Strings and slices now have the len element at the same location. --- compiler.go | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/compiler.go b/compiler.go index 6bd063bd..80a50a13 100644 --- a/compiler.go +++ b/compiler.go @@ -1550,14 +1550,10 @@ func (c *Compiler) parseBuiltin(frame *Frame, args []ssa.Value, callName string) if err != nil { return llvm.Value{}, err } - switch typ := args[0].Type().(type) { - case *types.Basic: - switch typ.Kind() { - case types.String: - return c.builder.CreateExtractValue(value, 1, "len"), nil - default: - return llvm.Value{}, errors.New("todo: len: unknown basic type") - } + switch args[0].Type().(type) { + case *types.Basic, *types.Slice: + // string or slice + return c.builder.CreateExtractValue(value, 1, "len"), nil case *types.Map: indices := []llvm.Value{ llvm.ConstInt(llvm.Int32Type(), 0, false), @@ -1565,8 +1561,6 @@ func (c *Compiler) parseBuiltin(frame *Frame, args []ssa.Value, callName string) } ptr := c.builder.CreateGEP(value, indices, "lenptr") return c.builder.CreateLoad(ptr, "len"), nil - case *types.Slice: - return c.builder.CreateExtractValue(value, 1, "len"), nil default: return llvm.Value{}, errors.New("todo: len: unknown type") }