MCPcopy Create free account
hub / github.com/bytecodealliance/wasmtime-go / ExampleVal_Externref

Function ExampleVal_Externref

example_test.go:506–580  ·  view source on GitHub ↗

Small example of how to use `externref`s.

()

Source from the content-addressed store, hash-verified

504
505// Small example of how to use `externref`s.
506func ExampleVal_Externref() {
507 config := wasmtime.NewConfig()
508 config.SetWasmReferenceTypes(true)
509 store := wasmtime.NewStore(wasmtime.NewEngineWithConfig(config))
510 wasm, err := wasmtime.Wat2Wasm(`
511 (module
512 (table $table (export "table") 10 externref)
513
514 (global $global (export "global") (mut externref) (ref.null extern))
515
516 (func (export "func") (param externref) (result externref)
517 local.get 0
518 )
519 )
520 `)
521 if err != nil {
522 log.Fatal(err)
523 }
524 module, err := wasmtime.NewModule(store.Engine, wasm)
525 if err != nil {
526 log.Fatal(err)
527 }
528 instance, err := wasmtime.NewInstance(store, module, []wasmtime.AsExtern{})
529 if err != nil {
530 log.Fatal(err)
531 }
532 // Create a new `externref` value.
533 value := wasmtime.ValExternref("Hello, World!")
534 // The `externref`'s wrapped data should be the string "Hello, World!".
535 externRef := value.Externref()
536 if externRef != "Hello, World!" {
537 log.Fatal("unexpected value")
538 }
539 // Lookup the `table` export.
540 table := instance.GetExport(store, "table").Table()
541 // Set `table[3]` to our `externref`.
542 err = table.Set(store, 3, value)
543 if err != nil {
544 log.Fatal(err)
545 }
546 // `table[3]` should now be our `externref`.
547 tableValue, err := table.Get(store, 3)
548 if err != nil {
549 log.Fatal(err)
550 }
551 if tableValue.Externref() != externRef {
552 log.Fatal("unexpected value in table")
553 }
554 // Lookup the `global` export.
555 global := instance.GetExport(store, "global").Global()
556 // Set the global to our `externref`.
557 err = global.Set(store, value)
558 if err != nil {
559 log.Fatal(err)
560 }
561 // Get the global, and it should return our `externref` again.
562 globalValue := global.Get(store)
563 if globalValue.Externref() != externRef {

Callers

nothing calls this directly

Calls 9

SetWasmReferenceTypesMethod · 0.95
GetExportMethod · 0.95
GetFuncMethod · 0.95
ExternrefMethod · 0.80
TableMethod · 0.80
GlobalMethod · 0.80
CallMethod · 0.80
SetMethod · 0.45
GetMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…