From 1aa4f69b51a92dc4f5c9d35925b9977d35650679 Mon Sep 17 00:00:00 2001
From: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Thu, 17 Jul 2014 10:53:37 -0300
Subject: new type 'lua_Ctx' for continuation-function contexts (to allow type
 to be configurable)

---
 lapi.c     |  6 +++---
 lbaselib.c |  6 +++---
 ldo.c      |  5 +++--
 lstate.h   |  4 ++--
 ltests.c   |  6 +++---
 lua.h      | 60 ++++++++++++++++++++++++++++++++----------------------------
 luaconf.h  | 18 +++++++++++++++++-
 7 files changed, 63 insertions(+), 42 deletions(-)

diff --git a/lapi.c b/lapi.c
index eeba6867..be6955a1 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.c,v 2.224 2014/07/15 21:14:49 roberto Exp roberto $
+** $Id: lapi.c,v 2.225 2014/07/15 21:26:50 roberto Exp roberto $
 ** Lua API
 ** See Copyright Notice in lua.h
 */
@@ -859,7 +859,7 @@ LUA_API void lua_setuservalue (lua_State *L, int idx) {
 	"results from function overflow current stack size")
 
 
-LUA_API void lua_callk (lua_State *L, int nargs, int nresults, int ctx,
+LUA_API void lua_callk (lua_State *L, int nargs, int nresults, lua_Ctx ctx,
                         lua_KFunction k) {
   StkId func;
   lua_lock(L);
@@ -899,7 +899,7 @@ static void f_call (lua_State *L, void *ud) {
 
 
 LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
-                        int ctx, lua_KFunction k) {
+                        lua_Ctx ctx, lua_KFunction k) {
   struct CallS c;
   int status;
   ptrdiff_t func;
diff --git a/lbaselib.c b/lbaselib.c
index ea71660b..47d6793a 100644
--- a/lbaselib.c
+++ b/lbaselib.c
@@ -1,5 +1,5 @@
 /*
-** $Id: lbaselib.c,v 1.290 2014/06/30 19:48:08 roberto Exp roberto $
+** $Id: lbaselib.c,v 1.291 2014/07/16 13:56:59 roberto Exp roberto $
 ** Basic library
 ** See Copyright Notice in lua.h
 */
@@ -344,7 +344,7 @@ static int luaB_load (lua_State *L) {
 /* }====================================================== */
 
 
-static int dofilecont (lua_State *L, int d1, int d2) {
+static int dofilecont (lua_State *L, int d1, lua_Ctx d2) {
   (void)d1;  (void)d2;  /* only to match 'lua_Kfunction' prototype */
   return lua_gettop(L) - 1;
 }
@@ -395,7 +395,7 @@ static int luaB_select (lua_State *L) {
 ** 'extra' values (where 'extra' is exactly the number of items to be
 ** ignored).
 */
-static int finishpcall (lua_State *L, int status, int extra) {
+static int finishpcall (lua_State *L, int status, lua_Ctx extra) {
   if (status != LUA_OK && status != LUA_YIELD) {  /* error? */
     lua_pushboolean(L, 0);  /* first result (false) */
     lua_pushvalue(L, -2);  /* error message */
diff --git a/ldo.c b/ldo.c
index 1a49ceda..a9daeadb 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 2.124 2014/06/30 19:48:08 roberto Exp roberto $
+** $Id: ldo.c,v 2.125 2014/07/15 21:26:50 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -593,7 +593,8 @@ LUA_API int lua_isyieldable (lua_State *L) {
 }
 
 
-LUA_API int lua_yieldk (lua_State *L, int nresults, int ctx, lua_KFunction k) {
+LUA_API int lua_yieldk (lua_State *L, int nresults, lua_Ctx ctx,
+                        lua_KFunction k) {
   CallInfo *ci = L->ci;
   luai_userstateyield(L, nresults);
   lua_lock(L);
diff --git a/lstate.h b/lstate.h
index 47dddcec..8b7031f8 100644
--- a/lstate.h
+++ b/lstate.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 2.106 2014/06/10 19:18:50 roberto Exp roberto $
+** $Id: lstate.h,v 2.107 2014/06/12 19:07:30 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -71,7 +71,7 @@ typedef struct CallInfo {
     struct {  /* only for C functions */
       lua_KFunction k;  /* continuation in case of yields */
       ptrdiff_t old_errfunc;
-      int ctx;  /* context info. in case of yields */
+      lua_Ctx ctx;  /* context info. in case of yields */
     } c;
   } u;
 } CallInfo;
diff --git a/ltests.c b/ltests.c
index d6474335..803b3be2 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.c,v 2.174 2014/06/26 17:25:11 roberto Exp roberto $
+** $Id: ltests.c,v 2.175 2014/07/16 14:51:36 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -981,7 +981,7 @@ static void pushcode (lua_State *L, int code) {
 
 
 static int testC (lua_State *L);
-static int Cfunck (lua_State *L, int status, int ctx);
+static int Cfunck (lua_State *L, int status, lua_Ctx ctx);
 
 /*
 ** arithmetic operation encoding for 'arith' instruction
@@ -1318,7 +1318,7 @@ static int Cfunc (lua_State *L) {
 }
 
 
-static int Cfunck (lua_State *L, int status, int ctx) {
+static int Cfunck (lua_State *L, int status, lua_Ctx ctx) {
   pushcode(L, status);
   lua_setglobal(L, "status");
   lua_pushinteger(L, ctx);
diff --git a/lua.h b/lua.h
index 812df98f..f79da4bc 100644
--- a/lua.h
+++ b/lua.h
@@ -1,5 +1,5 @@
 /*
-** $Id: lua.h,v 1.307 2014/06/10 17:41:38 roberto Exp roberto $
+** $Id: lua.h,v 1.308 2014/06/26 17:25:11 roberto Exp roberto $
 ** Lua - A Scripting Language
 ** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
 ** See Copyright Notice at the end of this file
@@ -53,30 +53,6 @@
 
 typedef struct lua_State lua_State;
 
-/*
-** Type for C functions registered with Lua
-*/
-typedef int (*lua_CFunction) (lua_State *L);
-
-/*
-** Type for continuation functions
-*/
-typedef int (*lua_KFunction) (lua_State *L, int status, int ctx);
-
-
-/*
-** functions that read/write blocks when loading/dumping Lua chunks
-*/
-typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
-
-typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud);
-
-
-/*
-** prototype for memory-allocation functions
-*/
-typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
-
 
 /*
 ** basic types
@@ -117,6 +93,34 @@ typedef LUA_INTEGER lua_Integer;
 /* unsigned integer type */
 typedef LUA_UNSIGNED lua_Unsigned;
 
+/* type for continuation-function contexts */
+typedef LUA_CTXT lua_Ctx;
+
+
+/*
+** Type for C functions registered with Lua
+*/
+typedef int (*lua_CFunction) (lua_State *L);
+
+/*
+** Type for continuation functions
+*/
+typedef int (*lua_KFunction) (lua_State *L, int status, lua_Ctx ctx);
+
+
+/*
+** Type for functions that read/write blocks when loading/dumping Lua chunks
+*/
+typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
+
+typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud);
+
+
+/*
+** Type for memory-allocation functions
+*/
+typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
+
 
 
 /*
@@ -262,12 +266,12 @@ LUA_API void  (lua_setuservalue) (lua_State *L, int idx);
 /*
 ** 'load' and 'call' functions (load and run Lua code)
 */
-LUA_API void  (lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
+LUA_API void  (lua_callk) (lua_State *L, int nargs, int nresults, lua_Ctx ctx,
                            lua_KFunction k);
 #define lua_call(L,n,r)		lua_callk(L, (n), (r), 0, NULL)
 
 LUA_API int   (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
-                            int ctx, lua_KFunction k);
+                            lua_Ctx ctx, lua_KFunction k);
 #define lua_pcall(L,n,r,f)	lua_pcallk(L, (n), (r), (f), 0, NULL)
 
 LUA_API int   (lua_load) (lua_State *L, lua_Reader reader, void *dt,
@@ -280,7 +284,7 @@ LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip);
 /*
 ** coroutine functions
 */
-LUA_API int  (lua_yieldk) (lua_State *L, int nresults, int ctx,
+LUA_API int  (lua_yieldk) (lua_State *L, int nresults, lua_Ctx ctx,
                            lua_KFunction k);
 #define lua_yield(L,n)		lua_yieldk(L, (n), 0, NULL)
 LUA_API int  (lua_resume) (lua_State *L, lua_State *from, int narg);
diff --git a/luaconf.h b/luaconf.h
index 65ee1eff..b477319b 100644
--- a/luaconf.h
+++ b/luaconf.h
@@ -1,5 +1,5 @@
 /*
-** $Id: luaconf.h,v 1.208 2014/06/24 17:02:00 roberto Exp roberto $
+** $Id: luaconf.h,v 1.209 2014/06/26 18:30:27 roberto Exp roberto $
 ** Configuration file for Lua
 ** See Copyright Notice in lua.h
 */
@@ -254,6 +254,22 @@
 #define LUAI_MAXSHORTLEN        40
 
 
+/*
+@@ LUA_CTXT is the type of the context ('ctx') for continuation functions.
+@@ It must be a numerical type; Lua will use 'intptr_t' if available.
+*/
+#if defined (LUA_USE_C99)
+#include <stdint.h>
+#if defined (INTPTR_MAX)  /* even in C99 this type is optional */
+#define LUA_CTXT	intptr_t
+#endif
+#endif
+
+#if !defined(LUA_CTXT)
+/* default definition (the nearest thing to 'intptr_t' in C89) */
+#define LUA_CTXT	ptrdiff_t
+#endif
+
 
 /*
 ** {==================================================================
-- 
cgit v1.2.3-55-g6feb