diff options
Diffstat (limited to 'src/lj_lex.c')
-rw-r--r-- | src/lj_lex.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/lj_lex.c b/src/lj_lex.c index ac0d1e95..78458572 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c | |||
@@ -170,10 +170,15 @@ static void lex_number(LexState *ls, TValue *tv) | |||
170 | if (c == 'I') { /* Return cdata holding a complex number. */ | 170 | if (c == 'I') { /* Return cdata holding a complex number. */ |
171 | GCcdata *cd = lj_cdata_new_(ls->L, CTID_COMPLEX_DOUBLE, 2*sizeof(double)); | 171 | GCcdata *cd = lj_cdata_new_(ls->L, CTID_COMPLEX_DOUBLE, 2*sizeof(double)); |
172 | ((double *)cdataptr(cd))[0] = 0; | 172 | ((double *)cdataptr(cd))[0] = 0; |
173 | ((double *)cdataptr(cd))[1] = tv->n; | 173 | ((double *)cdataptr(cd))[1] = numberVnum(tv); |
174 | lj_parse_keepcdata(ls, tv, cd); | 174 | lj_parse_keepcdata(ls, tv, cd); |
175 | } | 175 | } |
176 | #endif | 176 | #endif |
177 | if (LJ_DUALNUM && tvisnum(tv)) { | ||
178 | int32_t k = lj_num2int(numV(tv)); | ||
179 | if ((lua_Number)k == numV(tv)) /* -0 cannot end up here. */ | ||
180 | setintV(tv, k); | ||
181 | } | ||
177 | return; | 182 | return; |
178 | } | 183 | } |
179 | lj_lex_error(ls, TK_number, LJ_ERR_XNUMBER); | 184 | lj_lex_error(ls, TK_number, LJ_ERR_XNUMBER); |
@@ -506,7 +511,7 @@ void lj_lex_init(lua_State *L) | |||
506 | for (i = 0; i < TK_RESERVED; i++) { | 511 | for (i = 0; i < TK_RESERVED; i++) { |
507 | GCstr *s = lj_str_newz(L, tokennames[i]); | 512 | GCstr *s = lj_str_newz(L, tokennames[i]); |
508 | fixstring(s); /* Reserved words are never collected. */ | 513 | fixstring(s); /* Reserved words are never collected. */ |
509 | s->reserved = cast_byte(i+1); | 514 | s->reserved = (uint8_t)(i+1); |
510 | } | 515 | } |
511 | } | 516 | } |
512 | 517 | ||