return parser;
}
-pakfire_root* pakfire_parser_get_root(pakfire_parser* parser) {
- return pakfire_root_ref(parser->root);
-}
-
pakfire_parser* pakfire_parser_unref(pakfire_parser* parser) {
if (--parser->nrefs > 0)
return parser;
}
// Run the parser
- r = pakfire_parser_parse_data(parser, data, length, error);
+ r = pakfire_parser_parse_data(parser->ctx, parser->root, parser, data, length, error);
if (r < 0)
goto ERROR;
int pakfire_parser_parse(pakfire_parser* parser,
const char* data, size_t size, pakfire_parser_error** error) {
- return pakfire_parser_parse_data(parser, data, size, error);
+ return pakfire_parser_parse_data(parser->ctx, parser->root, parser, data, size, error);
}
char* pakfire_parser_dump(pakfire_parser* parser) {
#include <pakfire/package.h>
#include <pakfire/parser.h>
#include <pakfire/repo.h>
+#include <pakfire/root.h>
enum pakfire_parser_flags {
PAKFIRE_PARSER_FLAGS_NONE = 0,
int pakfire_parser_error_get_line(pakfire_parser_error* error);
const char* pakfire_parser_error_get_message(pakfire_parser_error* error);
-pakfire_root* pakfire_parser_get_root(pakfire_parser* parser);
-
typedef struct pakfire_parser_state {
unsigned int lineno;
int pakfire_parser_apply_declaration(
pakfire_parser* parser, pakfire_parser_declaration* declaration);
-int pakfire_parser_parse_data(pakfire_parser* parent, const char* data, size_t len,
- pakfire_parser_error** error);
+int pakfire_parser_parse_data(pakfire_ctx* ctx, pakfire_root* root, pakfire_parser* parent,
+ const char* data, size_t len, pakfire_parser_error** error);
int pakfire_parser_set_env(pakfire_parser* parser, pakfire_env* env);
%%
-int pakfire_parser_parse_data(pakfire_parser* parent, const char* data, size_t len,
- pakfire_parser_error** error) {
- pakfire_root* root = pakfire_parser_get_root(parent);
+int pakfire_parser_parse_data(pakfire_ctx* ctx, pakfire_root* root, pakfire_parser* parent,
+ const char* data, size_t len, pakfire_parser_error** error) {
yyscan_t scanner;
int r;
.readline_indent = 0,
};
- // Fetch context
- pakfire_ctx* ctx = pakfire_root_get_ctx(root);
-
#ifdef ENABLE_DEBUG
DEBUG(ctx, "Parsing the following data (%zu):\n%.*s\n", len, (int)len, data);
ERROR:
if (parser)
pakfire_parser_unref(parser);
- if (root)
- pakfire_root_unref(root);
- if (ctx)
- pakfire_ctx_unref(ctx);
yylex_destroy(scanner);
return r;