Small example of how to use `externref`s.
()
| 504 | |
| 505 | // Small example of how to use `externref`s. |
| 506 | func 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 { |
nothing calls this directly
no test coverage detected
searching dependent graphs…