diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-10-28 16:41:38 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2014-10-28 16:41:38 -0200 |
commit | 59fbbf0a65d4729b65adf07b4d8b4770495cc9b8 (patch) | |
tree | 7aca29d7435bcc4c76e70016cf4f1e4753e82639 /lobject.c | |
parent | 61c3c80177de00576620d79d586eb57d8723ee1a (diff) | |
download | lua-59fbbf0a65d4729b65adf07b4d8b4770495cc9b8.tar.gz lua-59fbbf0a65d4729b65adf07b4d8b4770495cc9b8.tar.bz2 lua-59fbbf0a65d4729b65adf07b4d8b4770495cc9b8.zip |
small simplifications in code for 'lua_strx2number'
Diffstat (limited to 'lobject.c')
-rw-r--r-- | lobject.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lobject.c,v 2.95 2014/10/25 11:50:46 roberto Exp roberto $ | 2 | ** $Id: lobject.c,v 2.96 2014/10/27 19:21:56 roberto Exp roberto $ |
3 | ** Some generic functions over Lua objects | 3 | ** Some generic functions over Lua objects |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -162,8 +162,13 @@ static int isneg (const char **s) { | |||
162 | } | 162 | } |
163 | 163 | ||
164 | 164 | ||
165 | /* Lua's implementation for 'lua_strx2number' */ | 165 | |
166 | #if !defined(lua_strx2number) /* { */ | 166 | /* |
167 | ** {================================================================== | ||
168 | ** Lua's implementation for 'lua_strx2number' | ||
169 | ** =================================================================== | ||
170 | */ | ||
171 | #if !defined(lua_strx2number) | ||
167 | 172 | ||
168 | #include <math.h> | 173 | #include <math.h> |
169 | 174 | ||
@@ -193,18 +198,12 @@ static lua_Number lua_strx2number (const char *s, char **endptr) { | |||
193 | else dot = 1; | 198 | else dot = 1; |
194 | } | 199 | } |
195 | else if (lisxdigit(cast_uchar(*s))) { | 200 | else if (lisxdigit(cast_uchar(*s))) { |
196 | if (sigdig == 0 && *s == '0') { /* non-significant zero? */ | 201 | if (sigdig == 0 && *s == '0') /* non-significant digit (zero)? */ |
197 | nosigdig++; | 202 | nosigdig++; |
198 | if (dot) e--; /* zero after dot? correct exponent */ | 203 | else if (++sigdig <= MAXSIGDIG) /* can read it without overflow? */ |
199 | } | ||
200 | else { | ||
201 | if (++sigdig <= MAXSIGDIG) { /* can read it without overflow? */ | ||
202 | r = (r * cast_num(16.0)) + luaO_hexavalue(cast_uchar(*s)); | 204 | r = (r * cast_num(16.0)) + luaO_hexavalue(cast_uchar(*s)); |
203 | if (dot) e--; /* decimal digit */ | 205 | else e++; /* too many digits; ignore, but still count for exponent */ |
204 | } | 206 | if (dot) e--; /* decimal digit? correct exponent */ |
205 | else /* too many digits; ignore */ | ||
206 | if (!dot) e++; /* still count it for exponent */ | ||
207 | } | ||
208 | } | 207 | } |
209 | else break; /* neither a dot nor a digit */ | 208 | else break; /* neither a dot nor a digit */ |
210 | } | 209 | } |
@@ -229,8 +228,7 @@ static lua_Number lua_strx2number (const char *s, char **endptr) { | |||
229 | return l_mathop(ldexp)(r, e); | 228 | return l_mathop(ldexp)(r, e); |
230 | } | 229 | } |
231 | 230 | ||
232 | #endif /* } */ | 231 | #endif |
233 | |||
234 | /* }====================================================== */ | 232 | /* }====================================================== */ |
235 | 233 | ||
236 | 234 | ||