aboutsummaryrefslogtreecommitdiff
path: root/src/lua/common/je_lua_function.cpp
blob: e202d9930efc29b3d74f7cf550809bc858350317 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include "je_lua_function.h"

namespace JinEngine
{
    namespace Lua
    {

        LuaFunc::LuaFunc(lua_State* L)
            : mLuaFunc(nullptr)
            , mParams(0)
            , mL(L)
        {
        }

        LuaFunc::~LuaFunc()
        {
            delete mLuaFunc;
            for (auto p : mParams)
                delete p;
        }

        void LuaFunc::setFunc(int i, uint nresults )
        {
            if (mLuaFunc != nullptr)
                delete mLuaFunc;
            mLuaFunc = new LuaRef(mL, i);
            mNResults = nresults;
        }

        void LuaFunc::pushParam(int i)
        {
            mParams.push_back(new LuaRef(mL, i));
        }

        uint LuaFunc::call()
        {
            mLuaFunc->push();
            for (auto p : mParams)
                p->push();
            luax_call(mL, mParams.size(), mNResults);
            return mNResults;
        }

    }
}