feat(ast): data as void* and basic helpers
This commit is contained in:
parent
62e44b8101
commit
807416940c
2 changed files with 34 additions and 12 deletions
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include "ast.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
bool ast_is_if(struct ast *node)
|
||||||
|
{
|
||||||
|
return node->type == AST_IF;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ast_is_cmd(struct ast *node)
|
||||||
|
{
|
||||||
|
return node->type == AST_CMD;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ast_if *ast_get_if(struct ast *node)
|
||||||
|
{
|
||||||
|
return (struct ast_if *)node->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct ast_cmd *ast_get_cmd(struct ast *node)
|
||||||
|
{
|
||||||
|
return (struct ast_cmd *)node->data;
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
enum ast_type
|
enum ast_type
|
||||||
{
|
{
|
||||||
AST_END = 0,
|
AST_END,
|
||||||
AST_IF,
|
AST_IF,
|
||||||
AST_CMD
|
AST_CMD
|
||||||
};
|
};
|
||||||
|
|
@ -15,14 +15,6 @@ struct ast_cmd
|
||||||
struct list *cmd;
|
struct list *cmd;
|
||||||
};
|
};
|
||||||
|
|
||||||
union ast_node;
|
|
||||||
|
|
||||||
struct ast
|
|
||||||
{
|
|
||||||
enum ast_type type;
|
|
||||||
union ast_node *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct ast_if
|
struct ast_if
|
||||||
{
|
{
|
||||||
struct ast *condition;
|
struct ast *condition;
|
||||||
|
|
@ -30,10 +22,17 @@ struct ast_if
|
||||||
struct ast *else_clause;
|
struct ast *else_clause;
|
||||||
};
|
};
|
||||||
|
|
||||||
union ast_node
|
struct ast
|
||||||
{
|
{
|
||||||
struct ast_if *ast_if;
|
enum ast_type type;
|
||||||
struct ast_cmd *ast_cmd;
|
|
||||||
|
/**
|
||||||
|
* Data associated with this AST node. It can be one of the following:
|
||||||
|
* - NULL (AST_END)
|
||||||
|
* - struct ast_if* (AST_IF)
|
||||||
|
* - struct ast_cmd* (AST_CMD)
|
||||||
|
*/
|
||||||
|
void *data;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* ! AST_H */
|
#endif /* ! AST_H */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue