X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Ftypes%2Fnumber.h;h=cc5923ee4d46132aa490a75a373de2fa7692cd2a;hb=370510d04a5e22140e1e7f90f5d1f0002e6dbee6;hp=e3d02e62504abb00b22d5d67975a885081029517;hpb=3b0b651ea1b555d8d023e45b43e5eb93b23d00a1;p=m6w6%2Fext-psi diff --git a/src/types/number.h b/src/types/number.h index e3d02e6..cc5923e 100644 --- a/src/types/number.h +++ b/src/types/number.h @@ -35,20 +35,43 @@ struct psi_decl_enum_item; struct psi_let_exp; struct psi_set_exp; struct psi_call_frame; +struct psi_cpp_macro_call; + +enum psi_number_suffix { + PSI_NUMBER_U = 0x0100, + PSI_NUMBER_L = 0x0200, + PSI_NUMBER_UL = 0x0300, + + PSI_NUMBER_LL = 0x0400, + PSI_NUMBER_ULL = 0x0500, + + PSI_NUMBER_F = 0x1000, + PSI_NUMBER_D = 0x2000, + PSI_NUMBER_DF = 0x3000, + PSI_NUMBER_DD = 0x4000, + PSI_NUMBER_DL = 0x2200, +}; + +enum psi_number_kind { + PSI_NUMBER_INT = 0x01, + PSI_NUMBER_FLT = 0x02, +}; struct psi_number { struct psi_token *token; token_t type; + unsigned flags; union { char *numb; impl_val ival; struct psi_const *cnst; struct psi_decl_var *dvar; struct psi_decl_enum_item *enm; + struct psi_cpp_macro_call *call; } data; }; -struct psi_number *psi_number_init(token_t t, void *num); +struct psi_number *psi_number_init(token_t t, void *num, unsigned flags); struct psi_number *psi_number_copy(struct psi_number *exp); void psi_number_free(struct psi_number **exp_ptr); void psi_number_dump(int fd, struct psi_number *exp); @@ -58,6 +81,7 @@ bool psi_number_validate(struct psi_data *data, struct psi_number *exp, struct psi_let_exp *current_let, struct psi_set_exp *current_set, struct psi_decl_enum *current_enum); -token_t psi_number_eval(struct psi_number *exp, impl_val *res, struct psi_call_frame *frame); +token_t psi_number_eval(struct psi_number *exp, impl_val *res, + struct psi_call_frame *frame, HashTable *defs); #endif