@@ -258,32 +258,54 @@ func (r *Runner) Generate(ctx context.Context, req *plugin.CodeGenRequest) (*plu
258
258
store := wasmtime .NewStore (engine )
259
259
store .SetWasi (wasiConfig )
260
260
261
- linkRegion := trace .StartRegion (ctx , "linker.Instantiate " )
262
- instance , err : = linker .Instantiate (store , module )
261
+ linkRegion := trace .StartRegion (ctx , "linker.DefineModule " )
262
+ err = linker .DefineModule (store , "" , module )
263
263
linkRegion .End ()
264
264
if err != nil {
265
265
return nil , fmt .Errorf ("define wasi: %w" , err )
266
266
}
267
267
268
268
// Run the function
269
+ fn , err := linker .GetDefault (store , "" )
270
+ if err != nil {
271
+ return nil , fmt .Errorf ("wasi: get default: %w" , err )
272
+ }
273
+
269
274
callRegion := trace .StartRegion (ctx , "call _start" )
270
- nom := instance .GetExport (store , "_start" ).Func ()
271
- _ , err = nom .Call (store )
275
+ _ , err = fn .Call (store )
272
276
callRegion .End ()
273
- if err != nil {
274
- // Print WASM stdout
275
- stderrBlob , err := os .ReadFile (stderrPath )
276
- if err == nil && len (stderrBlob ) > 0 {
277
- return nil , errors .New (string (stderrBlob ))
278
- }
279
- return nil , fmt .Errorf ("call: %w" , err )
277
+
278
+ if cerr := checkError (err , stderrPath ); cerr != nil {
279
+ return nil , cerr
280
280
}
281
281
282
282
// Print WASM stdout
283
283
stdoutBlob , err := os .ReadFile (stdoutPath )
284
284
if err != nil {
285
285
return nil , fmt .Errorf ("read file: %w" , err )
286
286
}
287
+
287
288
var resp plugin.CodeGenResponse
288
289
return & resp , resp .UnmarshalVT (stdoutBlob )
289
290
}
291
+
292
+ func checkError (err error , stderrPath string ) error {
293
+ if err == nil {
294
+ return err
295
+ }
296
+
297
+ var wtError * wasmtime.Error
298
+ if errors .As (err , & wtError ) {
299
+ if code , ok := wtError .ExitStatus (); ok {
300
+ if code == 0 {
301
+ return nil
302
+ }
303
+ }
304
+ }
305
+ // Print WASM stdout
306
+ stderrBlob , rferr := os .ReadFile (stderrPath )
307
+ if rferr == nil && len (stderrBlob ) > 0 {
308
+ return errors .New (string (stderrBlob ))
309
+ }
310
+ return fmt .Errorf ("call: %w" , err )
311
+ }
0 commit comments