mie: ir: rewrite: add pattern and rewriter interface
This commit is contained in:
@@ -1,6 +1,60 @@
|
|||||||
#ifndef MIE_IR_REWRITE_H_
|
#ifndef MIE_IR_REWRITE_H_
|
||||||
#define MIE_IR_REWRITE_H_
|
#define MIE_IR_REWRITE_H_
|
||||||
|
|
||||||
|
#include <mie/misc.h>
|
||||||
|
#include <mie/status.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
struct mie_op;
|
||||||
|
struct mie_ctx;
|
||||||
struct mie_rewriter;
|
struct mie_rewriter;
|
||||||
|
struct mie_register;
|
||||||
|
|
||||||
|
#define MIE_REWRITE_RESULT(result, status) \
|
||||||
|
((struct mie_rewrite_result) {.r_result = (result), .r_status = (status)})
|
||||||
|
|
||||||
|
enum mie_match_result {
|
||||||
|
MIE_NO_MATCH_FOUND = 0,
|
||||||
|
MIE_MATCH_FOUND,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mie_rewrite_result {
|
||||||
|
enum {
|
||||||
|
MIE_REWRITE_SUCCESS = 0,
|
||||||
|
MIE_REWRITE_IGNORE,
|
||||||
|
MIE_REWRITE_FAILURE,
|
||||||
|
} r_result;
|
||||||
|
enum mie_status r_status;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mie_rewrite_pattern {
|
||||||
|
struct {
|
||||||
|
const char *t_dialect_name, *t_op_name;
|
||||||
|
const struct mie_op_definition *t_op;
|
||||||
|
} p_root;
|
||||||
|
|
||||||
|
enum mie_match_result (*p_match)(const struct mie_op *);
|
||||||
|
struct mie_rewrite_result (*p_rewrite)(
|
||||||
|
struct mie_op *, struct mie_rewriter *);
|
||||||
|
};
|
||||||
|
|
||||||
|
MIE_API struct mie_rewriter *mie_rewriter_create(struct mie_ctx *ctx);
|
||||||
|
|
||||||
|
MIE_API struct mie_block *mie_rewriter_get_insertion_block(
|
||||||
|
struct mie_rewriter *rewriter);
|
||||||
|
MIE_API struct mie_op *mie_rewriter_get_insertion_point(
|
||||||
|
struct mie_rewriter *rewriter);
|
||||||
|
|
||||||
|
MIE_API struct mie_block *mie_rewriter_split_block(
|
||||||
|
struct mie_rewriter *rewriter, struct mie_block *block,
|
||||||
|
struct mie_op *before);
|
||||||
|
MIE_API struct mie_block *mie_rewriter_create_block(
|
||||||
|
struct mie_rewriter *rewriter, struct mie_block *insert_before);
|
||||||
|
|
||||||
|
MIE_API struct mie_op *mie_rewriter_put_op(
|
||||||
|
struct mie_rewriter *rewriter, const char *dialect, const char *op,
|
||||||
|
struct mie_register **args, size_t nr_args);
|
||||||
|
MIE_API enum mie_status mie_rewriter_erase_op(
|
||||||
|
struct mie_rewriter *rewriter, struct mie_op *op);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user