Lua tidy-up to reduce delta against esp32 branch.
These should hopefully be completely uncontentious changes. There is still a delta against the esp32 branch, but to harmonise that requires a bit more work. This commit includes: - Some LUA_USE_xxx #ifdef changes, since in many ways the ESP32 is closer to a host build than an ESP8266 build. - A bunch of warnings tidy-ups. - A couple of readability/maintainability improvements (e.g. LROT_END definition using named member initialisation, prototype declarations moved to header file(s)).
This commit is contained in:
parent
d2f08f54d2
commit
80a12780ae
|
@ -24,7 +24,7 @@
|
||||||
** model but changing `fputs' to put the strings at a proper place
|
** model but changing `fputs' to put the strings at a proper place
|
||||||
** (a console window or a log file, for instance).
|
** (a console window or a log file, for instance).
|
||||||
*/
|
*/
|
||||||
#ifdef LUA_CROSS_COMPILER
|
#if defined(LUA_USE_ESP8266)
|
||||||
#undef puts
|
#undef puts
|
||||||
#define puts(s) printf("%s",s)
|
#define puts(s) printf("%s",s)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -248,6 +248,7 @@ static int stripdebug (lua_State *L, Proto *f, int level) {
|
||||||
f->packedlineinfo = luaM_freearray(L, f->packedlineinfo, sizepackedlineinfo, unsigned char);
|
f->packedlineinfo = luaM_freearray(L, f->packedlineinfo, sizepackedlineinfo, unsigned char);
|
||||||
len += sizepackedlineinfo;
|
len += sizepackedlineinfo;
|
||||||
}
|
}
|
||||||
|
// fall-through
|
||||||
case 1:
|
case 1:
|
||||||
f->locvars = luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar);
|
f->locvars = luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar);
|
||||||
f->upvalues = luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *);
|
f->upvalues = luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *);
|
||||||
|
@ -501,7 +502,7 @@ static Instruction symbexec (const Proto *pt, int lastpc, int reg) {
|
||||||
case OP_FORLOOP:
|
case OP_FORLOOP:
|
||||||
case OP_FORPREP:
|
case OP_FORPREP:
|
||||||
checkreg(pt, a+3);
|
checkreg(pt, a+3);
|
||||||
/* go through */
|
/* fall-through */
|
||||||
case OP_JMP: {
|
case OP_JMP: {
|
||||||
int dest = pc+1+b;
|
int dest = pc+1+b;
|
||||||
/* not full check and jump is forward and do not skip `lastpc'? */
|
/* not full check and jump is forward and do not skip `lastpc'? */
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
* process.
|
* process.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static char *flashAddr;
|
static const char *flashAddr;
|
||||||
static uint32_t flashSize;
|
static uint32_t flashSize;
|
||||||
static uint32_t flashAddrPhys;
|
static uint32_t flashAddrPhys;
|
||||||
static uint32_t flashSector;
|
static uint32_t flashSector;
|
||||||
|
@ -106,20 +106,20 @@ LUA_API void dumpStrings(lua_State *L) {
|
||||||
* writes are suppressed if the global writeToFlash is false. This is used in
|
* writes are suppressed if the global writeToFlash is false. This is used in
|
||||||
* phase I where the pass is used to size the structures in flash.
|
* phase I where the pass is used to size the structures in flash.
|
||||||
*/
|
*/
|
||||||
static char *flashPosition(void){
|
static const char *flashPosition(void){
|
||||||
return flashAddr + curOffset;
|
return flashAddr + curOffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char *flashSetPosition(uint32_t offset){
|
static const char *flashSetPosition(uint32_t offset){
|
||||||
NODE_DBG("flashSetPosition(%04x)\n", offset);
|
NODE_DBG("flashSetPosition(%04x)\n", offset);
|
||||||
curOffset = offset;
|
curOffset = offset;
|
||||||
return flashPosition();
|
return flashPosition();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static char *flashBlock(const void* b, size_t size) {
|
static const char *flashBlock(const void* b, size_t size) {
|
||||||
void *cur = flashPosition();
|
const void *cur = flashPosition();
|
||||||
NODE_DBG("flashBlock((%04x),%p,%04x)\n", curOffset,b,size);
|
NODE_DBG("flashBlock((%04x),%p,%04x)\n", curOffset,b,size);
|
||||||
lua_assert(ALIGN_BITS(b) == 0 && ALIGN_BITS(size) == 0);
|
lua_assert(ALIGN_BITS(b) == 0 && ALIGN_BITS(size) == 0);
|
||||||
platform_flash_write(b, flashAddrPhys+curOffset, size);
|
platform_flash_write(b, flashAddrPhys+curOffset, size);
|
||||||
|
@ -137,6 +137,10 @@ static void flashErase(uint32_t start, uint32_t end){
|
||||||
platform_flash_erase_sector( flashSector + i );
|
platform_flash_erase_sector( flashSector + i );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int loadLFS (lua_State *L);
|
||||||
|
static int loadLFSgc (lua_State *L);
|
||||||
|
static void procFirstPass (void);
|
||||||
|
|
||||||
/* =====================================================================================
|
/* =====================================================================================
|
||||||
* luaN_init() is exported via lflash.h.
|
* luaN_init() is exported via lflash.h.
|
||||||
* The first is the startup hook used in lstate.c and the last two are
|
* The first is the startup hook used in lstate.c and the last two are
|
||||||
|
@ -171,7 +175,7 @@ LUAI_FUNC void luaN_init (lua_State *L) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((fh->flash_sig & (~FLASH_SIG_ABSOLUTE)) != FLASH_SIG ) {
|
if ((fh->flash_sig & (~FLASH_SIG_ABSOLUTE)) != FLASH_SIG ) {
|
||||||
NODE_ERR("Flash sig not correct: 0x%08x vs 0x%08x\n",
|
NODE_ERR("LFS sig not correct: 0x%x vs expected 0x%x\n",
|
||||||
fh->flash_sig & (~FLASH_SIG_ABSOLUTE), FLASH_SIG);
|
fh->flash_sig & (~FLASH_SIG_ABSOLUTE), FLASH_SIG);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -208,6 +212,7 @@ LUALIB_API void luaL_lfsreload (lua_State *L) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do a protected call of loadLFS.
|
* Do a protected call of loadLFS.
|
||||||
*
|
*
|
||||||
|
@ -346,13 +351,13 @@ static void put_byte (uint8_t value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint8_t recall_byte (unsigned offset) {
|
static uint8_t recall_byte (uint32_t offset) {
|
||||||
if(offset > DICTIONARY_WINDOW || offset >= out->ndx)
|
if(offset > DICTIONARY_WINDOW || offset >= out->ndx)
|
||||||
flash_error("invalid dictionary offset on inflate");
|
flash_error("invalid dictionary offset on inflate");
|
||||||
/* ndx starts at 1. Need relative to 0 */
|
/* ndx starts at 1. Need relative to 0 */
|
||||||
unsigned n = out->ndx - offset;
|
uint32_t n = out->ndx - offset;
|
||||||
unsigned pos = n % WRITE_BLOCKSIZE;
|
uint32_t pos = n % WRITE_BLOCKSIZE;
|
||||||
unsigned blockNo = out->ndx / WRITE_BLOCKSIZE - n / WRITE_BLOCKSIZE;
|
uint32_t blockNo = out->ndx / WRITE_BLOCKSIZE - n / WRITE_BLOCKSIZE;
|
||||||
return out->block[blockNo]->byte[pos];
|
return out->block[blockNo]->byte[pos];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -386,7 +391,7 @@ void procFirstPass (void) {
|
||||||
fh->flash_size > flashSize ||
|
fh->flash_size > flashSize ||
|
||||||
out->flagsLen != 1 + (out->flashLen/WORDSIZE - 1) / BITS_PER_WORD)
|
out->flagsLen != 1 + (out->flashLen/WORDSIZE - 1) / BITS_PER_WORD)
|
||||||
flash_error("LFS length mismatch");
|
flash_error("LFS length mismatch");
|
||||||
out->flags = luaM_newvector(out->L, out->flagsLen, unsigned);
|
out->flags = luaM_newvector(out->L, out->flagsLen, uint32_t);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update running CRC */
|
/* update running CRC */
|
||||||
|
@ -412,7 +417,7 @@ void procSecondPass (void) {
|
||||||
(out->flashLen % WRITE_BLOCKSIZE) / WORDSIZE :
|
(out->flashLen % WRITE_BLOCKSIZE) / WORDSIZE :
|
||||||
WRITE_BLOCKSIZE / WORDSIZE;
|
WRITE_BLOCKSIZE / WORDSIZE;
|
||||||
uint32_t *buf = (uint32_t *) out->buffer.byte;
|
uint32_t *buf = (uint32_t *) out->buffer.byte;
|
||||||
uint32_t flags = 0;
|
uint32_t flags = 0;
|
||||||
/*
|
/*
|
||||||
* Relocate all the addresses tagged in out->flags. This can't be done in
|
* Relocate all the addresses tagged in out->flags. This can't be done in
|
||||||
* place because the out->blocks are still in use as dictionary content so
|
* place because the out->blocks are still in use as dictionary content so
|
||||||
|
@ -423,7 +428,7 @@ void procSecondPass (void) {
|
||||||
if ((i&31)==0)
|
if ((i&31)==0)
|
||||||
flags = out->flags[out->flagsNdx++];
|
flags = out->flags[out->flagsNdx++];
|
||||||
if (flags&1)
|
if (flags&1)
|
||||||
buf[i] = WORDSIZE*buf[i] + cast(uint32_t, flashAddr);
|
buf[i] = WORDSIZE*buf[i] + cast(uint32_t, flashAddr); // mapped, not phys
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* On first block, set the flash_sig has the in progress bit set and this
|
* On first block, set the flash_sig has the in progress bit set and this
|
||||||
|
@ -468,7 +473,7 @@ static int loadLFS (lua_State *L) {
|
||||||
in->len = vfs_size(in->fd);
|
in->len = vfs_size(in->fd);
|
||||||
if (in->len <= 200 || /* size of an empty luac output */
|
if (in->len <= 200 || /* size of an empty luac output */
|
||||||
vfs_lseek(in->fd, in->len-4, VFS_SEEK_SET) != in->len-4 ||
|
vfs_lseek(in->fd, in->len-4, VFS_SEEK_SET) != in->len-4 ||
|
||||||
vfs_read(in->fd, &out->len, sizeof(unsigned)) != sizeof(unsigned))
|
vfs_read(in->fd, &out->len, sizeof(uint32_t)) != sizeof(uint32_t))
|
||||||
flash_error("read error on LFS image file");
|
flash_error("read error on LFS image file");
|
||||||
vfs_lseek(in->fd, 0, VFS_SEEK_SET);
|
vfs_lseek(in->fd, 0, VFS_SEEK_SET);
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ static void save (LexState *ls, int c) {
|
||||||
|
|
||||||
|
|
||||||
void luaX_init (lua_State *L) {
|
void luaX_init (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -359,5 +359,6 @@ LROT_END(math, NULL, 0)
|
||||||
** Open math library
|
** Open math library
|
||||||
*/
|
*/
|
||||||
LUALIB_API int luaopen_math (lua_State *L) {
|
LUALIB_API int luaopen_math (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,7 @@ LUALIB_API int luaL_posttask( lua_State* L, int prio ) { // [-1, +0, -]
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
LUALIB_API int luaL_posttask( lua_State* L, int prio ) {
|
LUALIB_API int luaL_posttask( lua_State* L, int prio ) {
|
||||||
|
(void)L; (void)prio;
|
||||||
return 0;
|
return 0;
|
||||||
} /* Dummy stub on host */
|
} /* Dummy stub on host */
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -45,9 +45,11 @@
|
||||||
static ROTable_entry LOCK_IN_SECTION(s) rt ## _entries[] = {
|
static ROTable_entry LOCK_IN_SECTION(s) rt ## _entries[] = {
|
||||||
#define LROT_END(rt,mt,f) {NULL, LRO_NILVAL} }; \
|
#define LROT_END(rt,mt,f) {NULL, LRO_NILVAL} }; \
|
||||||
const ROTable rt ## _ROTable = { \
|
const ROTable rt ## _ROTable = { \
|
||||||
(GCObject *)1, LUA_TROTABLE, LROT_MARKED, \
|
.next = (GCObject *)1, .tt = LUA_TROTABLE, .marked = LROT_MARKED, \
|
||||||
cast(lu_byte, ~(f)), (sizeof(rt ## _entries)/sizeof(ROTable_entry)) - 1, \
|
.flags = cast(lu_byte, ~(f)), \
|
||||||
cast(Table *, mt), cast(ROTable_entry *, rt ## _entries) };
|
.lsizenode = (sizeof(rt ## _entries)/sizeof(ROTable_entry)) - 1, \
|
||||||
|
.metatable = cast(Table *, mt), \
|
||||||
|
.entry = cast(ROTable_entry *, rt ## _entries) };
|
||||||
#define LROT_BREAK(rt) };
|
#define LROT_BREAK(rt) };
|
||||||
|
|
||||||
#define LROT_MASK(m) cast(lu_byte, 1<<TM_ ## m)
|
#define LROT_MASK(m) cast(lu_byte, 1<<TM_ ## m)
|
||||||
|
@ -65,10 +67,9 @@
|
||||||
#define LROT_MASK_NEWINDEX LROT_MASK(NEWINDEX)
|
#define LROT_MASK_NEWINDEX LROT_MASK(NEWINDEX)
|
||||||
#define LROT_MASK_GC_INDEX (LROT_MASK_GC | LROT_MASK_INDEX)
|
#define LROT_MASK_GC_INDEX (LROT_MASK_GC | LROT_MASK_INDEX)
|
||||||
|
|
||||||
/* Maximum length of a rotable name and of a string key*/
|
#define LUA_MAX_ROTABLE_NAME 32 /* Maximum length of a rotable name and of a string key*/
|
||||||
|
|
||||||
#ifdef LUA_CORE
|
#ifdef LUA_CORE
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -619,6 +619,7 @@ static int ll_seeall (lua_State *L) {
|
||||||
|
|
||||||
static void setpath (lua_State *L, const char *fieldname, const char *envname,
|
static void setpath (lua_State *L, const char *fieldname, const char *envname,
|
||||||
const char *def) {
|
const char *def) {
|
||||||
|
(void)envname;
|
||||||
const char *path = NULL; /* getenv(envname) not used in NodeMCU */;
|
const char *path = NULL; /* getenv(envname) not used in NodeMCU */;
|
||||||
if (path == NULL) /* no environment variable? */
|
if (path == NULL) /* no environment variable? */
|
||||||
lua_pushstring(L, def); /* use default */
|
lua_pushstring(L, def); /* use default */
|
||||||
|
|
|
@ -68,10 +68,7 @@ int luaO_log2 (unsigned int x) {
|
||||||
while (x >= 256) { l += 8; x >>= 8; }
|
while (x >= 256) { l += 8; x >>= 8; }
|
||||||
return l + log_2[x];
|
return l + log_2[x];
|
||||||
#else
|
#else
|
||||||
/* Use Normalization Shift Amount Unsigned: 0x1=>31 up to 0xffffffff =>0
|
return 31 - __builtin_clz(x);
|
||||||
* See Xtensa Instruction Set Architecture (ISA) Refman P 462 */
|
|
||||||
asm volatile ("nsau %0, %1;" :"=r"(x) : "r"(x));
|
|
||||||
return 31 - x;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
#define LUA_TUPVAL (LAST_TAG+2)
|
#define LUA_TUPVAL (LAST_TAG+2)
|
||||||
#define LUA_TDEADKEY (LAST_TAG+3)
|
#define LUA_TDEADKEY (LAST_TAG+3)
|
||||||
|
|
||||||
#ifdef LUA_USE_ESP
|
#ifdef LUA_USE_ESP8266
|
||||||
/*
|
/*
|
||||||
** force aligned access to critical fields in Flash-based structures
|
** force aligned access to critical fields in Flash-based structures
|
||||||
** wo is the offset of aligned word in bytes 0,4,8,..
|
** wo is the offset of aligned word in bytes 0,4,8,..
|
||||||
|
|
|
@ -336,6 +336,7 @@ static Node *find_prev_node(Node *mp, Node *next) {
|
||||||
** (colliding node is in its main position), moving node goes to an empty position.
|
** (colliding node is in its main position), moving node goes to an empty position.
|
||||||
*/
|
*/
|
||||||
static int move_node (lua_State *L, Table *t, Node *node) {
|
static int move_node (lua_State *L, Table *t, Node *node) {
|
||||||
|
(void)L;
|
||||||
Node *mp = mainposition(t, key2tval(node));
|
Node *mp = mainposition(t, key2tval(node));
|
||||||
/* if node is in it's main position, don't need to move node. */
|
/* if node is in it's main position, don't need to move node. */
|
||||||
if (mp == node) return 1;
|
if (mp == node) return 1;
|
||||||
|
@ -374,6 +375,7 @@ static int move_node (lua_State *L, Table *t, Node *node) {
|
||||||
|
|
||||||
|
|
||||||
static int move_number (lua_State *L, Table *t, Node *node) {
|
static int move_number (lua_State *L, Table *t, Node *node) {
|
||||||
|
(void)L;
|
||||||
int key;
|
int key;
|
||||||
lua_Number n = nvalue(key2tval(node));
|
lua_Number n = nvalue(key2tval(node));
|
||||||
lua_number2int(key, n);
|
lua_number2int(key, n);
|
||||||
|
|
|
@ -277,5 +277,6 @@ LROT_BEGIN(tab_funcs, NULL, 0)
|
||||||
LROT_END(tab_funcs, NULL, 0)
|
LROT_END(tab_funcs, NULL, 0)
|
||||||
|
|
||||||
LUALIB_API int luaopen_table (lua_State *L) {
|
LUALIB_API int luaopen_table (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,9 @@ LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
|
||||||
#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
|
#define luaL_loadbuffer(L,s,sz,n) luaL_loadbufferx(L,s,sz,n,NULL)
|
||||||
|
|
||||||
|
|
||||||
|
#define luaL_checkfunction(L,n) luaL_checktype(L, (n), LUA_TFUNCTION);
|
||||||
|
#define luaL_checktable(L,n) luaL_checktype(L, (n), LUA_TTABLE);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** {======================================================
|
** {======================================================
|
||||||
** Generic Buffer manipulation
|
** Generic Buffer manipulation
|
||||||
|
@ -227,7 +230,8 @@ LUALIB_API void (luaL_openlib) (lua_State *L, const char *libname,
|
||||||
|
|
||||||
/* print a string */
|
/* print a string */
|
||||||
#if !defined(lua_writestring)
|
#if !defined(lua_writestring)
|
||||||
#ifdef LUA_USE_ESP8266
|
#ifdef LUA_USE_ESP
|
||||||
|
void output_redirect(const char *str, size_t l);
|
||||||
#define lua_writestring(s,l) output_redirect((s),(l))
|
#define lua_writestring(s,l) output_redirect((s),(l))
|
||||||
#else
|
#else
|
||||||
#define lua_writestring(s,l) fwrite((s), sizeof(char), (l), stdout)
|
#define lua_writestring(s,l) fwrite((s), sizeof(char), (l), stdout)
|
||||||
|
@ -290,11 +294,8 @@ LUALIB_API int (luaL_pushlfsdts) (lua_State *L);
|
||||||
LUALIB_API void (luaL_lfsreload) (lua_State *L);
|
LUALIB_API void (luaL_lfsreload) (lua_State *L);
|
||||||
LUALIB_API int (luaL_posttask) (lua_State* L, int prio);
|
LUALIB_API int (luaL_posttask) (lua_State* L, int prio);
|
||||||
LUALIB_API int (luaL_pcallx) (lua_State *L, int narg, int nres);
|
LUALIB_API int (luaL_pcallx) (lua_State *L, int narg, int nres);
|
||||||
|
|
||||||
#define luaL_pushlfsmodule(l) lua_pushlfsfunc(L)
|
#define luaL_pushlfsmodule(l) lua_pushlfsfunc(L)
|
||||||
|
|
||||||
/* }============================================================ */
|
/* }============================================================ */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -464,6 +464,7 @@ LROT_BEGIN(dblib, NULL, 0)
|
||||||
LROT_END(dblib, NULL, 0)
|
LROT_END(dblib, NULL, 0)
|
||||||
|
|
||||||
LUAMOD_API int luaopen_debug (lua_State *L) {
|
LUAMOD_API int luaopen_debug (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -272,6 +272,7 @@ static int stripdebug (lua_State *L, Proto *f, int level) {
|
||||||
f->lineinfo = luaM_freearray(L, f->lineinfo, f->sizelineinfo);
|
f->lineinfo = luaM_freearray(L, f->lineinfo, f->sizelineinfo);
|
||||||
len += f->sizelineinfo;
|
len += f->sizelineinfo;
|
||||||
}
|
}
|
||||||
|
// fall-through
|
||||||
case 1:
|
case 1:
|
||||||
for (i=0; i<f->sizeupvalues; i++)
|
for (i=0; i<f->sizeupvalues; i++)
|
||||||
f->upvalues[i].name = NULL;
|
f->upvalues[i].name = NULL;
|
||||||
|
|
|
@ -394,6 +394,7 @@ LROT_END(mathlib, NULL, 0)
|
||||||
** Open math library
|
** Open math library
|
||||||
*/
|
*/
|
||||||
LUAMOD_API int luaopen_math (lua_State *L) {
|
LUAMOD_API int luaopen_math (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -296,7 +296,7 @@ LUA_API void lua_getlfsconfig (lua_State *L, int *config) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LUA_API int (lua_pushlfsindex) (lua_State *L) {
|
LUA_API int lua_pushlfsindex(lua_State *L) {
|
||||||
lua_lock(L);
|
lua_lock(L);
|
||||||
setobj2n(L, L->top, &G(L)->LFStable);
|
setobj2n(L, L->top, &G(L)->LFStable);
|
||||||
api_incr_top(L);
|
api_incr_top(L);
|
||||||
|
@ -309,7 +309,7 @@ LUA_API int (lua_pushlfsindex) (lua_State *L) {
|
||||||
* one upvalue that must be the set to the _ENV variable when its closure is
|
* one upvalue that must be the set to the _ENV variable when its closure is
|
||||||
* created, and as such this parallels some ldo.c processing.
|
* created, and as such this parallels some ldo.c processing.
|
||||||
*/
|
*/
|
||||||
LUA_API int (lua_pushlfsfunc) (lua_State *L) {
|
LUA_API int lua_pushlfsfunc(lua_State *L) {
|
||||||
lua_lock(L);
|
lua_lock(L);
|
||||||
const TValue *t = &G(L)->LFStable;
|
const TValue *t = &G(L)->LFStable;
|
||||||
if (ttisstring(L->top-1) && ttistable(t)) {
|
if (ttisstring(L->top-1) && ttistable(t)) {
|
||||||
|
@ -341,7 +341,7 @@ LUA_API int (lua_pushlfsfunc) (lua_State *L) {
|
||||||
/*
|
/*
|
||||||
* Return an array of functions in LFS
|
* Return an array of functions in LFS
|
||||||
*/
|
*/
|
||||||
LUALIB_API int (luaL_pushlfsmodules) (lua_State *L) {
|
LUALIB_API int luaL_pushlfsmodules(lua_State *L) {
|
||||||
int i = 1;
|
int i = 1;
|
||||||
if (lua_pushlfsindex(L) == LUA_TNIL)
|
if (lua_pushlfsindex(L) == LUA_TNIL)
|
||||||
return 0; /* return nil if LFS not loaded */
|
return 0; /* return nil if LFS not loaded */
|
||||||
|
@ -357,7 +357,7 @@ LUALIB_API int (luaL_pushlfsmodules) (lua_State *L) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LUALIB_API int (luaL_pushlfsdts) (lua_State *L) {
|
LUALIB_API int luaL_pushlfsdts(lua_State *L) {
|
||||||
int config[5];
|
int config[5];
|
||||||
lua_getlfsconfig(L, config);
|
lua_getlfsconfig(L, config);
|
||||||
lua_pushinteger(L, config[4]);
|
lua_pushinteger(L, config[4]);
|
||||||
|
@ -427,7 +427,9 @@ static const char *readF (lua_State *L, void *ud, size_t *size) {
|
||||||
|
|
||||||
static void eraseLFS(LFSflashState *F) {
|
static void eraseLFS(LFSflashState *F) {
|
||||||
lu_int32 i;
|
lu_int32 i;
|
||||||
|
#ifdef LUA_USE_ESP
|
||||||
printf("\nErasing LFS from flash addr 0x%06x", F->addrPhys);
|
printf("\nErasing LFS from flash addr 0x%06x", F->addrPhys);
|
||||||
|
#endif
|
||||||
unlockFlashWrite();
|
unlockFlashWrite();
|
||||||
for (i = 0; i < F->size; i += FLASH_PAGE_SIZE) {
|
for (i = 0; i < F->size; i += FLASH_PAGE_SIZE) {
|
||||||
size_t *f = cast(size_t *, F->addr + i/sizeof(*f));
|
size_t *f = cast(size_t *, F->addr + i/sizeof(*f));
|
||||||
|
@ -436,11 +438,13 @@ static void eraseLFS(LFSflashState *F) {
|
||||||
#ifdef LUA_USE_ESP
|
#ifdef LUA_USE_ESP
|
||||||
if (*f == ~0 && !memcmp(f, f + 1, FLASH_PAGE_SIZE - sizeof(*f)))
|
if (*f == ~0 && !memcmp(f, f + 1, FLASH_PAGE_SIZE - sizeof(*f)))
|
||||||
continue;
|
continue;
|
||||||
|
printf(".");
|
||||||
#endif
|
#endif
|
||||||
platform_flash_erase_sector(s);
|
platform_flash_erase_sector(s);
|
||||||
printf(".");
|
|
||||||
}
|
}
|
||||||
|
#ifdef LUA_USE_ESP
|
||||||
printf(" to 0x%06x\n", F->addrPhys + F->size-1);
|
printf(" to 0x%06x\n", F->addrPhys + F->size-1);
|
||||||
|
#endif
|
||||||
flush_icache(F);
|
flush_icache(F);
|
||||||
lockFlashWrite();
|
lockFlashWrite();
|
||||||
}
|
}
|
||||||
|
@ -623,7 +627,6 @@ LUALIB_API void luaL_lfsreload (lua_State *L) {
|
||||||
|
|
||||||
|
|
||||||
#ifdef LUA_USE_ESP
|
#ifdef LUA_USE_ESP
|
||||||
extern void lua_main(void);
|
|
||||||
/*
|
/*
|
||||||
** Task callback handler. Uses luaN_call to do a protected call with full traceback
|
** Task callback handler. Uses luaN_call to do a protected call with full traceback
|
||||||
*/
|
*/
|
||||||
|
@ -634,7 +637,7 @@ static void do_task (platform_task_param_t task_fn_ref, uint8_t prio) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (prio < LUA_TASK_LOW|| prio > LUA_TASK_HIGH)
|
if (prio < LUA_TASK_LOW|| prio > LUA_TASK_HIGH)
|
||||||
luaL_error(L, "invalid posk task");
|
luaL_error(L, "invalid post task");
|
||||||
/* Pop the CB func from the Reg */
|
/* Pop the CB func from the Reg */
|
||||||
lua_rawgeti(L, LUA_REGISTRYINDEX, (int) task_fn_ref);
|
lua_rawgeti(L, LUA_REGISTRYINDEX, (int) task_fn_ref);
|
||||||
luaL_checktype(L, -1, LUA_TFUNCTION);
|
luaL_checktype(L, -1, LUA_TFUNCTION);
|
||||||
|
@ -662,7 +665,7 @@ LUALIB_API int luaL_posttask ( lua_State* L, int prio ) { // [-1, +0, -]
|
||||||
}
|
}
|
||||||
return task_fn_ref;
|
return task_fn_ref;
|
||||||
} else {
|
} else {
|
||||||
return luaL_error(L, "invalid posk task");
|
return luaL_error(L, "invalid post task");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -670,6 +673,7 @@ LUALIB_API int luaL_posttask ( lua_State* L, int prio ) { // [-1, +0, -]
|
||||||
** Task execution isn't supported on HOST builds so returns a -1 status
|
** Task execution isn't supported on HOST builds so returns a -1 status
|
||||||
*/
|
*/
|
||||||
LUALIB_API int luaL_posttask( lua_State* L, int prio ) { // [-1, +0, -]
|
LUALIB_API int luaL_posttask( lua_State* L, int prio ) { // [-1, +0, -]
|
||||||
|
(void)L; (void)prio;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -421,7 +421,7 @@ static int ll_loadlib (lua_State *L) {
|
||||||
** =======================================================
|
** =======================================================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef LUA_USE_ESP8266
|
#ifdef LUA_USE_ESP
|
||||||
#define file_t int
|
#define file_t int
|
||||||
#undef fopen
|
#undef fopen
|
||||||
#undef fclose
|
#undef fclose
|
||||||
|
|
|
@ -63,13 +63,7 @@ int luaO_fb2int (int x) {
|
||||||
** Computes ceil(log2(x))
|
** Computes ceil(log2(x))
|
||||||
*/
|
*/
|
||||||
int luaO_ceillog2 (unsigned int x) {
|
int luaO_ceillog2 (unsigned int x) {
|
||||||
#ifdef LUA_USE_ESP
|
#ifdef LUA_CROSS_COMPILER
|
||||||
/* Use Normalization Shift Amount Unsigned: 0x1=>31 up to 0xffffffff =>0
|
|
||||||
* See Xtensa Instruction Set Architecture (ISA) Refman P 462 */
|
|
||||||
x--;
|
|
||||||
asm volatile ("nsau %0, %1;" :"=r"(x) : "r"(x));
|
|
||||||
return 32 - x;
|
|
||||||
#else
|
|
||||||
static const lu_byte log_2[256] = { /* log_2[i] = ceil(log2(i - 1)) */
|
static const lu_byte log_2[256] = { /* log_2[i] = ceil(log2(i - 1)) */
|
||||||
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||||
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
||||||
|
@ -84,6 +78,8 @@ int luaO_ceillog2 (unsigned int x) {
|
||||||
x--;
|
x--;
|
||||||
while (x >= 256) { l += 8; x >>= 8; }
|
while (x >= 256) { l += 8; x >>= 8; }
|
||||||
return l + log_2[x];
|
return l + log_2[x];
|
||||||
|
#else
|
||||||
|
return (x == 1) ? 0 : 32 - __builtin_clz(x - 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
** wo is the offset of aligned word in bytes 0,4,8,..
|
** wo is the offset of aligned word in bytes 0,4,8,..
|
||||||
** bo is the field within the word in bits 0..31
|
** bo is the field within the word in bits 0..31
|
||||||
*/
|
*/
|
||||||
#ifdef LUA_USE_ESP
|
#if defined(LUA_USE_ESP8266)
|
||||||
#define GET_BYTE_FN(name,t,wo,bo) \
|
#define GET_BYTE_FN(name,t,wo,bo) \
|
||||||
static inline lu_int32 get ## name(const void *o) { \
|
static inline lu_int32 get ## name(const void *o) { \
|
||||||
lu_int32 res; /* extract named field */ \
|
lu_int32 res; /* extract named field */ \
|
||||||
|
|
|
@ -42,12 +42,15 @@
|
||||||
** created; the seed is used to randomize hashes.
|
** created; the seed is used to randomize hashes.
|
||||||
*/
|
*/
|
||||||
#if !defined(luai_makeseed)
|
#if !defined(luai_makeseed)
|
||||||
#if defined(LUA_USE_ESP)
|
#if defined(LUA_USE_ESP8266)
|
||||||
static inline unsigned int luai_makeseed(void) {
|
static inline unsigned int luai_makeseed(void) {
|
||||||
unsigned int r;
|
unsigned int r;
|
||||||
asm volatile("rsr %0, ccount" : "=r"(r));
|
asm volatile("rsr %0, ccount" : "=r"(r));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
#elif defined(LUA_USE_ESP)
|
||||||
|
# include "esp_random.h"
|
||||||
|
# define luai_makeseed() esp_random()
|
||||||
#else
|
#else
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#define luai_makeseed() cast(unsigned int, time(NULL))
|
#define luai_makeseed() cast(unsigned int, time(NULL))
|
||||||
|
|
|
@ -438,6 +438,7 @@ LROT_BEGIN(tab_funcs, NULL, 0)
|
||||||
LROT_END(tab_funcs, NULL, 0)
|
LROT_END(tab_funcs, NULL, 0)
|
||||||
|
|
||||||
LUAMOD_API int luaopen_table (lua_State *L) {
|
LUAMOD_API int luaopen_table (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -465,6 +465,8 @@ struct lua_Debug {
|
||||||
struct CallInfo *i_ci; /* active function */
|
struct CallInfo *i_ci; /* active function */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int lua_main(void);
|
||||||
|
|
||||||
/* }====================================================================== */
|
/* }====================================================================== */
|
||||||
|
|
||||||
/* NodeMCU extensions to the standard API */
|
/* NodeMCU extensions to the standard API */
|
||||||
|
|
|
@ -258,6 +258,7 @@ LROT_END(utf8, LROT_TABLEREF(utf8_meta), 0)
|
||||||
|
|
||||||
|
|
||||||
LUAMOD_API int luaopen_utf8 (lua_State *L) {
|
LUAMOD_API int luaopen_utf8 (lua_State *L) {
|
||||||
|
(void)L;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue