aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Jin <dragon-fly@qq.com>2021-08-17 23:09:27 +0800
committerLi Jin <dragon-fly@qq.com>2021-08-17 23:09:27 +0800
commit38908616d0e08b72e6b00d18490ed917fa643e4f (patch)
tree4311b80a505f4c3819c8cb2c3c937296fef0356f
parent792e942f5269655ee03c48400999f3604b84396c (diff)
downloadyuescript-38908616d0e08b72e6b00d18490ed917fa643e4f.tar.gz
yuescript-38908616d0e08b72e6b00d18490ed917fa643e4f.tar.bz2
yuescript-38908616d0e08b72e6b00d18490ed917fa643e4f.zip
reset Yuescript version since it's a minor version with new feature. update Lua lib.
-rw-r--r--src/3rdParty/lua/lapi.c18
-rw-r--r--src/3rdParty/lua/lauxlib.c1
-rw-r--r--src/3rdParty/lua/lbaselib.c7
-rw-r--r--src/3rdParty/lua/lcode.c34
-rw-r--r--src/3rdParty/lua/ldebug.c48
-rw-r--r--src/3rdParty/lua/ldo.c60
-rw-r--r--src/3rdParty/lua/ldo.h15
-rw-r--r--src/3rdParty/lua/lobject.h2
-rw-r--r--src/3rdParty/lua/lopcodes.h21
-rw-r--r--src/3rdParty/lua/lparser.c22
-rw-r--r--src/3rdParty/lua/lstate.c2
-rw-r--r--src/3rdParty/lua/lstate.h2
-rw-r--r--src/3rdParty/lua/lstrlib.c17
-rw-r--r--src/3rdParty/lua/ltable.c16
-rw-r--r--src/3rdParty/lua/ltablib.c2
-rw-r--r--src/3rdParty/lua/lua.h4
-rw-r--r--src/3rdParty/lua/luaconf.h4
-rw-r--r--src/3rdParty/lua/lvm.c41
-rw-r--r--src/yuescript/yue_compiler.cpp2
19 files changed, 210 insertions, 108 deletions
diff --git a/src/3rdParty/lua/lapi.c b/src/3rdParty/lua/lapi.c
index f8f70cd..3467891 100644
--- a/src/3rdParty/lua/lapi.c
+++ b/src/3rdParty/lua/lapi.c
@@ -53,6 +53,10 @@ const char lua_ident[] =
53#define isupvalue(i) ((i) < LUA_REGISTRYINDEX) 53#define isupvalue(i) ((i) < LUA_REGISTRYINDEX)
54 54
55 55
56/*
57** Convert an acceptable index to a pointer to its respective value.
58** Non-valid indices return the special nil value 'G(L)->nilvalue'.
59*/
56static TValue *index2value (lua_State *L, int idx) { 60static TValue *index2value (lua_State *L, int idx) {
57 CallInfo *ci = L->ci; 61 CallInfo *ci = L->ci;
58 if (idx > 0) { 62 if (idx > 0) {
@@ -70,22 +74,26 @@ static TValue *index2value (lua_State *L, int idx) {
70 else { /* upvalues */ 74 else { /* upvalues */
71 idx = LUA_REGISTRYINDEX - idx; 75 idx = LUA_REGISTRYINDEX - idx;
72 api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large"); 76 api_check(L, idx <= MAXUPVAL + 1, "upvalue index too large");
73 if (ttislcf(s2v(ci->func))) /* light C function? */ 77 if (ttisCclosure(s2v(ci->func))) { /* C closure? */
74 return &G(L)->nilvalue; /* it has no upvalues */
75 else {
76 CClosure *func = clCvalue(s2v(ci->func)); 78 CClosure *func = clCvalue(s2v(ci->func));
77 return (idx <= func->nupvalues) ? &func->upvalue[idx-1] 79 return (idx <= func->nupvalues) ? &func->upvalue[idx-1]
78 : &G(L)->nilvalue; 80 : &G(L)->nilvalue;
79 } 81 }
82 else { /* light C function or Lua function (through a hook)?) */
83 api_check(L, ttislcf(s2v(ci->func)), "caller not a C function");
84 return &G(L)->nilvalue; /* no upvalues */
85 }
80 } 86 }
81} 87}
82 88
83 89/*
90** Convert a valid actual index (not a pseudo-index) to its address.
91*/
84static StkId index2stack (lua_State *L, int idx) { 92static StkId index2stack (lua_State *L, int idx) {
85 CallInfo *ci = L->ci; 93 CallInfo *ci = L->ci;
86 if (idx > 0) { 94 if (idx > 0) {
87 StkId o = ci->func + idx; 95 StkId o = ci->func + idx;
88 api_check(L, o < L->top, "unacceptable index"); 96 api_check(L, o < L->top, "invalid index");
89 return o; 97 return o;
90 } 98 }
91 else { /* non-positive index */ 99 else { /* non-positive index */
diff --git a/src/3rdParty/lua/lauxlib.c b/src/3rdParty/lua/lauxlib.c
index 94835ef..8ed1da1 100644
--- a/src/3rdParty/lua/lauxlib.c
+++ b/src/3rdParty/lua/lauxlib.c
@@ -881,6 +881,7 @@ LUALIB_API lua_Integer luaL_len (lua_State *L, int idx) {
881 881
882 882
883LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { 883LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) {
884 idx = lua_absindex(L,idx);
884 if (luaL_callmeta(L, idx, "__tostring")) { /* metafield? */ 885 if (luaL_callmeta(L, idx, "__tostring")) { /* metafield? */
885 if (!lua_isstring(L, -1)) 886 if (!lua_isstring(L, -1))
886 luaL_error(L, "'__tostring' must return a string"); 887 luaL_error(L, "'__tostring' must return a string");
diff --git a/src/3rdParty/lua/lbaselib.c b/src/3rdParty/lua/lbaselib.c
index 83ad306..fd6687e 100644
--- a/src/3rdParty/lua/lbaselib.c
+++ b/src/3rdParty/lua/lbaselib.c
@@ -261,6 +261,11 @@ static int luaB_next (lua_State *L) {
261} 261}
262 262
263 263
264static int pairscont (lua_State *L, int status, lua_KContext k) {
265 (void)L; (void)status; (void)k; /* unused */
266 return 3;
267}
268
264static int luaB_pairs (lua_State *L) { 269static int luaB_pairs (lua_State *L) {
265 luaL_checkany(L, 1); 270 luaL_checkany(L, 1);
266 if (luaL_getmetafield(L, 1, "__pairs") == LUA_TNIL) { /* no metamethod? */ 271 if (luaL_getmetafield(L, 1, "__pairs") == LUA_TNIL) { /* no metamethod? */
@@ -270,7 +275,7 @@ static int luaB_pairs (lua_State *L) {
270 } 275 }
271 else { 276 else {
272 lua_pushvalue(L, 1); /* argument 'self' to metamethod */ 277 lua_pushvalue(L, 1); /* argument 'self' to metamethod */
273 lua_call(L, 1, 3); /* get 3 values from metamethod */ 278 lua_callk(L, 1, 3, 0, pairscont); /* get 3 values from metamethod */
274 } 279 }
275 return 3; 280 return 3;
276} 281}
diff --git a/src/3rdParty/lua/lcode.c b/src/3rdParty/lua/lcode.c
index 80d975c..9cba24f 100644
--- a/src/3rdParty/lua/lcode.c
+++ b/src/3rdParty/lua/lcode.c
@@ -10,6 +10,7 @@
10#include "lprefix.h" 10#include "lprefix.h"
11 11
12 12
13#include <float.h>
13#include <limits.h> 14#include <limits.h>
14#include <math.h> 15#include <math.h>
15#include <stdlib.h> 16#include <stdlib.h>
@@ -580,24 +581,41 @@ static int stringK (FuncState *fs, TString *s) {
580 581
581/* 582/*
582** Add an integer to list of constants and return its index. 583** Add an integer to list of constants and return its index.
583** Integers use userdata as keys to avoid collision with floats with
584** same value; conversion to 'void*' is used only for hashing, so there
585** are no "precision" problems.
586*/ 584*/
587static int luaK_intK (FuncState *fs, lua_Integer n) { 585static int luaK_intK (FuncState *fs, lua_Integer n) {
588 TValue k, o; 586 TValue o;
589 setpvalue(&k, cast_voidp(cast_sizet(n)));
590 setivalue(&o, n); 587 setivalue(&o, n);
591 return addk(fs, &k, &o); 588 return addk(fs, &o, &o); /* use integer itself as key */
592} 589}
593 590
594/* 591/*
595** Add a float to list of constants and return its index. 592** Add a float to list of constants and return its index. Floats
593** with integral values need a different key, to avoid collision
594** with actual integers. To that, we add to the number its smaller
595** power-of-two fraction that is still significant in its scale.
596** For doubles, that would be 1/2^52.
597** (This method is not bulletproof: there may be another float
598** with that value, and for floats larger than 2^53 the result is
599** still an integer. At worst, this only wastes an entry with
600** a duplicate.)
596*/ 601*/
597static int luaK_numberK (FuncState *fs, lua_Number r) { 602static int luaK_numberK (FuncState *fs, lua_Number r) {
598 TValue o; 603 TValue o;
604 lua_Integer ik;
599 setfltvalue(&o, r); 605 setfltvalue(&o, r);
600 return addk(fs, &o, &o); /* use number itself as key */ 606 if (!luaV_flttointeger(r, &ik, F2Ieq)) /* not an integral value? */
607 return addk(fs, &o, &o); /* use number itself as key */
608 else { /* must build an alternative key */
609 const int nbm = l_floatatt(MANT_DIG);
610 const lua_Number q = l_mathop(ldexp)(1.0, -nbm + 1);
611 const lua_Number k = (ik == 0) ? q : r + r*q; /* new key */
612 TValue kv;
613 setfltvalue(&kv, k);
614 /* result is not an integral value, unless value is too large */
615 lua_assert(!luaV_flttointeger(k, &ik, F2Ieq) ||
616 l_mathop(fabs)(r) >= l_mathop(1e6));
617 return addk(fs, &kv, &o);
618 }
601} 619}
602 620
603 621
diff --git a/src/3rdParty/lua/ldebug.c b/src/3rdParty/lua/ldebug.c
index 1feaab2..433a875 100644
--- a/src/3rdParty/lua/ldebug.c
+++ b/src/3rdParty/lua/ldebug.c
@@ -675,9 +675,21 @@ static const char *getupvalname (CallInfo *ci, const TValue *o,
675} 675}
676 676
677 677
678static const char *formatvarinfo (lua_State *L, const char *kind,
679 const char *name) {
680 if (kind == NULL)
681 return ""; /* no information */
682 else
683 return luaO_pushfstring(L, " (%s '%s')", kind, name);
684}
685
686/*
687** Build a string with a "description" for the value 'o', such as
688** "variable 'x'" or "upvalue 'y'".
689*/
678static const char *varinfo (lua_State *L, const TValue *o) { 690static const char *varinfo (lua_State *L, const TValue *o) {
679 const char *name = NULL; /* to avoid warnings */
680 CallInfo *ci = L->ci; 691 CallInfo *ci = L->ci;
692 const char *name = NULL; /* to avoid warnings */
681 const char *kind = NULL; 693 const char *kind = NULL;
682 if (isLua(ci)) { 694 if (isLua(ci)) {
683 kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */ 695 kind = getupvalname(ci, o, &name); /* check whether 'o' is an upvalue */
@@ -685,26 +697,40 @@ static const char *varinfo (lua_State *L, const TValue *o) {
685 kind = getobjname(ci_func(ci)->p, currentpc(ci), 697 kind = getobjname(ci_func(ci)->p, currentpc(ci),
686 cast_int(cast(StkId, o) - (ci->func + 1)), &name); 698 cast_int(cast(StkId, o) - (ci->func + 1)), &name);
687 } 699 }
688 return (kind) ? luaO_pushfstring(L, " (%s '%s')", kind, name) : ""; 700 return formatvarinfo(L, kind, name);
689} 701}
690 702
691 703
692l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) { 704/*
705** Raise a type error
706*/
707static l_noret typeerror (lua_State *L, const TValue *o, const char *op,
708 const char *extra) {
693 const char *t = luaT_objtypename(L, o); 709 const char *t = luaT_objtypename(L, o);
694 luaG_runerror(L, "attempt to %s a %s value%s", op, t, varinfo(L, o)); 710 luaG_runerror(L, "attempt to %s a %s value%s", op, t, extra);
695} 711}
696 712
697 713
714/*
715** Raise a type error with "standard" information about the faulty
716** object 'o' (using 'varinfo').
717*/
718l_noret luaG_typeerror (lua_State *L, const TValue *o, const char *op) {
719 typeerror(L, o, op, varinfo(L, o));
720}
721
722
723/*
724** Raise an error for calling a non-callable object. Try to find
725** a name for the object based on the code that made the call
726** ('funcnamefromcode'); if it cannot get a name there, try 'varinfo'.
727*/
698l_noret luaG_callerror (lua_State *L, const TValue *o) { 728l_noret luaG_callerror (lua_State *L, const TValue *o) {
699 CallInfo *ci = L->ci; 729 CallInfo *ci = L->ci;
700 const char *name = NULL; /* to avoid warnings */ 730 const char *name = NULL; /* to avoid warnings */
701 const char *what = (isLua(ci)) ? funcnamefromcode(L, ci, &name) : NULL; 731 const char *kind = (isLua(ci)) ? funcnamefromcode(L, ci, &name) : NULL;
702 if (what != NULL) { 732 const char *extra = kind ? formatvarinfo(L, kind, name) : varinfo(L, o);
703 const char *t = luaT_objtypename(L, o); 733 typeerror(L, o, "call", extra);
704 luaG_runerror(L, "%s '%s' is not callable (a %s value)", what, name, t);
705 }
706 else
707 luaG_typeerror(L, o, "call");
708} 734}
709 735
710 736
diff --git a/src/3rdParty/lua/ldo.c b/src/3rdParty/lua/ldo.c
index 7135079..93fcbb1 100644
--- a/src/3rdParty/lua/ldo.c
+++ b/src/3rdParty/lua/ldo.c
@@ -474,26 +474,34 @@ void luaD_poscall (lua_State *L, CallInfo *ci, int nres) {
474 474
475 475
476/* 476/*
477** Prepare a function for a tail call, building its call info on top 477** In a tail call, move function and parameters to previous call frame.
478** of the current call info. 'narg1' is the number of arguments plus 1 478** (This is done only when no more errors can occur before entering the
479** (so that it includes the function itself). 479** new function, to keep debug information always consistent.)
480*/ 480*/
481void luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int narg1) { 481static void moveparams (lua_State *L, StkId prevf, StkId func) {
482 Proto *p = clLvalue(s2v(func))->p;
483 int fsize = p->maxstacksize; /* frame size */
484 int nfixparams = p->numparams;
485 int i; 482 int i;
486 for (i = 0; i < narg1; i++) /* move down function and arguments */ 483 for (i = 0; func + i < L->top; i++) /* move down function and arguments */
487 setobjs2s(L, ci->func + i, func + i); 484 setobjs2s(L, prevf + i, func + i);
488 checkstackGC(L, fsize); 485 L->top = prevf + i; /* correct top */
489 func = ci->func; /* moved-down function */ 486}
490 for (; narg1 <= nfixparams; narg1++) 487
491 setnilvalue(s2v(func + narg1)); /* complete missing arguments */ 488
492 ci->top = func + 1 + fsize; /* top for new function */ 489static CallInfo *prepCallInfo (lua_State *L, StkId func, int retdel,
493 lua_assert(ci->top <= L->stack_last); 490 int mask) {
494 ci->u.l.savedpc = p->code; /* starting point */ 491 CallInfo *ci;
495 ci->callstatus |= CIST_TAIL; 492 if (isdelta(retdel)) { /* tail call? */
496 L->top = func + narg1; /* set top */ 493 ci = L->ci; /* reuse stack frame */
494 ci->func -= retdel2delta(retdel); /* correct 'func' */
495 ci->callstatus |= mask | CIST_TAIL;
496 moveparams(L, ci->func, func);
497 }
498 else { /* regular call */
499 ci = L->ci = next_ci(L); /* new frame */
500 ci->func = func;
501 ci->nresults = retdel;
502 ci->callstatus = mask;
503 }
504 return ci;
497} 505}
498 506
499 507
@@ -504,8 +512,12 @@ void luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int narg1) {
504** to be executed, if it was a Lua function. Otherwise (a C function) 512** to be executed, if it was a Lua function. Otherwise (a C function)
505** returns NULL, with all the results on the stack, starting at the 513** returns NULL, with all the results on the stack, starting at the
506** original function position. 514** original function position.
515** For regular calls, 'delta1' is 0. For tail calls, 'delta1' is the
516** 'delta' (correction of base for vararg functions) plus 1, so that it
517** cannot be zero. Like 'moveparams', this correction can only be done
518** when no more errors can occur in the call.
507*/ 519*/
508CallInfo *luaD_precall (lua_State *L, StkId func, int nresults) { 520CallInfo *luaD_precall (lua_State *L, StkId func, int retdel) {
509 lua_CFunction f; 521 lua_CFunction f;
510 retry: 522 retry:
511 switch (ttypetag(s2v(func))) { 523 switch (ttypetag(s2v(func))) {
@@ -518,11 +530,8 @@ CallInfo *luaD_precall (lua_State *L, StkId func, int nresults) {
518 int n; /* number of returns */ 530 int n; /* number of returns */
519 CallInfo *ci; 531 CallInfo *ci;
520 checkstackGCp(L, LUA_MINSTACK, func); /* ensure minimum stack size */ 532 checkstackGCp(L, LUA_MINSTACK, func); /* ensure minimum stack size */
521 L->ci = ci = next_ci(L); 533 ci = prepCallInfo(L, func, retdel, CIST_C);
522 ci->nresults = nresults;
523 ci->callstatus = CIST_C;
524 ci->top = L->top + LUA_MINSTACK; 534 ci->top = L->top + LUA_MINSTACK;
525 ci->func = func;
526 lua_assert(ci->top <= L->stack_last); 535 lua_assert(ci->top <= L->stack_last);
527 if (l_unlikely(L->hookmask & LUA_MASKCALL)) { 536 if (l_unlikely(L->hookmask & LUA_MASKCALL)) {
528 int narg = cast_int(L->top - func) - 1; 537 int narg = cast_int(L->top - func) - 1;
@@ -542,12 +551,9 @@ CallInfo *luaD_precall (lua_State *L, StkId func, int nresults) {
542 int nfixparams = p->numparams; 551 int nfixparams = p->numparams;
543 int fsize = p->maxstacksize; /* frame size */ 552 int fsize = p->maxstacksize; /* frame size */
544 checkstackGCp(L, fsize, func); 553 checkstackGCp(L, fsize, func);
545 L->ci = ci = next_ci(L); 554 ci = prepCallInfo(L, func, retdel, 0);
546 ci->nresults = nresults;
547 ci->u.l.savedpc = p->code; /* starting point */ 555 ci->u.l.savedpc = p->code; /* starting point */
548 ci->top = func + 1 + fsize; 556 ci->top = func + 1 + fsize;
549 ci->func = func;
550 L->ci = ci;
551 for (; narg < nfixparams; narg++) 557 for (; narg < nfixparams; narg++)
552 setnilvalue(s2v(L->top++)); /* complete missing arguments */ 558 setnilvalue(s2v(L->top++)); /* complete missing arguments */
553 lua_assert(ci->top <= L->stack_last); 559 lua_assert(ci->top <= L->stack_last);
diff --git a/src/3rdParty/lua/ldo.h b/src/3rdParty/lua/ldo.h
index 6bf0ed8..49fbb49 100644
--- a/src/3rdParty/lua/ldo.h
+++ b/src/3rdParty/lua/ldo.h
@@ -49,6 +49,18 @@
49 luaD_checkstackaux(L, (fsize), luaC_checkGC(L), (void)0) 49 luaD_checkstackaux(L, (fsize), luaC_checkGC(L), (void)0)
50 50
51 51
52/*
53** 'luaD_precall' is used for regular calls, when it needs the
54** number of results, and in tail calls, when it needs the 'delta'
55** (correction of base for vararg functions). The argument 'retdel'
56** codes these two options. A number of results is represented by
57** itself, while a delta is represented by 'delta2retdel(delta)'
58*/
59#define delta2retdel(d) (-(d) + LUA_MULTRET - 1)
60#define retdel2delta(d) (-(d) + LUA_MULTRET - 1)
61#define isdelta(rd) ((rd) < LUA_MULTRET)
62
63
52/* type of protected functions, to be ran by 'runprotected' */ 64/* type of protected functions, to be ran by 'runprotected' */
53typedef void (*Pfunc) (lua_State *L, void *ud); 65typedef void (*Pfunc) (lua_State *L, void *ud);
54 66
@@ -58,8 +70,7 @@ LUAI_FUNC int luaD_protectedparser (lua_State *L, ZIO *z, const char *name,
58LUAI_FUNC void luaD_hook (lua_State *L, int event, int line, 70LUAI_FUNC void luaD_hook (lua_State *L, int event, int line,
59 int fTransfer, int nTransfer); 71 int fTransfer, int nTransfer);
60LUAI_FUNC void luaD_hookcall (lua_State *L, CallInfo *ci); 72LUAI_FUNC void luaD_hookcall (lua_State *L, CallInfo *ci);
61LUAI_FUNC void luaD_pretailcall (lua_State *L, CallInfo *ci, StkId func, int n); 73LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int retdel);
62LUAI_FUNC CallInfo *luaD_precall (lua_State *L, StkId func, int nResults);
63LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults); 74LUAI_FUNC void luaD_call (lua_State *L, StkId func, int nResults);
64LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults); 75LUAI_FUNC void luaD_callnoyield (lua_State *L, StkId func, int nResults);
65LUAI_FUNC void luaD_tryfuncTM (lua_State *L, StkId func); 76LUAI_FUNC void luaD_tryfuncTM (lua_State *L, StkId func);
diff --git a/src/3rdParty/lua/lobject.h b/src/3rdParty/lua/lobject.h
index 950bebb..a1b4554 100644
--- a/src/3rdParty/lua/lobject.h
+++ b/src/3rdParty/lua/lobject.h
@@ -112,7 +112,7 @@ typedef struct TValue {
112#define settt_(o,t) ((o)->tt_=(t)) 112#define settt_(o,t) ((o)->tt_=(t))
113 113
114 114
115/* main macro to copy values (from 'obj1' to 'obj2') */ 115/* main macro to copy values (from 'obj2' to 'obj1') */
116#define setobj(L,obj1,obj2) \ 116#define setobj(L,obj1,obj2) \
117 { TValue *io1=(obj1); const TValue *io2=(obj2); \ 117 { TValue *io1=(obj1); const TValue *io2=(obj2); \
118 io1->value_ = io2->value_; settt_(io1, io2->tt_); \ 118 io1->value_ = io2->value_; settt_(io1, io2->tt_); \
diff --git a/src/3rdParty/lua/lopcodes.h b/src/3rdParty/lua/lopcodes.h
index d6a47e5..7c27451 100644
--- a/src/3rdParty/lua/lopcodes.h
+++ b/src/3rdParty/lua/lopcodes.h
@@ -190,7 +190,8 @@ enum OpMode {iABC, iABx, iAsBx, iAx, isJ}; /* basic instruction formats */
190 190
191 191
192/* 192/*
193** grep "ORDER OP" if you change these enums 193** Grep "ORDER OP" if you change these enums. Opcodes marked with a (*)
194** has extra descriptions in the notes after the enumeration.
194*/ 195*/
195 196
196typedef enum { 197typedef enum {
@@ -203,7 +204,7 @@ OP_LOADF,/* A sBx R[A] := (lua_Number)sBx */
203OP_LOADK,/* A Bx R[A] := K[Bx] */ 204OP_LOADK,/* A Bx R[A] := K[Bx] */
204OP_LOADKX,/* A R[A] := K[extra arg] */ 205OP_LOADKX,/* A R[A] := K[extra arg] */
205OP_LOADFALSE,/* A R[A] := false */ 206OP_LOADFALSE,/* A R[A] := false */
206OP_LFALSESKIP,/*A R[A] := false; pc++ */ 207OP_LFALSESKIP,/*A R[A] := false; pc++ (*) */
207OP_LOADTRUE,/* A R[A] := true */ 208OP_LOADTRUE,/* A R[A] := true */
208OP_LOADNIL,/* A B R[A], R[A+1], ..., R[A+B] := nil */ 209OP_LOADNIL,/* A B R[A], R[A+1], ..., R[A+B] := nil */
209OP_GETUPVAL,/* A B R[A] := UpValue[B] */ 210OP_GETUPVAL,/* A B R[A] := UpValue[B] */
@@ -254,7 +255,7 @@ OP_BXOR,/* A B C R[A] := R[B] ~ R[C] */
254OP_SHL,/* A B C R[A] := R[B] << R[C] */ 255OP_SHL,/* A B C R[A] := R[B] << R[C] */
255OP_SHR,/* A B C R[A] := R[B] >> R[C] */ 256OP_SHR,/* A B C R[A] := R[B] >> R[C] */
256 257
257OP_MMBIN,/* A B C call C metamethod over R[A] and R[B] */ 258OP_MMBIN,/* A B C call C metamethod over R[A] and R[B] (*) */
258OP_MMBINI,/* A sB C k call C metamethod over R[A] and sB */ 259OP_MMBINI,/* A sB C k call C metamethod over R[A] and sB */
259OP_MMBINK,/* A B C k call C metamethod over R[A] and K[B] */ 260OP_MMBINK,/* A B C k call C metamethod over R[A] and K[B] */
260 261
@@ -280,7 +281,7 @@ OP_GTI,/* A sB k if ((R[A] > sB) ~= k) then pc++ */
280OP_GEI,/* A sB k if ((R[A] >= sB) ~= k) then pc++ */ 281OP_GEI,/* A sB k if ((R[A] >= sB) ~= k) then pc++ */
281 282
282OP_TEST,/* A k if (not R[A] == k) then pc++ */ 283OP_TEST,/* A k if (not R[A] == k) then pc++ */
283OP_TESTSET,/* A B k if (not R[B] == k) then pc++ else R[A] := R[B] */ 284OP_TESTSET,/* A B k if (not R[B] == k) then pc++ else R[A] := R[B] (*) */
284 285
285OP_CALL,/* A B C R[A], ... ,R[A+C-2] := R[A](R[A+1], ... ,R[A+B-1]) */ 286OP_CALL,/* A B C R[A], ... ,R[A+C-2] := R[A](R[A+1], ... ,R[A+B-1]) */
286OP_TAILCALL,/* A B C k return R[A](R[A+1], ... ,R[A+B-1]) */ 287OP_TAILCALL,/* A B C k return R[A](R[A+1], ... ,R[A+B-1]) */
@@ -315,6 +316,18 @@ OP_EXTRAARG/* Ax extra (larger) argument for previous opcode */
315 316
316/*=========================================================================== 317/*===========================================================================
317 Notes: 318 Notes:
319
320 (*) Opcode OP_LFALSESKIP is used to convert a condition to a boolean
321 value, in a code equivalent to (not cond ? false : true). (It
322 produces false and skips the next instruction producing true.)
323
324 (*) Opcodes OP_MMBIN and variants follow each arithmetic and
325 bitwise opcode. If the operation succeeds, it skips this next
326 opcode. Otherwise, this opcode calls the corresponding metamethod.
327
328 (*) Opcode OP_TESTSET is used in short-circuit expressions that need
329 both to jump and to produce a value, such as (a = b or c).
330
318 (*) In OP_CALL, if (B == 0) then B = top - A. If (C == 0), then 331 (*) In OP_CALL, if (B == 0) then B = top - A. If (C == 0), then
319 'top' is set to last_result+1, so next open instruction (OP_CALL, 332 'top' is set to last_result+1, so next open instruction (OP_CALL,
320 OP_RETURN*, OP_SETLIST) may use 'top'. 333 OP_RETURN*, OP_SETLIST) may use 'top'.
diff --git a/src/3rdParty/lua/lparser.c b/src/3rdParty/lua/lparser.c
index 284ef1f..3abe3d7 100644
--- a/src/3rdParty/lua/lparser.c
+++ b/src/3rdParty/lua/lparser.c
@@ -417,6 +417,17 @@ static void markupval (FuncState *fs, int level) {
417 417
418 418
419/* 419/*
420** Mark that current block has a to-be-closed variable.
421*/
422static void marktobeclosed (FuncState *fs) {
423 BlockCnt *bl = fs->bl;
424 bl->upval = 1;
425 bl->insidetbc = 1;
426 fs->needclose = 1;
427}
428
429
430/*
420** Find a variable with the given name 'n'. If it is an upvalue, add 431** Find a variable with the given name 'n'. If it is an upvalue, add
421** this upvalue into all intermediate functions. If it is a global, set 432** this upvalue into all intermediate functions. If it is a global, set
422** 'var' as 'void' as a flag. 433** 'var' as 'void' as a flag.
@@ -1599,7 +1610,7 @@ static void forlist (LexState *ls, TString *indexname) {
1599 line = ls->linenumber; 1610 line = ls->linenumber;
1600 adjust_assign(ls, 4, explist(ls, &e), &e); 1611 adjust_assign(ls, 4, explist(ls, &e), &e);
1601 adjustlocalvars(ls, 4); /* control variables */ 1612 adjustlocalvars(ls, 4); /* control variables */
1602 markupval(fs, fs->nactvar); /* last control var. must be closed */ 1613 marktobeclosed(fs); /* last control var. must be closed */
1603 luaK_checkstack(fs, 3); /* extra space to call generator */ 1614 luaK_checkstack(fs, 3); /* extra space to call generator */
1604 forbody(ls, base, line, nvars - 4, 1); 1615 forbody(ls, base, line, nvars - 4, 1);
1605} 1616}
@@ -1703,11 +1714,9 @@ static int getlocalattribute (LexState *ls) {
1703} 1714}
1704 1715
1705 1716
1706static void checktoclose (LexState *ls, int level) { 1717static void checktoclose (FuncState *fs, int level) {
1707 if (level != -1) { /* is there a to-be-closed variable? */ 1718 if (level != -1) { /* is there a to-be-closed variable? */
1708 FuncState *fs = ls->fs; 1719 marktobeclosed(fs);
1709 markupval(fs, level + 1);
1710 fs->bl->insidetbc = 1; /* in the scope of a to-be-closed variable */
1711 luaK_codeABC(fs, OP_TBC, reglevel(fs, level), 0, 0); 1720 luaK_codeABC(fs, OP_TBC, reglevel(fs, level), 0, 0);
1712 } 1721 }
1713} 1722}
@@ -1751,7 +1760,7 @@ static void localstat (LexState *ls) {
1751 adjust_assign(ls, nvars, nexps, &e); 1760 adjust_assign(ls, nvars, nexps, &e);
1752 adjustlocalvars(ls, nvars); 1761 adjustlocalvars(ls, nvars);
1753 } 1762 }
1754 checktoclose(ls, toclose); 1763 checktoclose(fs, toclose);
1755} 1764}
1756 1765
1757 1766
@@ -1776,6 +1785,7 @@ static void funcstat (LexState *ls, int line) {
1776 luaX_next(ls); /* skip FUNCTION */ 1785 luaX_next(ls); /* skip FUNCTION */
1777 ismethod = funcname(ls, &v); 1786 ismethod = funcname(ls, &v);
1778 body(ls, &b, ismethod, line); 1787 body(ls, &b, ismethod, line);
1788 check_readonly(ls, &v);
1779 luaK_storevar(ls->fs, &v, &b); 1789 luaK_storevar(ls->fs, &v, &b);
1780 luaK_fixline(ls->fs, line); /* definition "happens" in the first line */ 1790 luaK_fixline(ls->fs, line); /* definition "happens" in the first line */
1781} 1791}
diff --git a/src/3rdParty/lua/lstate.c b/src/3rdParty/lua/lstate.c
index c5e3b43..bfc5902 100644
--- a/src/3rdParty/lua/lstate.c
+++ b/src/3rdParty/lua/lstate.c
@@ -269,7 +269,7 @@ static void preinit_thread (lua_State *L, global_State *g) {
269static void close_state (lua_State *L) { 269static void close_state (lua_State *L) {
270 global_State *g = G(L); 270 global_State *g = G(L);
271 if (!completestate(g)) /* closing a partially built state? */ 271 if (!completestate(g)) /* closing a partially built state? */
272 luaC_freeallobjects(L); /* jucst collect its objects */ 272 luaC_freeallobjects(L); /* just collect its objects */
273 else { /* closing a fully built state */ 273 else { /* closing a fully built state */
274 luaD_closeprotected(L, 1, LUA_OK); /* close all upvalues */ 274 luaD_closeprotected(L, 1, LUA_OK); /* close all upvalues */
275 luaC_freeallobjects(L); /* collect all objects */ 275 luaC_freeallobjects(L); /* collect all objects */
diff --git a/src/3rdParty/lua/lstate.h b/src/3rdParty/lua/lstate.h
index c1283bb..44cf939 100644
--- a/src/3rdParty/lua/lstate.h
+++ b/src/3rdParty/lua/lstate.h
@@ -165,7 +165,7 @@ typedef struct stringtable {
165** - field 'nyield' is used only while a function is "doing" an 165** - field 'nyield' is used only while a function is "doing" an
166** yield (from the yield until the next resume); 166** yield (from the yield until the next resume);
167** - field 'nres' is used only while closing tbc variables when 167** - field 'nres' is used only while closing tbc variables when
168** returning from a C function; 168** returning from a function;
169** - field 'transferinfo' is used only during call/returnhooks, 169** - field 'transferinfo' is used only during call/returnhooks,
170** before the function starts or after it ends. 170** before the function starts or after it ends.
171*/ 171*/
diff --git a/src/3rdParty/lua/lstrlib.c b/src/3rdParty/lua/lstrlib.c
index 47e5b27..74501f7 100644
--- a/src/3rdParty/lua/lstrlib.c
+++ b/src/3rdParty/lua/lstrlib.c
@@ -1352,15 +1352,6 @@ static const union {
1352} nativeendian = {1}; 1352} nativeendian = {1};
1353 1353
1354 1354
1355/* dummy structure to get native alignment requirements */
1356struct cD {
1357 char c;
1358 union { double d; void *p; lua_Integer i; lua_Number n; } u;
1359};
1360
1361#define MAXALIGN (offsetof(struct cD, u))
1362
1363
1364/* 1355/*
1365** information to pack/unpack stuff 1356** information to pack/unpack stuff
1366*/ 1357*/
@@ -1435,6 +1426,8 @@ static void initheader (lua_State *L, Header *h) {
1435** Read and classify next option. 'size' is filled with option's size. 1426** Read and classify next option. 'size' is filled with option's size.
1436*/ 1427*/
1437static KOption getoption (Header *h, const char **fmt, int *size) { 1428static KOption getoption (Header *h, const char **fmt, int *size) {
1429 /* dummy structure to get native alignment requirements */
1430 struct cD { char c; union { LUAI_MAXALIGN; } u; };
1438 int opt = *((*fmt)++); 1431 int opt = *((*fmt)++);
1439 *size = 0; /* default */ 1432 *size = 0; /* default */
1440 switch (opt) { 1433 switch (opt) {
@@ -1465,7 +1458,11 @@ static KOption getoption (Header *h, const char **fmt, int *size) {
1465 case '<': h->islittle = 1; break; 1458 case '<': h->islittle = 1; break;
1466 case '>': h->islittle = 0; break; 1459 case '>': h->islittle = 0; break;
1467 case '=': h->islittle = nativeendian.little; break; 1460 case '=': h->islittle = nativeendian.little; break;
1468 case '!': h->maxalign = getnumlimit(h, fmt, MAXALIGN); break; 1461 case '!': {
1462 const int maxalign = offsetof(struct cD, u);
1463 h->maxalign = getnumlimit(h, fmt, maxalign);
1464 break;
1465 }
1469 default: luaL_error(h->L, "invalid format option '%c'", opt); 1466 default: luaL_error(h->L, "invalid format option '%c'", opt);
1470 } 1467 }
1471 return Knop; 1468 return Knop;
diff --git a/src/3rdParty/lua/ltable.c b/src/3rdParty/lua/ltable.c
index 33c1ab3..af87836 100644
--- a/src/3rdParty/lua/ltable.c
+++ b/src/3rdParty/lua/ltable.c
@@ -84,8 +84,6 @@
84#define hashstr(t,str) hashpow2(t, (str)->hash) 84#define hashstr(t,str) hashpow2(t, (str)->hash)
85#define hashboolean(t,p) hashpow2(t, p) 85#define hashboolean(t,p) hashpow2(t, p)
86 86
87#define hashint(t,i) hashpow2(t, i)
88
89 87
90#define hashpointer(t,p) hashmod(t, point2uint(p)) 88#define hashpointer(t,p) hashmod(t, point2uint(p))
91 89
@@ -101,6 +99,20 @@ static const Node dummynode_ = {
101static const TValue absentkey = {ABSTKEYCONSTANT}; 99static const TValue absentkey = {ABSTKEYCONSTANT};
102 100
103 101
102/*
103** Hash for integers. To allow a good hash, use the remainder operator
104** ('%'). If integer fits as a non-negative int, compute an int
105** remainder, which is faster. Otherwise, use an unsigned-integer
106** remainder, which uses all bits and ensures a non-negative result.
107*/
108static Node *hashint (const Table *t, lua_Integer i) {
109 lua_Unsigned ui = l_castS2U(i);
110 if (ui <= (unsigned int)INT_MAX)
111 return hashmod(t, cast_int(ui));
112 else
113 return hashmod(t, ui);
114}
115
104 116
105/* 117/*
106** Hash for floating-point numbers. 118** Hash for floating-point numbers.
diff --git a/src/3rdParty/lua/ltablib.c b/src/3rdParty/lua/ltablib.c
index d80eb80..dbfe250 100644
--- a/src/3rdParty/lua/ltablib.c
+++ b/src/3rdParty/lua/ltablib.c
@@ -147,7 +147,7 @@ static void addfield (lua_State *L, luaL_Buffer *b, lua_Integer i) {
147 lua_geti(L, 1, i); 147 lua_geti(L, 1, i);
148 if (l_unlikely(!lua_isstring(L, -1))) 148 if (l_unlikely(!lua_isstring(L, -1)))
149 luaL_error(L, "invalid value (%s) at index %I in table for 'concat'", 149 luaL_error(L, "invalid value (%s) at index %I in table for 'concat'",
150 luaL_typename(L, -1), i); 150 luaL_typename(L, -1), (LUAI_UACINT)i);
151 luaL_addvalue(b); 151 luaL_addvalue(b);
152} 152}
153 153
diff --git a/src/3rdParty/lua/lua.h b/src/3rdParty/lua/lua.h
index 820535b..c3dbce1 100644
--- a/src/3rdParty/lua/lua.h
+++ b/src/3rdParty/lua/lua.h
@@ -18,10 +18,10 @@
18 18
19#define LUA_VERSION_MAJOR "5" 19#define LUA_VERSION_MAJOR "5"
20#define LUA_VERSION_MINOR "4" 20#define LUA_VERSION_MINOR "4"
21#define LUA_VERSION_RELEASE "3" 21#define LUA_VERSION_RELEASE "4"
22 22
23#define LUA_VERSION_NUM 504 23#define LUA_VERSION_NUM 504
24#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 0) 24#define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 4)
25 25
26#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR 26#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
27#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE 27#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
diff --git a/src/3rdParty/lua/luaconf.h b/src/3rdParty/lua/luaconf.h
index e64d2ee..d42d14b 100644
--- a/src/3rdParty/lua/luaconf.h
+++ b/src/3rdParty/lua/luaconf.h
@@ -485,7 +485,6 @@
485@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER. 485@@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER.
486@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER. 486@@ LUA_MININTEGER is the minimum value for a LUA_INTEGER.
487@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED. 487@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED.
488@@ LUA_UNSIGNEDBITS is the number of bits in a LUA_UNSIGNED.
489@@ lua_integer2str converts an integer to a string. 488@@ lua_integer2str converts an integer to a string.
490*/ 489*/
491 490
@@ -506,9 +505,6 @@
506#define LUA_UNSIGNED unsigned LUAI_UACINT 505#define LUA_UNSIGNED unsigned LUAI_UACINT
507 506
508 507
509#define LUA_UNSIGNEDBITS (sizeof(LUA_UNSIGNED) * CHAR_BIT)
510
511
512/* now the variable definitions */ 508/* now the variable definitions */
513 509
514#if LUA_INT_TYPE == LUA_INT_INT /* { int */ 510#if LUA_INT_TYPE == LUA_INT_INT /* { int */
diff --git a/src/3rdParty/lua/lvm.c b/src/3rdParty/lua/lvm.c
index c9729bc..c84a665 100644
--- a/src/3rdParty/lua/lvm.c
+++ b/src/3rdParty/lua/lvm.c
@@ -766,7 +766,7 @@ lua_Number luaV_modf (lua_State *L, lua_Number m, lua_Number n) {
766/* 766/*
767** Shift left operation. (Shift right just negates 'y'.) 767** Shift left operation. (Shift right just negates 'y'.)
768*/ 768*/
769#define luaV_shiftr(x,y) luaV_shiftl(x,-(y)) 769#define luaV_shiftr(x,y) luaV_shiftl(x,intop(-, 0, y))
770 770
771lua_Integer luaV_shiftl (lua_Integer x, lua_Integer y) { 771lua_Integer luaV_shiftl (lua_Integer x, lua_Integer y) {
772 if (y < 0) { /* shift right? */ 772 if (y < 0) { /* shift right? */
@@ -847,10 +847,19 @@ void luaV_finishOp (lua_State *L) {
847 luaV_concat(L, total); /* concat them (may yield again) */ 847 luaV_concat(L, total); /* concat them (may yield again) */
848 break; 848 break;
849 } 849 }
850 case OP_CLOSE: case OP_RETURN: { /* yielded closing variables */ 850 case OP_CLOSE: { /* yielded closing variables */
851 ci->u.l.savedpc--; /* repeat instruction to close other vars. */ 851 ci->u.l.savedpc--; /* repeat instruction to close other vars. */
852 break; 852 break;
853 } 853 }
854 case OP_RETURN: { /* yielded closing variables */
855 StkId ra = base + GETARG_A(inst);
856 /* adjust top to signal correct number of returns, in case the
857 return is "up to top" ('isIT') */
858 L->top = ra + ci->u2.nres;
859 /* repeat instruction to close other vars. and complete the return */
860 ci->u.l.savedpc--;
861 break;
862 }
854 default: { 863 default: {
855 /* only these other opcodes can yield */ 864 /* only these other opcodes can yield */
856 lua_assert(op == OP_TFORCALL || op == OP_CALL || 865 lua_assert(op == OP_TFORCALL || op == OP_CALL ||
@@ -1156,8 +1165,10 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1156 Instruction i; /* instruction being executed */ 1165 Instruction i; /* instruction being executed */
1157 StkId ra; /* instruction's A register */ 1166 StkId ra; /* instruction's A register */
1158 vmfetch(); 1167 vmfetch();
1159// low-level line tracing for debugging Lua 1168 #if 0
1160// printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p))); 1169 /* low-level line tracing for debugging Lua */
1170 printf("line: %d\n", luaG_getfuncline(cl->p, pcRel(pc, cl->p)));
1171 #endif
1161 lua_assert(base == ci->func + 1); 1172 lua_assert(base == ci->func + 1);
1162 lua_assert(base <= L->top && L->top < L->stack_last); 1173 lua_assert(base <= L->top && L->top < L->stack_last);
1163 /* invalidate top for instructions not expecting it */ 1174 /* invalidate top for instructions not expecting it */
@@ -1625,7 +1636,6 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1625 updatetrap(ci); /* C call; nothing else to be done */ 1636 updatetrap(ci); /* C call; nothing else to be done */
1626 else { /* Lua call: run function in this same C frame */ 1637 else { /* Lua call: run function in this same C frame */
1627 ci = newci; 1638 ci = newci;
1628 ci->callstatus = 0; /* call re-uses 'luaV_execute' */
1629 goto startfunc; 1639 goto startfunc;
1630 } 1640 }
1631 vmbreak; 1641 vmbreak;
@@ -1637,31 +1647,19 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1637 int delta = (nparams1) ? ci->u.l.nextraargs + nparams1 : 0; 1647 int delta = (nparams1) ? ci->u.l.nextraargs + nparams1 : 0;
1638 if (b != 0) 1648 if (b != 0)
1639 L->top = ra + b; 1649 L->top = ra + b;
1640 else /* previous instruction set top */ 1650 /* else previous instruction set top */
1641 b = cast_int(L->top - ra);
1642 savepc(ci); /* several calls here can raise errors */ 1651 savepc(ci); /* several calls here can raise errors */
1643 if (TESTARG_k(i)) { 1652 if (TESTARG_k(i)) {
1644 luaF_closeupval(L, base); /* close upvalues from current call */ 1653 luaF_closeupval(L, base); /* close upvalues from current call */
1645 lua_assert(L->tbclist < base); /* no pending tbc variables */ 1654 lua_assert(L->tbclist < base); /* no pending tbc variables */
1646 lua_assert(base == ci->func + 1); 1655 lua_assert(base == ci->func + 1);
1647 } 1656 }
1648 while (!ttisfunction(s2v(ra))) { /* not a function? */ 1657 if (luaD_precall(L, ra, delta2retdel(delta))) /* Lua function? */
1649 luaD_tryfuncTM(L, ra); /* try '__call' metamethod */ 1658 goto startfunc; /* execute the callee */
1650 b++; /* there is now one extra argument */ 1659 else { /* C function */
1651 checkstackGCp(L, 1, ra);
1652 }
1653 if (!ttisLclosure(s2v(ra))) { /* C function? */
1654 luaD_precall(L, ra, LUA_MULTRET); /* call it */
1655 updatetrap(ci); 1660 updatetrap(ci);
1656 updatestack(ci); /* stack may have been relocated */
1657 ci->func -= delta; /* restore 'func' (if vararg) */
1658 luaD_poscall(L, ci, cast_int(L->top - ra)); /* finish caller */
1659 updatetrap(ci); /* 'luaD_poscall' can change hooks */
1660 goto ret; /* caller returns after the tail call */ 1661 goto ret; /* caller returns after the tail call */
1661 } 1662 }
1662 ci->func -= delta; /* restore 'func' (if vararg) */
1663 luaD_pretailcall(L, ci, ra, b); /* prepare call frame */
1664 goto startfunc; /* execute the callee */
1665 } 1663 }
1666 vmcase(OP_RETURN) { 1664 vmcase(OP_RETURN) {
1667 int n = GETARG_B(i) - 1; /* number of results */ 1665 int n = GETARG_B(i) - 1; /* number of results */
@@ -1670,6 +1668,7 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
1670 n = cast_int(L->top - ra); /* get what is available */ 1668 n = cast_int(L->top - ra); /* get what is available */
1671 savepc(ci); 1669 savepc(ci);
1672 if (TESTARG_k(i)) { /* may there be open upvalues? */ 1670 if (TESTARG_k(i)) { /* may there be open upvalues? */
1671 ci->u2.nres = n; /* save number of returns */
1673 if (L->top < ci->top) 1672 if (L->top < ci->top)
1674 L->top = ci->top; 1673 L->top = ci->top;
1675 luaF_close(L, base, CLOSEKTOP, 1); 1674 luaF_close(L, base, CLOSEKTOP, 1);
diff --git a/src/yuescript/yue_compiler.cpp b/src/yuescript/yue_compiler.cpp
index 8e4072f..e404cd4 100644
--- a/src/yuescript/yue_compiler.cpp
+++ b/src/yuescript/yue_compiler.cpp
@@ -56,7 +56,7 @@ using namespace parserlib;
56 56
57typedef std::list<std::string> str_list; 57typedef std::list<std::string> str_list;
58 58
59const std::string_view version = "0.7.18"sv; 59const std::string_view version = "0.8.0"sv;
60const std::string_view extension = "yue"sv; 60const std::string_view extension = "yue"sv;
61 61
62class YueCompilerImpl { 62class YueCompilerImpl {