X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcpp.h;h=be7a54caec378b6f31d60d1ccf9f94c6fb484a76;hp=b778b14b0179762acb3e9aae439e1d1555c7a88b;hb=cd0567b4052ee24259bc6b8a9858af9d26f3de48;hpb=42f44eb5bf4ecd36e26e051fada79d861d0f92d2 diff --git a/src/cpp.h b/src/cpp.h index b778b14..be7a54c 100644 --- a/src/cpp.h +++ b/src/cpp.h @@ -29,27 +29,32 @@ #include "data.h" #ifndef PSI_CPP_DEBUG -# define PSI_CPP_DEBUG 0 +# define PSI_CPP_DEBUG 1 #endif -struct psi_cpp_tokiter { -}; - struct psi_cpp { - HashTable *defs; + HashTable defs; + HashTable once; struct psi_parser *parser; - struct psi_plist *tokens; + struct { + struct psi_plist *iter; + struct psi_plist *next; + struct psi_plist *exec; + } tokens; + HashTable expanding; const char *search; size_t index; unsigned level; unsigned skip; unsigned seen; unsigned expanded; + unsigned counter; + bool do_cpp; }; struct psi_cpp *psi_cpp_init(struct psi_parser *parser); -bool psi_cpp_load_defaults(struct psi_cpp *cpp); -bool psi_cpp_process(struct psi_cpp *cpp, struct psi_plist **tokens); +bool psi_cpp_process(struct psi_cpp *cpp, struct psi_plist **tokens, + struct psi_token *expanding); void psi_cpp_free(struct psi_cpp **cpp_ptr); bool psi_cpp_if(struct psi_cpp *cpp, struct psi_cpp_exp *exp); @@ -61,21 +66,28 @@ bool psi_cpp_undef(struct psi_cpp *cpp, struct psi_token *tok); #define PSI_CPP_INCLUDE_NEXT 0x1 #define PSI_CPP_INCLUDE_ONCE 0x2 -bool psi_cpp_include(struct psi_cpp *cpp, const char *file, unsigned flags); +bool psi_cpp_has_include(struct psi_cpp *cpp, const struct psi_token *file, unsigned flags, char *path); +bool psi_cpp_include(struct psi_cpp *cpp, const struct psi_token *file, unsigned flags); void psi_cpp_tokiter_reset(struct psi_cpp *cpp); bool psi_cpp_tokiter_seek(struct psi_cpp *cpp, size_t index); -void psi_cpp_tokiter_dump(int fd, struct psi_cpp *cpp); +#if PSI_CPP_DEBUG > 1 +void psi_cpp_tokiter_dump(struct psi_dump *dump, struct psi_cpp *cpp); +#endif struct psi_token *psi_cpp_tokiter_current(struct psi_cpp *cpp); size_t psi_cpp_tokiter_index(struct psi_cpp *cpp); void psi_cpp_tokiter_next(struct psi_cpp *cpp); void psi_cpp_tokiter_prev(struct psi_cpp *cpp); bool psi_cpp_tokiter_valid(struct psi_cpp *cpp); bool psi_cpp_tokiter_del_cur(struct psi_cpp *cpp, bool free_token); +bool psi_cpp_tokiter_del_prev(struct psi_cpp *cpp, bool free_token); bool psi_cpp_tokiter_del_range(struct psi_cpp *cpp, size_t offset, size_t num_eles, bool free_tokens); -bool psi_cpp_tokiter_ins_cur(struct psi_cpp *cpp, struct psi_token *tok); -bool psi_cpp_tokiter_ins_range(struct psi_cpp *cpp, size_t offset, +bool psi_cpp_tokiter_add(struct psi_cpp *cpp, struct psi_token *tok); +bool psi_cpp_tokiter_add_cur(struct psi_cpp *cpp); +bool psi_cpp_tokiter_add_range(struct psi_cpp *cpp, + size_t num_eles, void **eles); +bool psi_cpp_tokiter_ins_range(struct psi_cpp *cpp, size_t num_eles, void **eles); bool psi_cpp_tokiter_defined(struct psi_cpp *cpp); bool psi_cpp_tokiter_expand(struct psi_cpp *cpp);