mirror of
https://github.com/JakeHillion/drgn.git
synced 2024-12-23 09:43:06 +00:00
286c09844e
I recently hit a couple of CI failures caused by relying on transitive includes that weren't always present. include-what-you-use is a Clang-based tool that helps with this. It's a bit finicky and noisy, so this adds scripts/iwyu.py to make running it more convenient (but not reliable enough to automate it in Travis). This cleans up all reasonable include-what-you-use warnings and reorganizes a few header files. Signed-off-by: Omar Sandoval <osandov@osandov.com>
51 lines
1.1 KiB
C
51 lines
1.1 KiB
C
// Copyright (c) Facebook, Inc. and its affiliates.
|
|
// SPDX-License-Identifier: GPL-3.0+
|
|
|
|
#include "drgn.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;
|
|
}
|