[Mesa-dev] [PATCH 07/15] glcpp: use the linear allocator for most objects
Marek Olšák
maraeo at gmail.com
Wed Oct 12 13:59:47 UTC 2016
On Wed, Oct 12, 2016 at 3:11 PM, Nicolai Hähnle <nhaehnle at gmail.com> wrote:
> On 08.10.2016 12:58, Marek Olšák wrote:
>>
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> ---
>> src/compiler/glsl/glcpp/glcpp-lex.l | 2 +-
>> src/compiler/glsl/glcpp/glcpp-parse.y | 203
>> +++++++++++++++-------------------
>> src/compiler/glsl/glcpp/glcpp.h | 1 +
>> 3 files changed, 94 insertions(+), 112 deletions(-)
>>
>> diff --git a/src/compiler/glsl/glcpp/glcpp-lex.l
>> b/src/compiler/glsl/glcpp/glcpp-lex.l
>> index d09441a..f4a6876 100644
>> --- a/src/compiler/glsl/glcpp/glcpp-lex.l
>> +++ b/src/compiler/glsl/glcpp/glcpp-lex.l
>
> [snip]
>
>> @@ -1002,51 +994,50 @@ _token_list_append_list(token_list_t *list,
>> token_list_t *tail)
>> list->head = tail->head;
>> } else {
>> list->tail->next = tail->head;
>> }
>>
>> list->tail = tail->tail;
>> list->non_space_tail = tail->non_space_tail;
>> }
>>
>> static token_list_t *
>> -_token_list_copy(void *ctx, token_list_t *other)
>> +_token_list_copy(glcpp_parser_t *parser, token_list_t *other)
>> {
>> token_list_t *copy;
>> token_node_t *node;
>>
>> if (other == NULL)
>> return NULL;
>>
>> - copy = _token_list_create (ctx);
>> + copy = _token_list_create (parser);
>> for (node = other->head; node; node = node->next) {
>> - token_t *new_token = ralloc (copy, token_t);
>> + token_t *new_token = linear_alloc_child(parser->linalloc,
>> sizeof(token_t));
>> *new_token = *node->token;
>> - _token_list_append (copy, new_token);
>> + _token_list_append (parser, copy, new_token);
>> }
>>
>> return copy;
>> }
>>
>> static void
>> _token_list_trim_trailing_space(token_list_t *list)
>> {
>> token_node_t *tail, *next;
>>
>> if (list->non_space_tail) {
>> tail = list->non_space_tail->next;
>> list->non_space_tail->next = NULL;
>> list->tail = list->non_space_tail;
>>
>> while (tail) {
>> next = tail->next;
>> - ralloc_free (tail);
>> tail = next;
>> }
>
>
> This whole loop can be dropped now.
>
>
>> }
>> }
>>
>> static int
>> _token_list_is_empty_ignoring_space(token_list_t *l)
>> {
>> token_node_t *n;
>>
>> @@ -1177,69 +1168,70 @@ _token_print(char **out, size_t *len, token_t
>> *token)
>> case PLACEHOLDER:
>> /* Nothing to print. */
>> break;
>> default:
>> assert(!"Error: Don't know how to print token.");
>>
>> break;
>> }
>> }
>>
>> -/* Return a new token (ralloc()ed off of 'token') formed by pasting
>> - * 'token' and 'other'. Note that this function may return 'token' or
>> - * 'other' directly rather than allocating anything new.
>> +/* Return a new token formed by pasting 'token' and 'other'. Note that
>> this
>> + * function may return 'token' or 'other' directly rather than allocating
>> + * anything new.
>> *
>> * Caution: Only very cursory error-checking is performed to see if
>> * the final result is a valid single token. */
>> static token_t *
>> -_token_paste(glcpp_parser_t *parser, token_t *token, token_t *other)
>> +_token_paste(glcpp_parser_t *parser, token_list_t *list, token_t *token,
>> + token_t *other)
>
>
> I seem to be blind... where is list used?
It's probably a leftover from my initial work where each list was a
linear parent, but then I reworked it to use only one linear parent
per parser instance.
Marek
More information about the mesa-dev
mailing list