Blame gfs2/libgfs2/lang.h

Packit 6ef888
#ifndef LANG_H
Packit 6ef888
#define LANG_H
Packit 6ef888
#include <stdint.h>
Packit 6ef888
#include "libgfs2.h"
Packit 6ef888
Packit 6ef888
struct lgfs2_lang_state {
Packit 6ef888
	int ls_colnum;
Packit 6ef888
	int ls_linenum;
Packit 6ef888
	int ls_errnum;
Packit 6ef888
	struct ast_node *ls_ast_root;
Packit 6ef888
	struct ast_node *ls_ast_tail;
Packit 6ef888
	struct ast_node *ls_interp_curr;
Packit 6ef888
};
Packit 6ef888
Packit 6ef888
typedef enum {
Packit 6ef888
	AST_NONE,
Packit 6ef888
	// Statements
Packit 6ef888
	AST_ST_SET,
Packit 6ef888
	AST_ST_GET,
Packit 6ef888
Packit 6ef888
	_AST_EX_START,
Packit 6ef888
	// Expressions
Packit 6ef888
	AST_EX_ID,
Packit 6ef888
	AST_EX_NUMBER,
Packit 6ef888
	AST_EX_STRING,
Packit 6ef888
	AST_EX_ADDRESS,
Packit 6ef888
	AST_EX_PATH,
Packit 6ef888
	AST_EX_SUBSCRIPT,
Packit 6ef888
	AST_EX_OFFSET,
Packit 6ef888
	AST_EX_BLOCKSPEC,
Packit 6ef888
	AST_EX_STRUCTSPEC,
Packit 6ef888
	AST_EX_FIELDSPEC,
Packit 6ef888
	AST_EX_TYPESPEC,
Packit 6ef888
Packit 6ef888
	// Keywords
Packit 6ef888
	AST_KW_STATE,
Packit 6ef888
} ast_node_t;
Packit 6ef888
Packit 6ef888
enum {
Packit 6ef888
	AST_INTERP_SUCCESS	= 0, // Success
Packit 6ef888
	AST_INTERP_FAIL		= 1, // Failure
Packit 6ef888
	AST_INTERP_INVAL	= 2, // Invalid field/type mismatch
Packit 6ef888
	AST_INTERP_ERR		= 3, // Something went wrong, see errno
Packit 6ef888
};
Packit 6ef888
Packit 6ef888
extern const char* ast_type_string[];
Packit 6ef888
Packit 6ef888
struct ast_node {
Packit 6ef888
	ast_node_t ast_type;
Packit 6ef888
	struct ast_node *ast_left;
Packit 6ef888
	struct ast_node *ast_right;
Packit 6ef888
	char *ast_text;
Packit 6ef888
	char *ast_str;
Packit 6ef888
	uint64_t ast_num;
Packit 6ef888
};
Packit 6ef888
Packit 6ef888
extern struct ast_node *ast_new(ast_node_t type, const char *text);
Packit 6ef888
extern void ast_destroy(struct ast_node **val);
Packit 6ef888
Packit 6ef888
#define YYSTYPE struct ast_node *
Packit 6ef888
Packit 6ef888
#endif /* LANG_H */