Selaa lähdekoodia

Bug: 'local function' can assign to '<const>' variables

Roberto Ierusalimschy 4 vuotta sitten
vanhempi
commit
6a0dace25a
2 muutettua tiedostoa jossa 3 lisäystä ja 0 poistoa
  1. 1 0
      lparser.c
  2. 2 0
      testes/locals.lua

+ 1 - 0
lparser.c

@@ -1785,6 +1785,7 @@ static void funcstat (LexState *ls, int line) {
   luaX_next(ls);  /* skip FUNCTION */
   ismethod = funcname(ls, &v);
   body(ls, &b, ismethod, line);
+  check_readonly(ls, &v);
   luaK_storevar(ls->fs, &v, &b);
   luaK_fixline(ls->fs, line);  /* definition "happens" in the first line */
 }

+ 2 - 0
testes/locals.lua

@@ -187,6 +187,8 @@ do   -- constants
   checkro("y", "local x, y <const>, z = 10, 20, 30; x = 11; y = 12")
   checkro("x", "local x <const>, y, z <const> = 10, 20, 30; x = 11")
   checkro("z", "local x <const>, y, z <const> = 10, 20, 30; y = 10; z = 11")
+  checkro("foo", "local foo <const> = 10; function foo() end")
+  checkro("foo", "local foo <const> = {}; function foo() end")
 
   checkro("z", [[
     local a, z <const>, b = 10;