Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Apr 23, 2010, 11:46:11 AM (14 years ago)
Author:
rgrieder
Message:

Activated Strict.lua
That means you can no longer assign to or access an undeclared global variable on function scope.
Declaring: either assign anything to the variable (including nil) on file scope
or use the function global("myVar", "myVar2", …, "myVarN") (mind the strings!)

Location:
code/branches/gamestates3
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • code/branches/gamestates3/data/lua/Strict.lua

    r6746 r6774  
    1313end
    1414
    15 __STRICT = false
     15__STRICT = true
    1616mt.__declared = {}
    1717
    1818mt.__newindex = function (t, n, v)
    19   if __STRICT and not mt.__declared[n] then
    20     local d = debug.getinfo(2, "S")
    21     local w = d and d.what or "C"
    22     if w ~= "main" and w ~= "C" then
    23       error("assign to undeclared variable '"..n.."'", 2)
     19  if not mt.__declared[n] then
     20    if __STRICT then
     21      local d = debug.getinfo(2, "S")
     22      local w = d and d.what or "C"
     23      if w ~= "main" and w ~= "C" then
     24        error("Assigning to undeclared global variable '"..n.."'", 2)
     25      end
    2426    end
    2527    mt.__declared[n] = true
     
    2931 
    3032mt.__index = function (t, n)
    31   if not mt.__declared[n] and debug.getinfo(2, "S").what ~= "C" then
    32     error("variable '"..n.."' is not declared", 2)
     33  if not mt.__declared[n] then
     34    local d = debug.getinfo(2, "S")
     35    local w = d and d.what or "C"
     36    if w ~= "C" then
     37      error("Global variable '"..n.."' was not declared", 2)
     38    else
     39      mt.__declared[n] = true
     40    end
    3341  end
    3442  return rawget(t, n)
     
    3644
    3745function global(...)
    38    for _, v in ipairs{...} do mt.__declared[v] = true end
     46  for _, v in ipairs{...} do
     47    mt.__declared[v] = true
     48  end
    3949end
  • code/branches/gamestates3/src/libraries/core/LuaState.cc

    r6763 r6774  
    5353    DeclareToluaInterface(Core);
    5454
    55     LuaState::LuaState()
     55    LuaState::LuaState(bool bStrict)
    5656        : bIsRunning_(false)
    5757        , includeParseFunction_(NULL)
     
    8282        tolua_pushusertype(luaState_, static_cast<void*>(this), "orxonox::LuaState");
    8383        lua_setglobal(luaState_, "luaState");
     84
     85        // Strict.lua ensures that global variables are not declared inside a function scope
     86        if (bStrict)
     87        {
     88            if (!this->doFile("Strict.lua"))
     89                ThrowException(InitialisationFailed, "Running Strict.lua failed");
     90        }
     91        else
     92        {
     93            // Add dummy function for declaring global variables
     94            this->doString("global = function(...) end");
     95        }
    8496
    8597        // Parse init script
  • code/branches/gamestates3/src/libraries/core/LuaState.h

    r6763 r6774  
    6868    { // tolua_export
    6969    public:
    70         LuaState();
     70        LuaState(bool bStrict = true);
    7171        ~LuaState();
    7272
  • code/branches/gamestates3/src/orxonox/items/MultiStateEngine.cc

    r6709 r6774  
    6161            this->defEngineSndNormal_->setLooping(true);
    6262            this->defEngineSndBoost_->setLooping(true);
    63             this->lua_ = new LuaState();
     63            this->lua_ = new LuaState(false);
    6464        }
    6565        else
Note: See TracChangeset for help on using the changeset viewer.