From 9a203c52dd9bcbdb11bc86b99ea61027eec7cc26 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Thu, 20 Nov 2008 15:15:50 +0000 Subject: [PATCH] Integrate core C implementation --- libs/core/Makefile | 10 ++++++++++ libs/core/luasrc/util.lua | 8 ++++++++ libs/core/src/luci_cutil.c | 4 +++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/libs/core/Makefile b/libs/core/Makefile index f7fac7740e..7c9b3d794f 100644 --- a/libs/core/Makefile +++ b/libs/core/Makefile @@ -1,2 +1,12 @@ include ../../build/config.mk include ../../build/module.mk + +%.o: %.c + $(COMPILE) $(LUA_CFLAGS) $(FPIC) -c -o $@ $< + +compile: src/luci_cutil.o + mkdir -p dist$(LUCI_LIBRARYDIR) + $(LINK) $(SHLIB_FLAGS) -o dist$(LUCI_LIBRARYDIR)/cutil.so src/luci_cutil.o + +clean: luaclean + rm src/*.o \ No newline at end of file diff --git a/libs/core/luasrc/util.lua b/libs/core/luasrc/util.lua index ea1fccbc1c..ffab60cb07 100644 --- a/libs/core/luasrc/util.lua +++ b/libs/core/luasrc/util.lua @@ -31,6 +31,7 @@ local debug = require "debug" local ldebug = require "luci.debug" local string = require "string" local coroutine = require "coroutine" +local cutil = require "luci.cutil" local getmetatable, setmetatable = getmetatable, setmetatable local rawget, rawset, unpack = rawget, rawset, unpack @@ -44,6 +45,7 @@ module "luci.util" -- -- Pythonic string formatting extension -- +--[[ getmetatable("").__mod = function(a, b) if not b then return a @@ -53,6 +55,7 @@ getmetatable("").__mod = function(a, b) return a:format(b) end end +]]-- -- @@ -60,6 +63,7 @@ end -- -- Instantiates a class +--[[ local function _instantiate(class, ...) local inst = setmetatable({}, {__index = class}) @@ -69,6 +73,7 @@ local function _instantiate(class, ...) return inst end +]]-- --- Create a Class object (Python-style object model). -- The class object can be instantiated by calling itself. @@ -84,12 +89,15 @@ end -- @return A class object -- @see instanceof -- @see clone +--[[ function class(base) return setmetatable({}, { __call = _instantiate, __index = base }) end +]]-- +class = cutil.class --- Test whether the given object is an instance of the given class. -- @param object Object instance diff --git a/libs/core/src/luci_cutil.c b/libs/core/src/luci_cutil.c index 001273b552..9f56c432b1 100644 --- a/libs/core/src/luci_cutil.c +++ b/libs/core/src/luci_cutil.c @@ -91,11 +91,13 @@ static int luci__instantiate(lua_State *L) { /* luci.cutil.class(baseclass) */ static int luci_class(lua_State *L) { + int n = lua_gettop(L); + /* Create class */ lua_newtable(L); /* Create metatable and register parent class if any */ - if (lua_istable(L, 1)) { + if (n && lua_istable(L, 1)) { lua_createtable(L, 0, 2); lua_pushvalue(L, 1); lua_setfield(L, -2, "__index"); -- 2.30.2