add M6 ownership core interfaces

This commit is contained in:
정시원
2026-08-16 19:56:15 +09:00
parent 37f092196d
commit 5981d2b5b1
+73
View File
@@ -13,7 +13,80 @@ enum FeOwnMoveState {
FE_OWN_MAYBE_MOVED = 2 FE_OWN_MAYBE_MOVED = 2
}; };
typedef enum FeOwnAccessKind {
FE_OWN_READ,
FE_OWN_WRITE,
FE_OWN_MOVE,
FE_OWN_BORROW_SHARED,
FE_OWN_BORROW_MUT,
FE_OWN_PROJECTION
} FeOwnAccessKind;
typedef enum FeOwnProvenanceKind {
FE_OWN_PROV_INVALID,
FE_OWN_PROV_STATIC,
FE_OWN_PROV_PARAM
} FeOwnProvenanceKind;
typedef struct FeOwnPlace {
FeNode *root;
const char *root_cname;
int projected;
} FeOwnPlace;
typedef struct FeOwnState {
int move;
int initialized;
unsigned shared;
int exclusive;
int borrow_conflict;
FeLoc move_loc;
FeLoc borrow_loc;
} FeOwnState;
typedef struct FeOwnProvenance {
FeOwnProvenanceKind kind;
unsigned param_index;
} FeOwnProvenance;
typedef struct FeOwnLastUse {
const char *cname;
FeNode *decl;
FeNode *last_node;
unsigned long last_ordinal;
int defer_extended;
} FeOwnLastUse;
typedef struct FeOwnLiveness {
FeArena *arena;
FeOwnLastUse *items;
unsigned count;
unsigned capacity;
unsigned long ordinal;
} FeOwnLiveness;
int fe_own_is_copy_type(FeType *type); int fe_own_is_copy_type(FeType *type);
int fe_own_is_reference_like(FeType *type);
int fe_own_place_from_expr(FeNode *expr, FeOwnPlace *place);
void fe_own_state_init(FeOwnState *state, int initialized);
int fe_own_access(FeDiags *diags, FeOwnState *state,
FeOwnAccessKind access, FeLoc loc);
void fe_own_release_shared(FeOwnState *state);
void fe_own_release_exclusive(FeOwnState *state);
FeOwnState fe_own_merge_state(FeOwnState left, FeOwnState right);
int fe_own_state_equal(const FeOwnState *left, const FeOwnState *right);
FeOwnProvenance fe_own_provenance_static(void);
FeOwnProvenance fe_own_provenance_param(unsigned param_index);
FeOwnProvenance fe_own_merge_provenance(FeOwnProvenance left,
FeOwnProvenance right);
void fe_own_liveness_init(FeOwnLiveness *live, FeArena *arena);
int fe_own_collect_last_uses(FeOwnLiveness *live, FeNode *fn);
const FeOwnLastUse *fe_own_last_use(const FeOwnLiveness *live,
const char *cname);
void fe_own_mark_consumed(FeDiags *diags, int *state, FeNode *decl, void fe_own_mark_consumed(FeDiags *diags, int *state, FeNode *decl,
FeNode *expr, FeType *type, int in_defer); FeNode *expr, FeType *type, int in_defer);
void fe_own_check_use(FeDiags *diags, int state, FeLoc loc); void fe_own_check_use(FeDiags *diags, int state, FeLoc loc);