drgn/libdrgn/lexer.c
Omar Sandoval 286c09844e Clean up #includes with include-what-you-use
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>
2020-09-23 16:29:42 -07:00

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