From 7554c6f385ec27a2ded2119f8941e25c8dbd13e6 Mon Sep 17 00:00:00 2001 From: herbglitch Date: Tue, 12 Nov 2024 13:07:23 -0700 Subject: [PATCH] copies tagOrtoken and frees it now --- src/std/parser.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/std/parser.c b/src/std/parser.c index 6f38228..355f97e 100644 --- a/src/std/parser.c +++ b/src/std/parser.c @@ -26,6 +26,13 @@ void ARC_Parser_Create(ARC_Parser **parser, ARC_Array *language, ARC_Parser_Init (*parser)->language.data = malloc(sizeof(ARC_ParserLanguageTag) * language->size); memcpy((*parser)->language.data, language->data, sizeof(ARC_ParserLanguageTag) * language->size); + for(uint32_t index = 0; index < language->size; index++){ + ARC_ParserLanguageTag *languageTag = ((ARC_ParserLanguageTag *)language->data) + index; + ARC_ParserLanguageTag *currentTag = ((ARC_ParserLanguageTag *)(*parser)->language.data) + index; + + //copy the currentTag's tokenOrTags + memcpy(currentTag->tokensOrTags, languageTag->tokensOrTags, languageTag->tokensOrTagsSize); + } } //create the lexer @@ -39,6 +46,13 @@ void ARC_Parser_CreateFromString(ARC_Parser **parser, ARC_String *languageString } void ARC_Parser_Destroy(ARC_Parser *parser){ + //clear all the copied token or tags from memory + for(uint32_t index = 0; index < parser->language.size; index++){ + ARC_ParserLanguageTag *currentTag = ((ARC_ParserLanguageTag *)parser->language.data) + index; + free(currentTag->tokensOrTags); + } + + //clear the copied language from memory free(parser->language.data); ARC_Lexer_Destroy(parser->lexer);