X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=idl%2Fmain.h;fp=idl%2Fmain.h;h=bb8b14a789a3711ed3347c6aa48988ef8cf668d9;hp=0000000000000000000000000000000000000000;hb=ca787916893fd2124a4dd72d326e3435fad5b9c8;hpb=059fffcaee65cf92b95bdbe91e5a156b89b2cf71 diff --git a/idl/main.h b/idl/main.h new file mode 100644 index 0000000..bb8b14a --- /dev/null +++ b/idl/main.h @@ -0,0 +1,196 @@ +/* This file was automatically generated. Do not edit! */ +#undef INTERFACE +typedef struct PSI_Validator PSI_Validator; +typedef struct decl_typedefs decl_typedefs; +typedef struct decl_typedef decl_typedef; +typedef struct decl_type decl_type; +typedef int token_t; +struct decl_type { + char *name; + token_t type; + struct decl_type *real; +}; +struct decl_typedef { + char *alias; + decl_type *type; +}; +struct decl_typedefs { + size_t count; + decl_typedef **list; +}; +typedef struct decls decls; +typedef struct decl decl; +typedef struct decl_abi decl_abi; +struct decl_abi { + char *convention; +}; +typedef struct decl_arg decl_arg; +typedef struct decl_var decl_var; +struct decl_var { + char *name; + unsigned pointer_level; +}; +struct decl_arg { + decl_type *type; + decl_var *var; +}; +typedef struct decl_args decl_args; +struct decl_args { + decl_arg **args; + size_t count; +}; +struct decl { + decl_abi *abi; + decl_arg *func; + decl_args *args; + void *dlptr; +}; +struct decls { + size_t count; + decl **list; +}; +typedef struct impls impls; +typedef struct impl impl; +typedef struct impl_func impl_func; +typedef struct impl_args impl_args; +typedef struct impl_arg impl_arg; +typedef struct impl_type impl_type; +struct impl_type { + char *name; + token_t type; +}; +typedef struct impl_var impl_var; +struct impl_var { + char *name; + unsigned reference:1; +}; +typedef struct impl_def_val impl_def_val; +struct impl_def_val { + token_t type; + union { + int64_t digits; + double decimals; + } v; + unsigned is_null:1; +}; +struct impl_arg { + impl_type *type; + impl_var *var; + impl_def_val *def; +}; +struct impl_args { + impl_arg **args; + size_t count; +}; +struct impl_func { + char *name; + impl_args *args; + impl_type *return_type; +}; +typedef struct impl_stmts impl_stmts; +typedef struct impl_stmt impl_stmt; +typedef struct let_stmt let_stmt; +typedef struct let_value let_value; +typedef struct let_func let_func; +struct let_func { + token_t type; + char *name; +}; +struct let_value { + let_func *func; + impl_var *var; + unsigned null_pointer_ref:1; +}; +struct let_stmt { + decl_var *var; + let_value *val; +}; +typedef struct set_stmt set_stmt; +typedef struct set_value set_value; +typedef struct set_func set_func; +struct set_func { + token_t type; + char *name; +}; +typedef struct decl_vars decl_vars; +struct decl_vars { + decl_var **vars; + size_t count; +}; +struct set_value { + set_func *func; + decl_vars *vars; +}; +struct set_stmt { + impl_var *var; + set_value *val; +}; +typedef struct ret_stmt ret_stmt; +struct ret_stmt { + set_func *func; + decl_var *decl; +}; +struct impl_stmt { + token_t type; + union { + let_stmt *let; + set_stmt *set; + ret_stmt *ret; + void *ptr; + } s; +}; +struct impl_stmts { + impl_stmt **stmts; + size_t count; +}; +struct impl { + impl_func *func; + impl_stmts *stmts; +}; +struct impls { + size_t count; + impl **list; +}; +struct PSI_Validator { + decl_typedefs *defs; + decls *decls; + impls *impls; + char *lib; + char *fn; + void *dlopened; +}; +void PSI_ValidatorDtor(PSI_Validator *V); +int PSI_ValidatorValidate(PSI_Validator *V); +typedef struct PSI_Lexer PSI_Lexer; +#define BSIZE 256 +struct PSI_Lexer { + decl_typedefs *defs; + decls *decls; + impls *impls; + char *lib; + char *fn; + FILE *fp; + size_t line; + char *cur, *tok, *lim, *eof, *ctx, *mrk, buf[BSIZE]; +}; +void PSI_LexerDtor(PSI_Lexer *L); +PSI_Validator *PSI_ValidatorInit(PSI_Validator *V,PSI_Lexer *L); +void PSI_ParserFree(void *p,void(*freeProc)(void *)); +PSI_Lexer *PSI_LexerInit(PSI_Lexer *L,const char *filename); +void *PSI_ParserAlloc(void *(*mallocProc)(size_t)); +int main(int argc,char *argv[]); +typedef struct PSI_Token PSI_Token; +struct PSI_Token { + token_t type; + unsigned line; + size_t size; + char text[1]; +}; +#define PSI_ParserTOKENTYPE PSI_Token * +#define PSI_ParserARG_PDECL ,PSI_Lexer *L +void PSI_Parser(void *yyp,int yymajor,PSI_ParserTOKENTYPE yyminor PSI_ParserARG_PDECL); +PSI_Token *PSI_TokenAlloc(PSI_Lexer *L,token_t t); +token_t PSI_LexerScan(PSI_Lexer *L); +#if !defined(NDEBUG) +void PSI_ParserTrace(FILE *TraceFILE,char *zTracePrompt); +#endif