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);