diff options
author | Benoit Giannangeli <giann008@gmail.com> | 2017-03-28 13:18:13 +0200 |
---|---|---|
committer | Benoit Giannangeli <giann008@gmail.com> | 2017-03-28 13:53:19 +0200 |
commit | 36f3247d47c1ad854fa89aabf17f6d954a6a6657 (patch) | |
tree | 20d48d5d73aa81f86998c33d439b1d45bf1ea510 /src/llex.js | |
parent | ca46ad67f398f219cf838feb10127cd0cecc72d8 (diff) | |
download | fengari-36f3247d47c1ad854fa89aabf17f6d954a6a6657.tar.gz fengari-36f3247d47c1ad854fa89aabf17f6d954a6a6657.tar.bz2 fengari-36f3247d47c1ad854fa89aabf17f6d954a6a6657.zip |
luaO_utf8esc
Diffstat (limited to 'src/llex.js')
-rw-r--r-- | src/llex.js | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/llex.js b/src/llex.js index 96e9e00..2d34b1f 100644 --- a/src/llex.js +++ b/src/llex.js @@ -152,7 +152,7 @@ const save = function(ls, c) { if (b.buffer.length >= Number.MAX_SAFE_INTEGER/2) lexerror(ls, "lexical element too long", 0); } - b.buffer[b.n++] = c; + b.buffer[b.n++] = c < 0 ? 255 + c + 1 : c; }; const luaX_token2str = function(ls, token) { @@ -407,9 +407,9 @@ const readutf8desc = function(ls) { }; const utf8esc = function(ls) { - let buff = new Array(lobject.UTF8BUFFSZ); - let n = lobject.luaO_utf8esc(buff, readutf8desc(ls)); - for (; n > 0; n--) /* add 'buff' to string */ + let u = lobject.luaO_utf8esc(readutf8desc(ls)); + let buff = u.buff; + for (let n = u.n; n > 0; n--) /* add 'buff' to string */ save(ls, buff[lobject.UTF8BUFFSZ - n]); }; @@ -450,12 +450,12 @@ const read_string = function(ls, del, seminfo) { case 't': c = '\t'; will = 'read_save'; break; case 'v': c = '\v'; will = 'read_save'; break; case 'x': c = readhexaesc(ls); will = 'read_save'; break; - case 'u': utf8esc(ls); will = 'read_save'; break; + case 'u': utf8esc(ls); will = 'no_save'; break; case '\n': case '\r': inclinenumber(ls); c = '\n'; will = 'only_save'; break; case '\\': case '\"': case '\'': c = ls.current; will = 'read_save'; break; - case -1: will = 'read_save'; break; /* will raise an error next loop */ + case -1: will = 'no_save'; break; /* will raise an error next loop */ case 'z': { /* zap following span of spaces */ ls.buff.n -= 1; /* remove '\\' */ next(ls); /* skip the 'z' */ |