mirror of
https://github.com/JakeHillion/drgn.git
synced 2024-12-23 01:33:06 +00:00
9f9bec4762
This converts several open-coded dynamic arrays to the new common vector implementation: - drgn_lexer stack - Array dimension array for DWARF parsing - drgn_program_read_c_string() - DWARF index directory name hashes - DWARF index file name hashes - DWARF index abbreviation table - DWARF index shard entries
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
// Copyright 2018-2019 - Omar Sandoval
|
|
// SPDX-License-Identifier: GPL-3.0+
|
|
|
|
#include "internal.h"
|
|
#include "lexer.h"
|
|
|
|
DEFINE_VECTOR_FUNCTIONS(drgn_token_vector)
|
|
|
|
void drgn_lexer_init(struct drgn_lexer *lexer, drgn_lexer_func func,
|
|
const char *str)
|
|
{
|
|
lexer->func = func;
|
|
lexer->p = str;
|
|
drgn_token_vector_init(&lexer->stack);
|
|
}
|
|
|
|
void drgn_lexer_deinit(struct drgn_lexer *lexer)
|
|
{
|
|
drgn_token_vector_deinit(&lexer->stack);
|
|
}
|
|
|
|
struct drgn_error *drgn_lexer_pop(struct drgn_lexer *lexer,
|
|
struct drgn_token *token)
|
|
{
|
|
if (lexer->stack.size) {
|
|
*token = *drgn_token_vector_pop(&lexer->stack);
|
|
return NULL;
|
|
} else {
|
|
return lexer->func(lexer, token);
|
|
}
|
|
}
|
|
|
|
struct drgn_error *drgn_lexer_push(struct drgn_lexer *lexer,
|
|
const struct drgn_token *token)
|
|
{
|
|
if (!drgn_token_vector_append(&lexer->stack, token))
|
|
return &drgn_enomem;
|
|
return NULL;
|
|
}
|
|
|
|
struct drgn_error *drgn_lexer_peek(struct drgn_lexer *lexer,
|
|
struct drgn_token *token)
|
|
{
|
|
struct drgn_error *err;
|
|
|
|
err = drgn_lexer_pop(lexer, token);
|
|
if (!err)
|
|
err = drgn_lexer_push(lexer, token);
|
|
return err;
|
|
}
|