@@ -11,6 +11,7 @@ extern "C" {
1111
1212// -- handles
1313typedef struct WeslCompiler WeslCompiler ;
14+ typedef struct WeslTranslationUnit WeslTranslationUnit ;
1415
1516// -- enums
1617typedef enum WeslManglerKind {
@@ -45,6 +46,35 @@ typedef struct WeslBinding {
4546 size_t data_len ;
4647} WeslBinding ;
4748
49+ typedef struct WeslResolveSourceResult {
50+ bool success ;
51+ const char * source ;
52+ } WeslResolveSourceResult ;
53+
54+ typedef struct WeslResolveModuleResult {
55+ bool success ;
56+ WeslTranslationUnit * module ;
57+ } WeslResolveModuleResult ;
58+
59+ typedef const WeslResolveSourceResult * (* WeslResolveSourceFunction )(const char * path , void * userdata );
60+ typedef const WeslResolveModuleResult * (* WeslResolveModuleFunction )(const char * path , void * userdata );
61+ typedef void (* WeslResolveSourceFreeFunction )(const WeslResolveSourceResult * result , void * userdata );
62+ typedef void (* WeslResolveModuleFreeFunction )(const WeslResolveModuleResult * result , void * userdata );
63+ typedef const char * (* WeslResolveStringFunction )(const char * path , void * userdata );
64+ typedef void (* WeslResolveFreeStringFunction )(const char * string , void * userdata );
65+
66+ typedef struct WeslResolverOptions {
67+ void * userdata ;
68+ WeslResolveSourceFunction resolve_source ;
69+ WeslResolveSourceFreeFunction resolve_source_free ;
70+ WeslResolveModuleFunction resolve_module ;
71+ WeslResolveModuleFreeFunction resolve_module_free ;
72+ WeslResolveStringFunction display_name ;
73+ WeslResolveFreeStringFunction free_display_name ;
74+ WeslResolveStringFunction fs_path ;
75+ WeslResolveFreeStringFunction free_fs_path ;
76+ } WeslResolverOptions ;
77+
4878typedef struct WeslCompileOptions {
4979 WeslManglerKind mangler ;
5080 bool sourcemap ;
@@ -58,6 +88,7 @@ typedef struct WeslCompileOptions {
5888 bool lazy ;
5989 bool keep_root ;
6090 bool mangle_root ;
91+ WeslResolverOptions * resolver ;
6192} WeslCompileOptions ;
6293
6394typedef struct WeslStringMap {
@@ -102,6 +133,12 @@ typedef struct WeslResult {
102133 WeslError error ;
103134} WeslResult ;
104135
136+ typedef struct WeslParseResult {
137+ bool success ;
138+ WeslTranslationUnit * data ;
139+ WeslError error ;
140+ } WeslParseResult ;
141+
105142typedef struct WeslExecOptions {
106143 WeslCompileOptions compile ;
107144 const char * entrypoint ;
@@ -127,6 +164,10 @@ WeslResult wesl_compile(
127164 const WeslBoolMap * features
128165);
129166
167+ WeslParseResult wesl_parse (
168+ const char * source
169+ );
170+
130171WeslResult wesl_eval (
131172 const WeslStringMap * files ,
132173 const char * root ,
@@ -150,6 +191,11 @@ void wesl_free_string(const char* ptr);
150191void wesl_free_result (WeslResult * result );
151192void wesl_free_exec_result (WeslExecResult * result );
152193
194+ // Free a WeslParseResult filled by wesl_parse.
195+ // This does NOT free the WeslTranslationUnit* inside the result, if the parsing succeeded!
196+ void wesl_free_parse_result (WeslParseResult * result );
197+ void wesl_free_translation_unit (WeslTranslationUnit * unit );
198+
153199// -- utility
154200
155201// note: results from this function must not be freed
0 commit comments