The Battle for Wesnoth  1.13.4+dev
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
llex.cpp
Go to the documentation of this file.
1 /*
2 ** Lexical Analyzer
3 ** See Copyright Notice in lua.h
4 */
5 
6 
7 #include <locale.h>
8 #include <string.h>
9 
10 #define llex_c
11 #define LUA_CORE
12 
13 #include "lua.h"
14 
15 #include "lctype.h"
16 #include "ldo.h"
17 #include "llex.h"
18 #include "lobject.h"
19 #include "lparser.h"
20 #include "lstate.h"
21 #include "lstring.h"
22 #include "ltable.h"
23 #include "lzio.h"
24 
25 
26 
27 #define next(ls) (ls->current = zgetc(ls->z))
28 
29 
30 
31 #define currIsNewline(ls) (ls->current == '\n' || ls->current == '\r')
32 
33 
34 /* ORDER RESERVED */
35 static const char *const luaX_tokens [] = {
36  "and", "break", "do", "else", "elseif",
37  "end", "false", "for", "function", "goto", "if",
38  "in", "local", "nil", "not", "or", "repeat",
39  "return", "then", "true", "until", "while",
40  "..", "...", "==", ">=", "<=", "~=", "::", "<eof>",
41  "<number>", "<name>", "<string>"
42 };
43 
44 
45 #define save_and_next(ls) (save(ls, ls->current), next(ls))
46 
47 
48 static l_noret lexerror (LexState *ls, const char *msg, int token);
49 
50 
51 static void save (LexState *ls, int c) {
52  Mbuffer *b = ls->buff;
53  if (luaZ_bufflen(b) + 1 > luaZ_sizebuffer(b)) {
54  size_t newsize;
55  if (luaZ_sizebuffer(b) >= MAX_SIZET/2)
56  lexerror(ls, "lexical element too long", 0);
57  newsize = luaZ_sizebuffer(b) * 2;
58  luaZ_resizebuffer(ls->L, b, newsize);
59  }
60  b->buffer[luaZ_bufflen(b)++] = cast(char, c);
61 }
62 
63 
64 void luaX_init (lua_State *L) {
65  int i;
66  for (i=0; i<NUM_RESERVED; i++) {
67  TString *ts = luaS_new(L, luaX_tokens[i]);
68  luaS_fix(ts); /* reserved words are never collected */
69  ts->tsv.extra = cast_byte(i+1); /* reserved word */
70  }
71 }
72 
73 
74 const char *luaX_token2str (LexState *ls, int token) {
75  if (token < FIRST_RESERVED - 1) { /* single-byte symbols? */
76  lua_assert(token == cast(unsigned char, token));
77  return (lisprint(token)) ? luaO_pushfstring(ls->L, LUA_QL("%c"), token) :
78  luaO_pushfstring(ls->L, "char(%d)", token);
79  }
80  else {
81  const char *s = luaX_tokens[token - FIRST_RESERVED];
82  if (token < TK_EOS) /* fixed format (symbols and reserved words)? */
83  return luaO_pushfstring(ls->L, LUA_QS, s);
84  else /* names, strings, and numerals */
85  return s;
86  }
87 }
88 
89 
90 static const char *txtToken (LexState *ls, int token) {
91  switch (token) {
92  case TK_NAME:
93  case TK_STRING:
94  case TK_NUMBER:
95  save(ls, '\0');
96  return luaO_pushfstring(ls->L, LUA_QS, luaZ_buffer(ls->buff));
97  default:
98  return luaX_token2str(ls, token);
99  }
100 }
101 
102 
103 static l_noret lexerror (LexState *ls, const char *msg, int token) {
104  char buff[LUA_IDSIZE];
105  luaO_chunkid(buff, getstr(ls->source), LUA_IDSIZE);
106  msg = luaO_pushfstring(ls->L, "%s:%d: %s", buff, ls->linenumber, msg);
107  if (token)
108  luaO_pushfstring(ls->L, "%s near %s", msg, txtToken(ls, token));
109  luaD_throw(ls->L, LUA_ERRSYNTAX);
110 }
111 
112 
113 l_noret luaX_syntaxerror (LexState *ls, const char *msg) {
114  lexerror(ls, msg, ls->t.token);
115 }
116 
117 
118 /*
119 ** creates a new string and anchors it in function's table so that
120 ** it will not be collected until the end of the function's compilation
121 ** (by that time it should be anchored in function's prototype)
122 */
123 TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
124  lua_State *L = ls->L;
125  TValue *o; /* entry for `str' */
126  TString *ts = luaS_newlstr(L, str, l); /* create new string */
127  setsvalue2s(L, L->top++, ts); /* temporarily anchor it in stack */
128  o = luaH_set(L, ls->fs->h, L->top - 1);
129  if (ttisnil(o)) { /* not in use yet? (see 'addK') */
130  /* boolean value does not need GC barrier;
131  table has no metatable, so it does not need to invalidate cache */
132  setbvalue(o, 1); /* t[string] = true */
133  luaC_checkGC(L);
134  }
135  else { /* string already present */
136  ts = rawtsvalue(keyfromval(o)); /* re-use value previously stored */
137  }
138  L->top--; /* remove string from stack */
139  return ts;
140 }
141 
142 
143 /*
144 ** increment line number and skips newline sequence (any of
145 ** \n, \r, \n\r, or \r\n)
146 */
147 static void inclinenumber (LexState *ls) {
148  int old = ls->current;
150  next(ls); /* skip `\n' or `\r' */
151  if (currIsNewline(ls) && ls->current != old)
152  next(ls); /* skip `\n\r' or `\r\n' */
153  if (++ls->linenumber >= MAX_INT)
154  luaX_syntaxerror(ls, "chunk has too many lines");
155 }
156 
157 
159  int firstchar) {
160  ls->decpoint = '.';
161  ls->L = L;
162  ls->current = firstchar;
163  ls->lookahead.token = TK_EOS; /* no look-ahead token */
164  ls->z = z;
165  ls->fs = NULL;
166  ls->linenumber = 1;
167  ls->lastline = 1;
168  ls->source = source;
169  ls->envn = luaS_new(L, LUA_ENV); /* create env name */
170  luaS_fix(ls->envn); /* never collect this name */
171  luaZ_resizebuffer(ls->L, ls->buff, LUA_MINBUFFER); /* initialize buffer */
172 }
173 
174 
175 
176 /*
177 ** =======================================================
178 ** LEXICAL ANALYZER
179 ** =======================================================
180 */
181 
182 
183 
184 static int check_next (LexState *ls, const char *set) {
185  if (ls->current == '\0' || !strchr(set, ls->current))
186  return 0;
187  save_and_next(ls);
188  return 1;
189 }
190 
191 
192 /*
193 ** change all characters 'from' in buffer to 'to'
194 */
195 static void buffreplace (LexState *ls, char from, char to) {
196  size_t n = luaZ_bufflen(ls->buff);
197  char *p = luaZ_buffer(ls->buff);
198  while (n--)
199  if (p[n] == from) p[n] = to;
200 }
201 
202 
203 #if !defined(getlocaledecpoint)
204 #define getlocaledecpoint() (localeconv()->decimal_point[0])
205 #endif
206 
207 
208 #define buff2d(b,e) luaO_str2d(luaZ_buffer(b), luaZ_bufflen(b) - 1, e)
209 
210 /*
211 ** in case of format error, try to change decimal point separator to
212 ** the one defined in the current locale and check again
213 */
214 static void trydecpoint (LexState *ls, SemInfo *seminfo) {
215  char old = ls->decpoint;
216  ls->decpoint = getlocaledecpoint();
217  buffreplace(ls, old, ls->decpoint); /* try new decimal separator */
218  if (!buff2d(ls->buff, &seminfo->r)) {
219  /* format error with correct decimal point: no more options */
220  buffreplace(ls, ls->decpoint, '.'); /* undo change (for error message) */
221  lexerror(ls, "malformed number", TK_NUMBER);
222  }
223 }
224 
225 
226 /* LUA_NUMBER */
227 /*
228 ** this function is quite liberal in what it accepts, as 'luaO_str2d'
229 ** will reject ill-formed numerals.
230 */
231 static void read_numeral (LexState *ls, SemInfo *seminfo) {
232  const char *expo = "Ee";
233  int first = ls->current;
235  save_and_next(ls);
236  if (first == '0' && check_next(ls, "Xx")) /* hexadecimal? */
237  expo = "Pp";
238  for (;;) {
239  if (check_next(ls, expo)) /* exponent part? */
240  check_next(ls, "+-"); /* optional exponent sign */
241  if (lisxdigit(ls->current) || ls->current == '.')
242  save_and_next(ls);
243  else break;
244  }
245  save(ls, '\0');
246  buffreplace(ls, '.', ls->decpoint); /* follow locale for decimal point */
247  if (!buff2d(ls->buff, &seminfo->r)) /* format error? */
248  trydecpoint(ls, seminfo); /* try to update decimal point separator */
249 }
250 
251 
252 /*
253 ** skip a sequence '[=*[' or ']=*]' and return its number of '='s or
254 ** -1 if sequence is malformed
255 */
256 static int skip_sep (LexState *ls) {
257  int count = 0;
258  int s = ls->current;
259  lua_assert(s == '[' || s == ']');
260  save_and_next(ls);
261  while (ls->current == '=') {
262  save_and_next(ls);
263  count++;
264  }
265  return (ls->current == s) ? count : (-count) - 1;
266 }
267 
268 
269 static void read_long_string (LexState *ls, SemInfo *seminfo, int sep) {
270  save_and_next(ls); /* skip 2nd `[' */
271  if (currIsNewline(ls)) /* string starts with a newline? */
272  inclinenumber(ls); /* skip it */
273  for (;;) {
274  switch (ls->current) {
275  case EOZ:
276  lexerror(ls, (seminfo) ? "unfinished long string" :
277  "unfinished long comment", TK_EOS);
278  break; /* to avoid warnings */
279  case ']': {
280  if (skip_sep(ls) == sep) {
281  save_and_next(ls); /* skip 2nd `]' */
282  goto endloop;
283  }
284  break;
285  }
286  case '\n': case '\r': {
287  save(ls, '\n');
288  inclinenumber(ls);
289  if (!seminfo) luaZ_resetbuffer(ls->buff); /* avoid wasting space */
290  break;
291  }
292  default: {
293  if (seminfo) save_and_next(ls);
294  else next(ls);
295  }
296  }
297  } endloop:
298  if (seminfo)
299  seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + (2 + sep),
300  luaZ_bufflen(ls->buff) - 2*(2 + sep));
301 }
302 
303 
304 static void escerror (LexState *ls, int *c, int n, const char *msg) {
305  int i;
306  luaZ_resetbuffer(ls->buff); /* prepare error message */
307  save(ls, '\\');
308  for (i = 0; i < n && c[i] != EOZ; i++)
309  save(ls, c[i]);
310  lexerror(ls, msg, TK_STRING);
311 }
312 
313 
314 static int readhexaesc (LexState *ls) {
315  int c[3], i; /* keep input for error message */
316  int r = 0; /* result accumulator */
317  c[0] = 'x'; /* for error message */
318  for (i = 1; i < 3; i++) { /* read two hexadecimal digits */
319  c[i] = next(ls);
320  if (!lisxdigit(c[i]))
321  escerror(ls, c, i + 1, "hexadecimal digit expected");
322  r = (r << 4) + luaO_hexavalue(c[i]);
323  }
324  return r;
325 }
326 
327 
328 static int readdecesc (LexState *ls) {
329  int c[3], i;
330  int r = 0; /* result accumulator */
331  for (i = 0; i < 3 && lisdigit(ls->current); i++) { /* read up to 3 digits */
332  c[i] = ls->current;
333  r = 10*r + c[i] - '0';
334  next(ls);
335  }
336  if (r > UCHAR_MAX)
337  escerror(ls, c, i, "decimal escape too large");
338  return r;
339 }
340 
341 
342 static void read_string (LexState *ls, int del, SemInfo *seminfo) {
343  save_and_next(ls); /* keep delimiter (for error messages) */
344  while (ls->current != del) {
345  switch (ls->current) {
346  case EOZ:
347  lexerror(ls, "unfinished string", TK_EOS);
348  break; /* to avoid warnings */
349  case '\n':
350  case '\r':
351  lexerror(ls, "unfinished string", TK_STRING);
352  break; /* to avoid warnings */
353  case '\\': { /* escape sequences */
354  int c; /* final character to be saved */
355  next(ls); /* do not save the `\' */
356  switch (ls->current) {
357  case 'a': c = '\a'; goto read_save;
358  case 'b': c = '\b'; goto read_save;
359  case 'f': c = '\f'; goto read_save;
360  case 'n': c = '\n'; goto read_save;
361  case 'r': c = '\r'; goto read_save;
362  case 't': c = '\t'; goto read_save;
363  case 'v': c = '\v'; goto read_save;
364  case 'x': c = readhexaesc(ls); goto read_save;
365  case '\n': case '\r':
366  inclinenumber(ls); c = '\n'; goto only_save;
367  case '\\': case '\"': case '\'':
368  c = ls->current; goto read_save;
369  case EOZ: goto no_save; /* will raise an error next loop */
370  case 'z': { /* zap following span of spaces */
371  next(ls); /* skip the 'z' */
372  while (lisspace(ls->current)) {
373  if (currIsNewline(ls)) inclinenumber(ls);
374  else next(ls);
375  }
376  goto no_save;
377  }
378  default: {
379  if (!lisdigit(ls->current))
380  escerror(ls, &ls->current, 1, "invalid escape sequence");
381  /* digital escape \ddd */
382  c = readdecesc(ls);
383  goto only_save;
384  }
385  }
386  read_save: next(ls); /* read next character */
387  only_save: save(ls, c); /* save 'c' */
388  no_save: break;
389  }
390  default:
391  save_and_next(ls);
392  }
393  }
394  save_and_next(ls); /* skip delimiter */
395  seminfo->ts = luaX_newstring(ls, luaZ_buffer(ls->buff) + 1,
396  luaZ_bufflen(ls->buff) - 2);
397 }
398 
399 
400 static int llex (LexState *ls, SemInfo *seminfo) {
401  luaZ_resetbuffer(ls->buff);
402  for (;;) {
403  switch (ls->current) {
404  case '\n': case '\r': { /* line breaks */
405  inclinenumber(ls);
406  break;
407  }
408  case ' ': case '\f': case '\t': case '\v': { /* spaces */
409  next(ls);
410  break;
411  }
412  case '-': { /* '-' or '--' (comment) */
413  next(ls);
414  if (ls->current != '-') return '-';
415  /* else is a comment */
416  next(ls);
417  if (ls->current == '[') { /* long comment? */
418  int sep = skip_sep(ls);
419  luaZ_resetbuffer(ls->buff); /* `skip_sep' may dirty the buffer */
420  if (sep >= 0) {
421  read_long_string(ls, NULL, sep); /* skip long comment */
422  luaZ_resetbuffer(ls->buff); /* previous call may dirty the buff. */
423  break;
424  }
425  }
426  /* else short comment */
427  while (!currIsNewline(ls) && ls->current != EOZ)
428  next(ls); /* skip until end of line (or end of file) */
429  break;
430  }
431  case '[': { /* long string or simply '[' */
432  int sep = skip_sep(ls);
433  if (sep >= 0) {
434  read_long_string(ls, seminfo, sep);
435  return TK_STRING;
436  }
437  else if (sep == -1) return '[';
438  else lexerror(ls, "invalid long string delimiter", TK_STRING);
439  }
440  case '=': {
441  next(ls);
442  if (ls->current != '=') return '=';
443  else { next(ls); return TK_EQ; }
444  }
445  case '<': {
446  next(ls);
447  if (ls->current != '=') return '<';
448  else { next(ls); return TK_LE; }
449  }
450  case '>': {
451  next(ls);
452  if (ls->current != '=') return '>';
453  else { next(ls); return TK_GE; }
454  }
455  case '~': {
456  next(ls);
457  if (ls->current != '=') return '~';
458  else { next(ls); return TK_NE; }
459  }
460  case ':': {
461  next(ls);
462  if (ls->current != ':') return ':';
463  else { next(ls); return TK_DBCOLON; }
464  }
465  case '"': case '\'': { /* short literal strings */
466  read_string(ls, ls->current, seminfo);
467  return TK_STRING;
468  }
469  case '.': { /* '.', '..', '...', or number */
470  save_and_next(ls);
471  if (check_next(ls, ".")) {
472  if (check_next(ls, "."))
473  return TK_DOTS; /* '...' */
474  else return TK_CONCAT; /* '..' */
475  }
476  else if (!lisdigit(ls->current)) return '.';
477  /* else go through */
478  }
479  case '0': case '1': case '2': case '3': case '4':
480  case '5': case '6': case '7': case '8': case '9': {
481  read_numeral(ls, seminfo);
482  return TK_NUMBER;
483  }
484  case EOZ: {
485  return TK_EOS;
486  }
487  default: {
488  if (lislalpha(ls->current)) { /* identifier or reserved word? */
489  TString *ts;
490  do {
491  save_and_next(ls);
492  } while (lislalnum(ls->current));
493  ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
494  luaZ_bufflen(ls->buff));
495  seminfo->ts = ts;
496  if (isreserved(ts)) /* reserved word? */
497  return ts->tsv.extra - 1 + FIRST_RESERVED;
498  else {
499  return TK_NAME;
500  }
501  }
502  else { /* single-char tokens (+ - / ...) */
503  int c = ls->current;
504  next(ls);
505  return c;
506  }
507  }
508  }
509  }
510 }
511 
512 
513 void luaX_next (LexState *ls) {
514  ls->lastline = ls->linenumber;
515  if (ls->lookahead.token != TK_EOS) { /* is there a look-ahead token? */
516  ls->t = ls->lookahead; /* use this one */
517  ls->lookahead.token = TK_EOS; /* and discharge it */
518  }
519  else
520  ls->t.token = llex(ls, &ls->t.seminfo); /* read next token */
521 }
522 
523 
526  ls->lookahead.token = llex(ls, &ls->lookahead.seminfo);
527  return ls->lookahead.token;
528 }
529 
char decpoint
Definition: llex.h:63
#define luaZ_resetbuffer(buff)
Definition: lzio.h:34
#define MAX_SIZET
Definition: llimits.h:29
GLdouble GLdouble z
Definition: glew.h:1527
#define isreserved(s)
Definition: lstring.h:27
#define currIsNewline(ls)
Definition: llex.cpp:31
TString * envn
Definition: llex.h:62
#define lislalnum(c)
Definition: lctype.h:83
void luaX_next(LexState *ls)
Definition: llex.cpp:513
#define lisprint(c)
Definition: lctype.h:86
void set(CURSOR_TYPE type)
Use the default parameter to reset cursors.
Definition: cursor.cpp:154
Definition: llex.h:29
static void read_numeral(LexState *ls, SemInfo *seminfo)
Definition: llex.cpp:231
#define setbvalue(obj, x)
Definition: lobject.h:197
const GLfloat * c
Definition: glew.h:12741
Definition: llex.h:36
TString * ts
Definition: llex.h:38
int linenumber
Definition: llex.h:52
int current
Definition: llex.h:51
#define luaS_fix(s)
Definition: lstring.h:21
int token
Definition: llex.h:43
#define cast(t, exp)
Definition: llimits.h:92
#define LUA_MINBUFFER
Definition: llimits.h:149
#define ttisnil(o)
Definition: lobject.h:133
#define cast_byte(i)
Definition: llimits.h:94
#define rawtsvalue(o)
Definition: lobject.h:155
Token lookahead
Definition: llex.h:55
#define l_noret
Definition: llimits.h:108
Definition: llex.h:28
#define keyfromval(v)
Definition: ltable.h:20
TValue * luaH_set(lua_State *L, Table *t, const TValue *key)
Definition: ltable.cpp:509
Definition: llex.h:28
l_noret luaX_syntaxerror(LexState *ls, const char *msg)
Definition: llex.cpp:113
Token t
Definition: llex.h:54
Definition: llex.h:28
TString * luaS_new(lua_State *L, const char *str)
Definition: lstring.cpp:169
GLdouble l
Definition: glew.h:6966
#define luaZ_resizebuffer(L, buff, size)
Definition: lzio.h:37
StkId top
Definition: lstate.h:156
GLdouble GLdouble GLdouble b
Definition: glew.h:6966
Definition: llex.h:28
static void read_long_string(LexState *ls, SemInfo *seminfo, int sep)
Definition: llex.cpp:269
Definition: llex.h:29
SemInfo seminfo
Definition: llex.h:44
#define getstr(ts)
Definition: lobject.h:421
#define lisdigit(c)
Definition: lctype.h:84
TString * luaX_newstring(LexState *ls, const char *str, size_t l)
Definition: llex.cpp:123
static int check_next(LexState *ls, const char *set)
Definition: llex.cpp:184
lu_byte extra
Definition: lobject.h:413
#define LUA_ENV
Definition: luaconf.h:134
static int skip_sep(LexState *ls)
Definition: llex.cpp:256
#define LUA_QL(x)
Definition: luaconf.h:198
static const char * txtToken(LexState *ls, int token)
Definition: llex.cpp:90
void luaX_setinput(lua_State *L, LexState *ls, ZIO *z, TString *source, int firstchar)
Definition: llex.cpp:158
static l_noret lexerror(LexState *ls, const char *msg, int token)
Definition: llex.cpp:103
static void read_string(LexState *ls, int del, SemInfo *seminfo)
Definition: llex.cpp:342
void luaX_init(lua_State *L)
Definition: llex.cpp:64
struct FuncState * fs
Definition: llex.h:56
#define buff2d(b, e)
Definition: llex.cpp:208
Definition: llex.h:28
static int llex(LexState *ls, SemInfo *seminfo)
Definition: llex.cpp:400
GLfloat GLfloat p
Definition: glew.h:12766
GLuint GLuint GLsizei count
Definition: glew.h:1221
const char * luaX_token2str(LexState *ls, int token)
Definition: llex.cpp:74
#define lisxdigit(c)
Definition: lctype.h:87
l_noret luaD_throw(lua_State *L, int errcode)
Definition: ldo.cpp:125
static int readhexaesc(LexState *ls)
Definition: llex.cpp:314
Definition: lzio.h:53
static const char *const luaX_tokens[]
Definition: llex.cpp:35
#define getlocaledecpoint()
Definition: llex.cpp:204
#define lua_assert(c)
Definition: llimits.h:65
#define LUA_QS
Definition: luaconf.h:199
TString * source
Definition: llex.h:61
static int readdecesc(LexState *ls)
Definition: llex.cpp:328
Definition: llex.h:50
size_t i
Definition: function.cpp:1057
#define LUA_ERRSYNTAX
Definition: lua.h:47
static void msg(const char *act, debug_info &i, const char *to="", const char *result="")
Definition: debugger.cpp:112
GLdouble GLdouble GLdouble r
Definition: glew.h:1374
struct TString::@7 tsv
char * buffer
Definition: lzio.h:23
static void save(LexState *ls, int c)
Definition: llex.cpp:51
#define MAX_INT
Definition: llimits.h:36
static void escerror(LexState *ls, int *c, int n, const char *msg)
Definition: llex.cpp:304
const char * luaO_pushfstring(lua_State *L, const char *fmt,...)
Definition: lobject.cpp:232
Table * h
Definition: lparser.h:97
lua_Number r
Definition: llex.h:37
int luaO_hexavalue(int c)
Definition: lobject.cpp:86
void luaO_chunkid(char *out, const char *source, size_t bufflen)
Definition: lobject.cpp:251
int luaX_lookahead(LexState *ls)
Definition: llex.cpp:524
#define next(ls)
Definition: llex.cpp:27
#define NUM_RESERVED
Definition: llex.h:33
static void inclinenumber(LexState *ls)
Definition: llex.cpp:147
GLclampd n
Definition: glew.h:5903
static void buffreplace(LexState *ls, char from, char to)
Definition: llex.cpp:195
Definition: llex.h:28
#define FIRST_RESERVED
Definition: llex.h:13
struct lua_State * L
Definition: llex.h:57
static void trydecpoint(LexState *ls, SemInfo *seminfo)
Definition: llex.cpp:214
#define EOZ
Definition: lzio.h:15
#define luaC_checkGC(L)
Definition: lgc.h:123
#define lislalpha(c)
Definition: lctype.h:82
#define luaZ_sizebuffer(buff)
Definition: lzio.h:31
GLint * first
Definition: glew.h:1496
#define c
Definition: glew.h:12743
#define save_and_next(ls)
Definition: llex.cpp:45
Definition: lzio.h:22
TString * luaS_newlstr(lua_State *L, const char *str, size_t l)
Definition: lstring.cpp:155
Definition: llex.h:28
GLdouble s
Definition: glew.h:1358
#define setsvalue2s
Definition: lobject.h:253
Mbuffer * buff
Definition: llex.h:59
#define lisspace(c)
Definition: lctype.h:85
GLsizei GLsizei GLchar * source
Definition: glew.h:1800
#define luaZ_bufflen(buff)
Definition: lzio.h:32
#define LUA_IDSIZE
Definition: luaconf.h:207
Definition: llex.h:29
#define luaZ_buffer(buff)
Definition: lzio.h:30
ZIO * z
Definition: llex.h:58
int lastline
Definition: llex.h:53