From 6daaaae7c2379394aa138bb5685f401ecfcab2e0 Mon Sep 17 00:00:00 2001 From: Garritt McCune Date: Wed, 16 Mar 2022 00:00:17 -0500 Subject: [PATCH] Fixed a bug when the scanner parses a number and creates the token. --- scanner.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scanner.c b/scanner.c index 4dbf79d..6c5c030 100644 --- a/scanner.c +++ b/scanner.c @@ -1,5 +1,6 @@ #include "scanner.h" #include "token.h" +#include const char* source_code; //Start and Current hold the offsets that index into the string source_code. @@ -245,9 +246,17 @@ void ParseNumber(TokenList* list) { } snprintf(lexeme, current - start, "%s", &source_code[start]); - double value = atof(lexeme); //Will this reference become stale on return? + double* value = calloc(1, sizeof(double)); + + if (!value) { + fprintf(stderr, "Failed to calloc for number value. %s\n", strerror(errno)); + free(lexeme); + return; + } + + *value = atof(lexeme); - AddToTokenList(CreateToken(lexeme, &value, line, Number), list); + AddToTokenList(CreateToken(lexeme, value, line, Number), list); } char PeekNext() {