| /* |
| * 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 |