Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: nacltoons/bindings/basic.lua

Issue 12634010: [nacltoons] Add Makefile for building lua bindings. (Closed) Base URL: https://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: nacltoons/bindings/basic.lua
diff --git a/nacltoons/bindings/basic.lua b/nacltoons/bindings/basic.lua
new file mode 100644
index 0000000000000000000000000000000000000000..c4e1440e3d7d99561bf52609745c5cb5a1fb8915
--- /dev/null
+++ b/nacltoons/bindings/basic.lua
@@ -0,0 +1,86 @@
+--- Helper script for generating bindings with tolua++
+-- This file is based on the file of the same name which ships
+-- as part of cocos2dx.
+-- example usage:
+-- tolua++ -L basic.lua -o LuaCocos2d.cpp Cocos2d.pkg
+
+_is_functions = _is_functions or {}
+_to_functions = _to_functions or {}
+_push_functions = _push_functions or {}
+
+local CCObjectTypes = {
+ "CCPhysicsSprite",
+}
+
+-- register CCObject types
+for i = 1, #CCObjectTypes do
+ _push_functions[CCObjectTypes[i]] = "toluafix_pushusertype_ccobject"
+end
+
+-- register LUA_FUNCTION, LUA_TABLE, LUA_HANDLE type
+_to_functions["LUA_FUNCTION"] = "toluafix_ref_function"
+_is_functions["LUA_FUNCTION"] = "toluafix_isfunction"
+_to_functions["LUA_TABLE"] = "toluafix_totable"
+_is_functions["LUA_TABLE"] = "toluafix_istable"
+
+local toWrite = {}
+local currentString = ''
+local out
+local WRITE, OUTPUT = write, output
noelallen1 2013/03/08 21:52:01 What are these circular definitions?
Sam Clegg 2013/03/08 22:22:53 What this code is doing is intercepting/overwritin
+
+function output(s)
+ out = _OUTPUT
+ output = OUTPUT -- restore
+ output(s)
+end
+
+function write(a)
+ if out == _OUTPUT then
+ currentString = currentString .. a
+ if string.sub(currentString,-1) == '\n' then
+ toWrite[#toWrite+1] = currentString
+ currentString = ''
+ end
+ else
+ WRITE(a)
noelallen1 2013/03/08 21:52:01 what is the difference between write and WRITE?
Sam Clegg 2013/03/08 22:22:53 WRITE() is the original write() as defined by tolu
+ end
+end
+
+function post_output_hook(package)
+ local result = table.concat(toWrite)
+ local function replace(pattern, replacement)
+ local k = 0
+ local nxt, currentString = 1, ''
+ repeat
+ local s, e = string.find(result, pattern, nxt, true)
+ if e then
+ currentString = currentString .. string.sub(result, nxt, s-1) .. replacement
+ nxt = e + 1
+ k = k + 1
+ end
+ until not e
+ result = currentString..string.sub(result, nxt)
+ if k == 0 then print('Pattern not replaced', pattern) end
+ end
+
+ replace([[#ifndef __cplusplus
+#include "stdlib.h"
+#endif
+]],
+ [[// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#ifndef __cplusplus
+#include "stdlib.h"
+#endif
+]])
+
+ if string.find(result, 'toluafix_pushusertype_ccobject') then
+ replace([[toluafix_pushusertype_ccobject(tolua_S,(void*)tolua_ret]],
+ [[int nID = (tolua_ret) ? (int)tolua_ret->m_uID : -1;
+ int* pLuaID = (tolua_ret) ? &tolua_ret->m_nLuaID : NULL;
+ toluafix_pushusertype_ccobject(tolua_S, nID, pLuaID, (void*)tolua_ret]])
+ end
+
+ WRITE(result)
+end

Powered by Google App Engine
This is Rietveld 408576698