/* * Copyright © 2010 Intel Corporation * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice (including the next * paragraph) shall be included in all copies or substantial portions of the * Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ #ifndef GLCPP_H #define GLCPP_H #include "hash_table.h" #define yyscan_t void* /* Some data types used for parser value. */ typedef struct string_node { const char *str; struct string_node *next; } string_node_t; typedef struct string_list { string_node_t *head; string_node_t *tail; } string_list_t; typedef struct argument_node { string_list_t *argument; struct argument_node *next; } argument_node_t; typedef struct argument_list { argument_node_t *head; argument_node_t *tail; } argument_list_t; typedef struct glcpp_parser glcpp_parser_t; glcpp_parser_t * glcpp_parser_create (void); int glcpp_parser_parse (glcpp_parser_t *parser); void glcpp_parser_destroy (glcpp_parser_t *parser); typedef enum { MACRO_TYPE_UNDEFINED, MACRO_TYPE_OBJECT, MACRO_TYPE_FUNCTION } macro_type_t; macro_type_t glcpp_parser_macro_type (glcpp_parser_t *parser, const char *identifier); /* Generated by glcpp-lex.l to glcpp-lex.c */ int yylex_init_extra (glcpp_parser_t *parser, yyscan_t* scanner); int yylex (yyscan_t scanner); int yylex_destroy (yyscan_t scanner); /* Generated by glcpp-parse.y to glcpp-parse.c */ int yyparse (glcpp_parser_t *parser); /* xtalloc - wrappers around talloc to check for out-of-memory */ #define xtalloc(ctx, type) (type *)xtalloc_named_const(ctx, sizeof(type), #type) void * xtalloc_named_const (const void *context, size_t size, const char *name); char * xtalloc_strdup (const void *t, const char *p); #endif