--- C:/Users/John/AppData/Local/Temp/lobject.c-revBASE.svn000.tmp.c Sat Aug 4 14:44:36 2012 +++ E:/Projects/Grunt/Grunt/LuaSrc/lobject.c Sat Aug 4 14:52:06 2012 @@ -154,6 +154,29 @@ #endif +#if defined(JH_LUA_BINCONST) +static lua_Number lua_strb2number (const char *s, char **endptr) { + lua_Number r = 0.0; + int i = 0; int f = 0; + *endptr = cast(char *, s); /* nothing is valid yet */ + while (lisspace(cast_uchar(*s))) s++; /* skip initial spaces */ + if (!(*s == '0' && (*(s + 1) == 'b' || *(s + 1) == 'B'))) /* check '0b' */ + return 0.0; /* invalid format (no '0b') */ + s += 2; /* skip '0b' */ + while ((*s == '0') || (*s == '1')) + { + f = 0; + r *= 2.0; + if (*s == '1') r += 1.0; + i++; s++; + while (*s == '_') {s++; f = 1;} + } + if ((i == 0) || (f> 0)) + return 0.0; /* invalid format */ + *endptr = cast(char *, s); /* valid up to here */ + return r; +} +#endif int luaO_str2d (const char *s, size_t len, lua_Number *result) { char *endptr; @@ -161,6 +184,10 @@ return 0; else if (strpbrk(s, "xX")) /* hexa? */ *result = lua_strx2number(s, &endptr); +#if defined(JH_LUA_BINCONST) + else if (strpbrk(s, "bB")) /* bina? */ + *result = lua_strb2number(s, &endptr); +#endif else *result = lua_str2number(s, &endptr); if (endptr == s) return 0; /* nothing recognized */ --- C:/Users/John/AppData/Local/Temp/llex.c-revBASE.svn001.tmp.c Sat Aug 4 14:44:36 2012 +++ E:/Projects/Grunt/Grunt/LuaSrc/llex.c Sat Aug 4 14:54:49 2012 @@ -236,7 +236,11 @@ for (;;) { if (check_next(ls, expo)) /* exponent part? */ check_next(ls, "+-"); /* optional exponent sign */ +#if defined(JH_LUA_BINCONST) + if (lisxdigit(ls->current) || ls->current == '.' || ls->current == '_') +#else if (lisxdigit(ls->current) || ls->current == '.') +#endif save_and_next(ls); else break; }