Browse Source

Added tests for string reuse by the scanner

Roberto Ierusalimschy 4 years ago
parent
commit
59acd79c05
2 changed files with 25 additions and 1 deletions
  1. 1 1
      testes/errors.lua
  2. 24 0
      testes/literals.lua

+ 1 - 1
testes/errors.lua

@@ -241,7 +241,7 @@ do   -- named objects (field '__name')
       assert(o == x)
       return "ABC"
     end})
-    a, b, c = T.testC("pushint 10; Ltolstring -2; return 3", x)
+    local a, b, c = T.testC("pushint 10; Ltolstring -2; return 3", x)
     assert(a == x and b == 10 and c == "ABC")
   end
 end

+ 24 - 0
testes/literals.lua

@@ -208,6 +208,30 @@ a = nil
 b = nil
 
 
+do  -- reuse of long strings
+
+  -- get the address of a string
+  local function getadd (s) return string.format("%p", s) end
+
+  local s1 <const> = "01234567890123456789012345678901234567890123456789"
+  local s2 <const> = "01234567890123456789012345678901234567890123456789"
+  local s3 = "01234567890123456789012345678901234567890123456789"
+  local function foo() return s1 end
+  local function foo1() return s3 end
+  local function foo2()
+    return "01234567890123456789012345678901234567890123456789"
+  end
+  local a1 = getadd(s1)
+  assert(a1 == getadd(s2))
+  assert(a1 == getadd(foo()))
+  assert(a1 == getadd(foo1()))
+  assert(a1 == getadd(foo2()))
+
+  local sd = "0123456789" .. "0123456789012345678901234567890123456789"
+  assert(sd == s1 and getadd(sd) ~= a1)
+end
+
+
 -- testing line ends
 prog = [[
 a = 1        -- a comment