diff --git a/src/tokens.c b/src/tokens.c index f0bdc135..fd166234 100644 --- a/src/tokens.c +++ b/src/tokens.c @@ -20,10 +20,14 @@ void tokenized_string_add_token(tokenized_string_t *self, const char *src, size_ } -tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens) { +tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens, bool copy_tokens) { tokenized_string_t *self = malloc(sizeof(tokenized_string_t)); self->str = cstring_array_new_size(strlen(src) + tokens->n); - self->tokens = tokens; + if (copy_tokens) { + self->tokens = token_array_new_copy(tokens);; + } else { + self->tokens = tokens; + } token_t token; diff --git a/src/tokens.h b/src/tokens.h index 0737aedf..8ef44fe4 100644 --- a/src/tokens.h +++ b/src/tokens.h @@ -26,7 +26,7 @@ typedef struct tokenized_string { } tokenized_string_t; tokenized_string_t *tokenized_string_new(void); -tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens); +tokenized_string_t *tokenized_string_from_tokens(char *src, token_array *tokens, bool copy_tokens); void tokenized_string_add_token(tokenized_string_t *self, const char *src, size_t len, uint16_t token_type, size_t position); char *tokenized_string_get_token(tokenized_string_t *self, uint32_t index); void tokenized_string_destroy(tokenized_string_t *self);