VE Lua Documentation

Press F to search!

__finalizeLuaBindings

Definition


-- @/lua/common/luaBinding.lua:195

function __finalizeLuaBindings(classes, luaVMname)
  if luaVMname ~= 'vlua' then
    for k, classtable in pairs(classes) do
      -- search for SimObject's metatables
      if k:byte(1) == 100 and classtable.isSubClassOf then -- d
        flattenObjectMetatable(classtable)
        -- create simobject metatable
        rawset(rawget(classtable, 1), "className", classtable.getClassName)
        if next(rawget(classtable, 2)) == nil and rawget(classtable, 3) == nil then
          rawset(rawget(classtable, 2), 1, 0)  -- disable newindex optimization when newindex table is empty
        end
        rawset(classtable, 4, classtable.getStaticDataFieldbyName)
        rawset(classtable, 5, classtable.getDynDataFieldbyName)
        rawset(classtable, 6, classtable.setStaticDataFieldbyName)
        rawset(classtable, 7, classtable.setDynDataFieldbyName)
        rawset(classtable, '__index', __simObjectIndex) -- new getter
        rawset(classtable, '__newindex', __simObjectNewIndex) -- new setter
      end
    end
  end

  for k, v in pairs(classes) do
    -- optimize metatables
    if rawget(v, 3) == nil then -- no super
      if next(rawget(v, 2)) == nil then -- no setters
        rawset(v, 2, nil)
        rawset(v, '__newindex', nil)
      end

      if next(rawget(v, 1)) == nil and rawget(v, '__index') ~= rawget(v, 1) then -- no getters
        local plainGetters = rawget(v, 1)
        if rawget(v, '__newindex') == nil then
          for f, getter in pairs(v) do
            if type(f) ~= 'number' then
              rawset(plainGetters, f, getter)
              if string.byte(f, 1) ~= 95 then
                rawset(v, f, nil)
              end
            end
          end
          plainGetters.__type = v.__type
        else
          for f, getter in pairs(v) do
            if type(f) ~= 'number' then
              rawset(plainGetters, f, getter)
            end
          end
        end
        rawset(v, '__index', plainGetters)
      end
    end
  end
end

Callers