From: Steven Barth Date: Thu, 20 Nov 2008 15:15:50 +0000 (+0000) Subject: Integrate core C implementation X-Git-Tag: 0.9.0~965 X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=commitdiff_plain;h=9a203c52dd9bcbdb11bc86b99ea61027eec7cc26;hp=40639695cba1c2169cefff827178dd81c47cfbc1 Integrate core C implementation --- diff --git a/libs/core/Makefile b/libs/core/Makefile index f7fac7740..7c9b3d794 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 ea1fccbc1..ffab60cb0 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 001273b55..9f56c432b 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");