mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-18 18:12:23 -07:00
83 lines
4.7 KiB
C
83 lines
4.7 KiB
C
// Copyright (c) 2024 Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#ifndef EVAL_COMPILER_H
|
|
#define EVAL_COMPILER_H
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL Bytecode Helpers
|
|
|
|
internal String8 eval_bytecode_from_oplist(Arena *arena, EVAL_OpList *list);
|
|
|
|
internal void eval_oplist_push_op(Arena *arena, EVAL_OpList *list, RADDBG_EvalOp op, U64 p);
|
|
internal void eval_oplist_push_uconst(Arena *arena, EVAL_OpList *list, U64 x);
|
|
internal void eval_oplist_push_sconst(Arena *arena, EVAL_OpList *list, S64 x);
|
|
|
|
internal void eval_oplist_push_bytecode(Arena *arena, EVAL_OpList *list, String8 bytecode);
|
|
|
|
internal void eval_oplist_concat_in_place(EVAL_OpList *left_dst, EVAL_OpList *right_destroyed);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL Expression Info Functions
|
|
|
|
internal RADDBG_EvalOp eval_opcode_from_expr_kind(EVAL_ExprKind kind);
|
|
internal B32 eval_expr_kind_is_comparison(EVAL_ExprKind kind);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL Expression Constructors
|
|
|
|
internal EVAL_Expr* eval_expr(Arena *arena, EVAL_ExprKind kind, void *location, EVAL_Expr *c0, EVAL_Expr *c1, EVAL_Expr *c2);
|
|
internal EVAL_Expr* eval_expr_u64(Arena *arena, void *location, U64 u64);
|
|
internal EVAL_Expr* eval_expr_f64(Arena *arena, void *location, F64 f64);
|
|
internal EVAL_Expr* eval_expr_f32(Arena *arena, void *location, F32 f32);
|
|
internal EVAL_Expr* eval_expr_child_and_u64(Arena *arena, EVAL_ExprKind kind, void *location, EVAL_Expr *child, U64 u64);
|
|
internal EVAL_Expr* eval_expr_leaf_member(Arena *arena, void *location, String8 name);
|
|
internal EVAL_Expr* eval_expr_leaf_ident(Arena *arena, void *location, String8 name);
|
|
internal EVAL_Expr* eval_expr_leaf_bytecode(Arena *arena, void *location, TG_Key type_key, String8 bytecode, EVAL_EvalMode mode);
|
|
internal EVAL_Expr* eval_expr_leaf_op_list(Arena *arena, void *location, TG_Key type_key, EVAL_OpList *ops, EVAL_EvalMode mode);
|
|
internal EVAL_Expr* eval_expr_leaf_type(Arena *arena, void *location, TG_Key type_key);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL Type Information Transformers
|
|
|
|
internal RADDBG_EvalTypeGroup eval_type_group_from_kind(TG_Kind kind);
|
|
|
|
internal TG_Key eval_type_unwrap_enum(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
|
|
internal TG_Key eval_type_promote(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key key);
|
|
internal TG_Key eval_type_coerce(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r);
|
|
|
|
internal B32 eval_type_match(TG_Graph *graph, RADDBG_Parsed *rdbg, TG_Key l, TG_Key r);
|
|
|
|
internal B32 eval_kind_is_integer(TG_Kind kind);
|
|
internal B32 eval_kind_is_signed(TG_Kind kind);
|
|
internal B32 eval_kind_is_basic_or_enum(TG_Kind kind);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL IR-Tree Constructors
|
|
|
|
internal EVAL_IRTree* eval_irtree_const_u(Arena *arena, U64 v);
|
|
internal EVAL_IRTree* eval_irtree_unary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group, EVAL_IRTree *c);
|
|
internal EVAL_IRTree* eval_irtree_binary_op(Arena *arena, RADDBG_EvalOp op, RADDBG_EvalTypeGroup group, EVAL_IRTree *l, EVAL_IRTree *r);
|
|
internal EVAL_IRTree* eval_irtree_binary_op_u(Arena *arena, RADDBG_EvalOp op, EVAL_IRTree *l, EVAL_IRTree *r);
|
|
internal EVAL_IRTree* eval_irtree_conditional(Arena *arena, EVAL_IRTree *c, EVAL_IRTree *l, EVAL_IRTree *r);
|
|
internal EVAL_IRTree* eval_irtree_bytecode_no_copy(Arena *arena, String8 bytecode);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL IR-Tree High Level Helpers
|
|
|
|
internal EVAL_IRTree* eval_irtree_mem_read_type(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
|
|
internal EVAL_IRTree* eval_irtree_convert_lo(Arena *arena, EVAL_IRTree *c, RADDBG_EvalTypeGroup out, RADDBG_EvalTypeGroup in);
|
|
internal EVAL_IRTree* eval_irtree_trunc(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key type_key);
|
|
internal EVAL_IRTree* eval_irtree_convert_hi(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_IRTree *c, TG_Key out, TG_Key in);
|
|
internal EVAL_IRTree* eval_irtree_resolve_to_value(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_EvalMode from_mode, EVAL_IRTree *tree, TG_Key type_key);
|
|
|
|
////////////////////////////////
|
|
//~ allen: EVAL Compiler Phases
|
|
|
|
internal void eval_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, EVAL_String2ExprMap *map, EVAL_Expr *expr, EVAL_ErrorList *eout);
|
|
internal TG_Key eval_type_from_type_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_Expr *expr, EVAL_ErrorList *eout);
|
|
internal EVAL_IRTreeAndType eval_irtree_and_type_from_expr(Arena *arena, TG_Graph *graph, RADDBG_Parsed *rdbg, EVAL_String2ExprMap *leaf_ident_expr_map, EVAL_Expr *expr, EVAL_ErrorList *eout);
|
|
internal void eval_oplist_from_irtree(Arena *arena, EVAL_IRTree *tree, EVAL_OpList *out);
|
|
|
|
#endif //EVAL_COMPILER_H
|