Finish fixing thousand separator bug.
[INTERPRETER] * BUG: Finish fixing thousand separator bug.
This commit is contained in:
parent
6f6224a9c1
commit
80595fe5fa
3 changed files with 25 additions and 9 deletions
|
@ -47,6 +47,7 @@
|
||||||
#define get_current COMMON_get_current
|
#define get_current COMMON_get_current
|
||||||
#define buffer_pos COMMON_pos
|
#define buffer_pos COMMON_pos
|
||||||
#define get_size_left COMMON_get_size_left
|
#define get_size_left COMMON_get_size_left
|
||||||
|
#define has_string COMMON_has_string
|
||||||
|
|
||||||
#define IS_PURE_INTEGER(_int64_val) ((_int64_val) == ((int)(_int64_val)))
|
#define IS_PURE_INTEGER(_int64_val) ((_int64_val) == ((int)(_int64_val)))
|
||||||
|
|
||||||
|
@ -54,11 +55,13 @@ static bool read_integer(int base, bool minus, int64_t *result, bool local)
|
||||||
{
|
{
|
||||||
uint64_t nbr2, nbr;
|
uint64_t nbr2, nbr;
|
||||||
int d, n, c, nmax;
|
int d, n, c, nmax;
|
||||||
char thsep;
|
const char *thsep;
|
||||||
|
int lthsep;
|
||||||
int ndigit_thsep;
|
int ndigit_thsep;
|
||||||
bool first_thsep;
|
bool first_thsep;
|
||||||
|
|
||||||
thsep = LOCAL_get(local)->thousand_sep;
|
thsep = LOCAL_get(local)->thousand_sep;
|
||||||
|
lthsep = LOCAL_get(local)->len_thousand_sep;
|
||||||
ndigit_thsep = 0;
|
ndigit_thsep = 0;
|
||||||
first_thsep = FALSE;
|
first_thsep = FALSE;
|
||||||
|
|
||||||
|
@ -81,8 +84,9 @@ static bool read_integer(int base, bool minus, int64_t *result, bool local)
|
||||||
{
|
{
|
||||||
if (local)
|
if (local)
|
||||||
{
|
{
|
||||||
if (c == thsep && (ndigit_thsep == 3 || (!first_thsep && ndigit_thsep >= 1 && ndigit_thsep <= 3)))
|
if (has_string(thsep, lthsep) && (ndigit_thsep == 3 || (!first_thsep && ndigit_thsep >= 1 && ndigit_thsep <= 3)))
|
||||||
{
|
{
|
||||||
|
COMMON_pos += lthsep;
|
||||||
c = get_char();
|
c = get_char();
|
||||||
first_thsep = TRUE;
|
first_thsep = TRUE;
|
||||||
ndigit_thsep = 0;
|
ndigit_thsep = 0;
|
||||||
|
@ -184,7 +188,8 @@ static bool read_float(double *result, bool local)
|
||||||
{
|
{
|
||||||
LOCAL_INFO *local_info;
|
LOCAL_INFO *local_info;
|
||||||
char point;
|
char point;
|
||||||
char thsep;
|
const char *thsep;
|
||||||
|
int lthsep;
|
||||||
int ndigit_thsep;
|
int ndigit_thsep;
|
||||||
bool first_thsep;
|
bool first_thsep;
|
||||||
int c, n;
|
int c, n;
|
||||||
|
@ -201,6 +206,7 @@ static bool read_float(double *result, bool local)
|
||||||
local_info = LOCAL_get(local);
|
local_info = LOCAL_get(local);
|
||||||
point = local_info->decimal_point;
|
point = local_info->decimal_point;
|
||||||
thsep = local_info->thousand_sep;
|
thsep = local_info->thousand_sep;
|
||||||
|
lthsep = local_info->len_thousand_sep;
|
||||||
ndigit_thsep = 0;
|
ndigit_thsep = 0;
|
||||||
first_thsep = FALSE;
|
first_thsep = FALSE;
|
||||||
|
|
||||||
|
@ -231,11 +237,12 @@ static bool read_float(double *result, bool local)
|
||||||
|
|
||||||
if (local && !frac)
|
if (local && !frac)
|
||||||
{
|
{
|
||||||
if (c == thsep && (ndigit_thsep == 3 || (!first_thsep && ndigit_thsep >= 1 && ndigit_thsep <= 3)))
|
if (has_string(thsep, lthsep) && (ndigit_thsep == 3 || (!first_thsep && ndigit_thsep >= 1 && ndigit_thsep <= 3)))
|
||||||
{
|
{
|
||||||
c = get_char();
|
COMMON_pos += lthsep;
|
||||||
first_thsep = TRUE;
|
first_thsep = TRUE;
|
||||||
ndigit_thsep = 0;
|
ndigit_thsep = 0;
|
||||||
|
c = get_char();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#ifndef __GB_COMMON_BUFFER_H
|
#ifndef __GB_COMMON_BUFFER_H
|
||||||
#define __GB_COMMON_BUFFER_H
|
#define __GB_COMMON_BUFFER_H
|
||||||
|
|
||||||
#define COMMON_BUF_MAX 256
|
#define COMMON_BUF_MAX 512
|
||||||
|
|
||||||
#ifndef __COMMON_BUFFER_C
|
#ifndef __COMMON_BUFFER_C
|
||||||
EXTERN int COMMON_pos;
|
EXTERN int COMMON_pos;
|
||||||
|
@ -42,4 +42,5 @@ int COMMON_put_char(char c);
|
||||||
void COMMON_jump_space(void);
|
void COMMON_jump_space(void);
|
||||||
char *COMMON_get_current(void);
|
char *COMMON_get_current(void);
|
||||||
int COMMON_get_size_left(void);
|
int COMMON_get_size_left(void);
|
||||||
|
bool COMMON_has_string(const char *str, int len);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -24,17 +24,18 @@
|
||||||
#define __COMMON_BUFFER_C
|
#define __COMMON_BUFFER_C
|
||||||
|
|
||||||
#include "gb_common.h"
|
#include "gb_common.h"
|
||||||
|
#include "gb_common_buffer.h"
|
||||||
|
|
||||||
char COMMON_buffer[256];
|
char COMMON_buffer[COMMON_BUF_MAX];
|
||||||
int COMMON_pos;
|
int COMMON_pos;
|
||||||
int COMMON_len;
|
int COMMON_len;
|
||||||
|
|
||||||
static char *common_buffer;
|
static char *common_buffer;
|
||||||
static int common_last;
|
static int common_last;
|
||||||
|
|
||||||
void COMMON_buffer_init(char *str, int len)
|
void COMMON_buffer_init(const char *str, int len)
|
||||||
{
|
{
|
||||||
common_buffer = str;
|
common_buffer = (char *)str;
|
||||||
COMMON_len = len;
|
COMMON_len = len;
|
||||||
COMMON_pos = 0;
|
COMMON_pos = 0;
|
||||||
common_last = (-1);
|
common_last = (-1);
|
||||||
|
@ -103,3 +104,10 @@ int COMMON_get_size_left(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool COMMON_has_string(const char *str, int len)
|
||||||
|
{
|
||||||
|
if (COMMON_get_size_left() > len)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return memcmp(&common_buffer[COMMON_pos], str, len) == 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue