From 9bceadd0991f305e580cae77b809879b0d55a966 Mon Sep 17 00:00:00 2001 From: Dibyendu Majumdar Date: Thu, 18 Feb 2021 19:43:45 +0000 Subject: [PATCH] issue #211 since the up-value carries the type of the local variable, we can safely infer that the result of a get on array is a primitive type --- tests/language/ravi_tests1.ravi | 19 +++++++++++++++++++ tests/language/ravi_tests2.ravi | 17 ++++++++--------- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/tests/language/ravi_tests1.ravi b/tests/language/ravi_tests1.ravi index 0512729..1f5c8c9 100644 --- a/tests/language/ravi_tests1.ravi +++ b/tests/language/ravi_tests1.ravi @@ -1819,6 +1819,25 @@ end check(x, 'TOIARRAY', 'IARRAY_GET', 'LEN', 'ADD', 'RETURN', 'RETURN') print 'Test 86 OK' +-- An upvalue that is an array will yield a primitive value +-- issue #211 +do + local x: integer[] = {4} + local y: number[] = {4.2} + local function f() + return x[1] + 1, y[1] + 2.2 + end + check(f, 'GETTABUP', 'ADDII', 'GETTABUP', 'ADDFF', 'RETURN', 'RETURN') + local a,b = f() + assert(a == 5) + assert(b == 6.4) + compile(f) + a,b = f() + assert(a == 5) + assert(b == 6.4) +end +print 'Test 87 OK' + for k,v in pairs(opcodes_coverage) do diff --git a/tests/language/ravi_tests2.ravi b/tests/language/ravi_tests2.ravi index 17c4572..da59cdf 100644 --- a/tests/language/ravi_tests2.ravi +++ b/tests/language/ravi_tests2.ravi @@ -19,12 +19,11 @@ end print 'Ok' -- issue ---do --- local function f(x:integer[]) --- return function () --- return x[1][1] + 1 --- end --- end --- local x = f(table.intarray(3)) --- x() ---end +do + local x: integer[] = {4} + local y: number[] = {4.2} + local function f() + return x[1] + 1, y[1] + 2.2 + end + ravi.dumplua(f) +end