From 7cf4067167069f9c715bf89d78e72fb0435f2cd4 Mon Sep 17 00:00:00 2001 From: Sasha Koshka Date: Wed, 29 Nov 2023 20:31:07 -0500 Subject: [PATCH] Generator grabs slice type from proper place --- generator/function_test.go | 12 ++++++++---- generator/location-expression.go | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/generator/function_test.go b/generator/function_test.go index 5d0d9d4..c066d08 100644 --- a/generator/function_test.go +++ b/generator/function_test.go @@ -6,10 +6,14 @@ func TestFunction (test *testing.T) { testString (test, ` `, -` -[puts string:*Byte]:I32 -[main] = loop [puts 'home sweet'] - +`[puts string:*Byte]:I32 +[read fd:Int buf:*Byte count:Index]:Index +[main argc:I32 argv:**Byte] = { + buffer:8:Byte + [read 1 [@[.buffer 0]] 7] + [. buffer 7] = 0 + [puts [@[.buffer 0]]] +} `) } // [write 1 (* 72 101 108 108 111 114 108 100 0) 7] diff --git a/generator/location-expression.go b/generator/location-expression.go index a9a35a2..ef3e7de 100644 --- a/generator/location-expression.go +++ b/generator/location-expression.go @@ -106,7 +106,7 @@ func (this *generator) generateSubscriptLoc (subscript *entity.Subscript) (llvm. var elementType entity.Type var dataAddress llvm.Value - sourceType := analyzer.ReduceToBase(subscript.Type()) + sourceType := analyzer.ReduceToBase(subscript.Slice.Type()) switch sourceType := sourceType.(type) { case *entity.TypeSlice: irSourceType, err := this.generateType(sourceType)