From 2726fb279cc98f330e8eaabac2b67b0a02213879 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Mon, 15 Aug 2016 23:42:49 -0500 Subject: [PATCH] fix get_num --- C/scanner.c | 5 ++--- C/text.c | 10 +++++++++- os/chartypes.c | 3 --- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/C/scanner.c b/C/scanner.c index 3187c7c1d..eddf7754f 100755 --- a/C/scanner.c +++ b/C/scanner.c @@ -1119,10 +1119,9 @@ Term Yap_scan_num(StreamDesc *inp) { LOCAL_Error_TYPE = RESOURCE_ERROR_TRAIL; return 0; } + while (iswblank( ch = getchr(inp) )); TokEntry *tokptr = (TokEntry *)AllocScannerMemory(sizeof(TokEntry)); tokptr->TokPos = GetCurInpPos(inp); - while ((ch = getchr(inp)) == BS) - ; if (ch == '-') { sign = -1; ch = getchr(inp); @@ -1133,7 +1132,7 @@ Term Yap_scan_num(StreamDesc *inp) { cherr = '\0'; if (ASP - HR < 1024) { Yap_clean_tokenizer(old_tr, NULL, NULL); - LOCAL_ErrorMessage = "Stack Overflow"; + LOCAL_ErrorMessage = "Stack Overflow"; LOCAL_Error_TYPE = RESOURCE_ERROR_STACK; return 0; } diff --git a/C/text.c b/C/text.c index 168686a6d..f0a93f93c 100644 --- a/C/text.c +++ b/C/text.c @@ -41,7 +41,11 @@ void *buf__, *cur__; void *ov__ = TR, *ocur__ = LOCAL_ScannerStack; \ if (!LOCAL_ScannerStack) LOCAL_ScannerStack = (char *)TR -#define protect_stack(s) +#define mark_stack() \ +void *otr__ = TR; void * ost__ = LOCAL_ScannerStack; TR =(tr_fr_ptr)LOCAL_ScannerStack + +#define restore_stack() \ + TR = otr__; LOCAL_ScannerStack = ost__ #define export_buf(s) {} @@ -672,15 +676,19 @@ static size_t write_length(const unsigned char *s0, seq_tv_t *out, static Term write_number( unsigned char *s, seq_tv_t *out, int size USES_REGS) { Term t; + mark_stack(); t = Yap_StringToNumberTerm((char *)s, &out->enc); + restore_stack(); return t; } static Term string_to_term(void *s, seq_tv_t *out, size_t leng USES_REGS) { Term o; + mark_stack(); o = out->val.t = Yap_StringToTerm(s, strlen(s) + 1, &out->enc, GLOBAL_MaxPriority, NULL); + restore_stack(); return o; } diff --git a/os/chartypes.c b/os/chartypes.c index f87652d9a..a0a836809 100644 --- a/os/chartypes.c +++ b/os/chartypes.c @@ -94,9 +94,6 @@ Term Yap_StringToNumberTerm(const char *s, encoding_t *encp) { #ifdef __ANDROID__ while (*s && isblank(*s) && Yap_wide_chtype(*s) == BS) s++; -#else - while (*s && iswblank(*s++)) - ; #endif t = Yap_scan_num(GLOBAL_Stream + sno); if (LOCAL_Error_TYPE == SYNTAX_ERROR)