summaryrefslogtreecommitdiff
path: root/src/llex.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/llex.js')
-rw-r--r--src/llex.js53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/llex.js b/src/llex.js
index 1e3f15b..a838158 100644
--- a/src/llex.js
+++ b/src/llex.js
@@ -1,6 +1,11 @@
"use strict";
-const defs = require('./defs.js');
+const {
+ constant_types: { LUA_TLNGSTR },
+ char,
+ thread_status: { LUA_ERRSYNTAX },
+ to_luastring
+} = require('./defs.js');
const { lua_assert } = require('./llimits.js');
const ldebug = require('./ldebug.js');
const ldo = require('./ldo.js');
@@ -11,13 +16,9 @@ const ltable = require('./ltable.js');
const llimits = require('./llimits.js');
const lzio = require('./lzio.js');
-const {LUA_TLNGSTR} = defs.constant_types;
-const char = defs.char;
-const TS = defs.thread_status;
-
const FIRST_RESERVED = 257;
-const LUA_ENV = defs.to_luastring("_ENV", true);
+const LUA_ENV = to_luastring("_ENV", true);
const RESERVED = {
/* terminal symbols denoted by reserved words */
@@ -112,7 +113,7 @@ const save = function(ls, c) {
let b = ls.buff;
if (b.n + 1 > b.buffer.length) {
if (b.buffer.length >= llimits.MAX_INT/2)
- lexerror(ls, defs.to_luastring("lexical element too long", true), 0);
+ lexerror(ls, to_luastring("lexical element too long", true), 0);
let newsize = b.buffer.length*2;
lzio.luaZ_resizebuffer(ls.L, b, newsize);
}
@@ -121,13 +122,13 @@ const save = function(ls, c) {
const luaX_token2str = function(ls, token) {
if (token < FIRST_RESERVED) { /* single-byte symbols? */
- return lobject.luaO_pushfstring(ls.L, defs.to_luastring("'%c'", true), token);
+ return lobject.luaO_pushfstring(ls.L, to_luastring("'%c'", true), token);
} else {
let s = luaX_tokens[token - FIRST_RESERVED];
if (token < R.TK_EOS) /* fixed format (symbols and reserved words)? */
- return lobject.luaO_pushfstring(ls.L, defs.to_luastring("'%s'", true), defs.to_luastring(s));
+ return lobject.luaO_pushfstring(ls.L, to_luastring("'%s'", true), to_luastring(s));
else /* names, strings, and numerals */
- return defs.to_luastring(s);
+ return to_luastring(s);
}
};
@@ -175,7 +176,7 @@ const inclinenumber = function(ls) {
if (currIsNewline(ls) && ls.current !== old)
next(ls); /* skip '\n\r' or '\r\n' */
if (++ls.linenumber >= llimits.MAX_INT)
- lexerror(ls, defs.to_luastring("chunk has too many lines", true), 0);
+ lexerror(ls, to_luastring("chunk has too many lines", true), 0);
};
const luaX_setinput = function(L, ls, z, source, firstchar) {
@@ -242,7 +243,7 @@ const read_numeral = function(ls, seminfo) {
let obj = new lobject.TValue();
if (lobject.luaO_str2num(lzio.luaZ_buffer(ls.buff), obj) === 0) /* format error? */
- lexerror(ls, defs.to_luastring("malformed number", true), R.TK_FLT);
+ lexerror(ls, to_luastring("malformed number", true), R.TK_FLT);
if (obj.ttisinteger()) {
seminfo.i = obj.value;
return R.TK_INT;
@@ -258,7 +259,7 @@ const txtToken = function(ls, token) {
case R.TK_NAME: case R.TK_STRING:
case R.TK_FLT: case R.TK_INT:
// save(ls, 0);
- return lobject.luaO_pushfstring(ls.L, defs.to_luastring("'%s'", true), lzio.luaZ_buffer(ls.buff));
+ return lobject.luaO_pushfstring(ls.L, to_luastring("'%s'", true), lzio.luaZ_buffer(ls.buff));
default:
return luaX_token2str(ls, token);
}
@@ -267,8 +268,8 @@ const txtToken = function(ls, token) {
const lexerror = function(ls, msg, token) {
msg = ldebug.luaG_addinfo(ls.L, msg, ls.source, ls.linenumber);
if (token)
- lobject.luaO_pushfstring(ls.L, defs.to_luastring("%s near %s"), msg, txtToken(ls, token));
- ldo.luaD_throw(ls.L, TS.LUA_ERRSYNTAX);
+ lobject.luaO_pushfstring(ls.L, to_luastring("%s near %s"), msg, txtToken(ls, token));
+ ldo.luaD_throw(ls.L, LUA_ERRSYNTAX);
};
const luaX_syntaxerror = function(ls, msg) {
@@ -305,7 +306,7 @@ const read_long_string = function(ls, seminfo, sep) {
case lzio.EOZ: { /* error */
let what = seminfo ? "string" : "comment";
let msg = `unfinished long ${what} (starting at line ${line})`;
- lexerror(ls, defs.to_luastring(msg), R.TK_EOS);
+ lexerror(ls, to_luastring(msg), R.TK_EOS);
break;
}
case char[']']: {
@@ -342,7 +343,7 @@ const esccheck = function(ls, c, msg) {
const gethexa = function(ls) {
save_and_next(ls);
- esccheck(ls, ljstype.lisxdigit(ls.current), defs.to_luastring("hexadecimal digit expected", true));
+ esccheck(ls, ljstype.lisxdigit(ls.current), to_luastring("hexadecimal digit expected", true));
return lobject.luaO_hexavalue(ls.current);
};
@@ -356,17 +357,17 @@ const readhexaesc = function(ls) {
const readutf8desc = function(ls) {
let i = 4; /* chars to be removed: '\', 'u', '{', and first digit */
save_and_next(ls); /* skip 'u' */
- esccheck(ls, ls.current === char['{'], defs.to_luastring("missing '{'", true));
+ esccheck(ls, ls.current === char['{'], to_luastring("missing '{'", true));
let r = gethexa(ls); /* must have at least one digit */
save_and_next(ls);
while (ljstype.lisxdigit(ls.current)) {
i++;
r = (r << 4) + lobject.luaO_hexavalue(ls.current);
- esccheck(ls, r <= 0x10FFFF, defs.to_luastring("UTF-8 value too large", true));
+ esccheck(ls, r <= 0x10FFFF, to_luastring("UTF-8 value too large", true));
save_and_next(ls);
}
- esccheck(ls, ls.current === char['}'], defs.to_luastring("missing '}'", true));
+ esccheck(ls, ls.current === char['}'], to_luastring("missing '}'", true));
next(ls); /* skip '}' */
lzio.luaZ_buffremove(ls.buff, i); /* remove saved chars from buffer */
return r;
@@ -386,7 +387,7 @@ const readdecesc = function(ls) {
r = 10 * r + ls.current - char['0'];
save_and_next(ls);
}
- esccheck(ls, r <= 255, defs.to_luastring("decimal escape too large", true));
+ esccheck(ls, r <= 255, to_luastring("decimal escape too large", true));
lzio.luaZ_buffremove(ls.buff, i); /* remove read digits from buffer */
return r;
};
@@ -397,11 +398,11 @@ const read_string = function(ls, del, seminfo) {
while (ls.current !== del) {
switch (ls.current) {
case lzio.EOZ:
- lexerror(ls, defs.to_luastring("unfinished string", true), R.TK_EOS);
+ lexerror(ls, to_luastring("unfinished string", true), R.TK_EOS);
break;
case char['\n']:
case char['\r']:
- lexerror(ls, defs.to_luastring("unfinished string", true), R.TK_STRING);
+ lexerror(ls, to_luastring("unfinished string", true), R.TK_STRING);
break;
case char['\\']: { /* escape sequences */
save_and_next(ls); /* keep '\\' for error messages */
@@ -432,7 +433,7 @@ const read_string = function(ls, del, seminfo) {
will = 'no_save'; break;
}
default: {
- esccheck(ls, ljstype.lisdigit(ls.current), defs.to_luastring("invalid escape sequence", true));
+ esccheck(ls, ljstype.lisdigit(ls.current), to_luastring("invalid escape sequence", true));
c = readdecesc(ls); /* digital escape '\ddd' */
will = 'only_save'; break;
}
@@ -458,7 +459,7 @@ const read_string = function(ls, del, seminfo) {
};
const token_to_index = Object.create(null); /* don't want to return true for e.g. 'hasOwnProperty' */
-luaX_tokens.forEach((e, i)=>token_to_index[lstring.luaS_hash(defs.to_luastring(e))] = i);
+luaX_tokens.forEach((e, i)=>token_to_index[lstring.luaS_hash(to_luastring(e))] = i);
const isreserved = function(w) {
let kidx = token_to_index[lstring.luaS_hashlongstr(w)];
@@ -504,7 +505,7 @@ const llex = function(ls, seminfo) {
read_long_string(ls, seminfo, sep);
return R.TK_STRING;
} else if (sep !== -1) /* '[=...' missing second bracket */
- lexerror(ls, defs.to_luastring("invalid long string delimiter", true), R.TK_STRING);
+ lexerror(ls, to_luastring("invalid long string delimiter", true), R.TK_STRING);
return char['['];
}
case char['=']: {