;;; TOOL: run-gen-wasm
;;; ARGS2: --generate-names
;; NOTE: same test as in test/decompile/names.txt
magic
version
section(TYPE) {
  count[2]
  function params[0] results[1] i32
  function params[0] results[0]
}
section(FUNCTION) {
  count[4]
  type[0]
  type[1]
  type[1]
  type[1]
}
section(MEMORY) {
  count[1]
  has_max[0]
  initial[0]
}
section(GLOBAL) {
  count[2]
  ;; This has both a sym and export name, prefer sym.
  type[i32] mut[0] init_expr[i32.const 0 end]
  ;; This only has an export name.
  type[i32] mut[0] init_expr[i32.const 0 end]
}
section(EXPORT) {
  count[5]
  str("F1_EXPORT") func_kind func[1]
  str("F2_EXPORT") func_kind func[2]
  str("F3_EXPORT") func_kind func[3]
  str("G0_EXPORT") global_kind global[0]
  str("G1_EXPORT") global_kind global[1]
}
section(CODE) {
  count[4]
  ;; Test name section.
  func {
    locals[decl_count[1] i32_count[1] i32]
    get_local 0
  }
  ;; Test naming priorities
  ;; If there's a name section name, prefer that over sym/export.
  func { locals[0] }
  ;; If there's no name section name, prefer sym over export.
  func { locals[0] }
  ;; If there's only export, use that.
  func { locals[0] }
}
section(DATA) {
  count[2]
  ;; These can only be named thru symbols.
  memory_index[0]
  offset[i32.const 0 end]
  data[str("foo")]
  memory_index[0]
  offset[i32.const 10 end]
  data[str("bar")]
}
section("name") {
  section(NAME_MODULE) {
    str("M0")
  }
  section(NAME_FUNCTION) {
    func_count[2]
    index[0]
    str("F0")
    index[1]
    str("F1_NS")
  }
  section(NAME_LOCALS) {
    func_count[1]
    index[0]
    local_count[1]
    index[0]
    str("L0")
  }
}
section("linking") {
  metadata_version[2]
  section(LINKING_SYMBOL_TABLE) {
    num_symbols[5]
    type[0] flags[1] index[1] str("F1_SYM")
    type[0] flags[1] index[2] str("F2_SYM")
    type[2] flags[1] index[0] str("G0_SYM")

    type[1] flags[4] str("D0_SYM") segment[0] offset[0] size[1]
    type[1] flags[4] str("D1_SYM") segment[1] offset[0] size[1]
  }
}
(;; STDOUT ;;;
(module $M0
  (type $t0 (func (result i32)))
  (type $t1 (func))
  (func $F0 (type $t0) (result i32)
    (local $L0 i32)
    local.get $L0)
  (func $F1_NS (type $t1))
  (func $F2_SYM (type $t1))
  (func $F3_EXPORT (type $t1))
  (memory $M0 0)
  (global $G0_SYM i32 (i32.const 0))
  (global $G1_EXPORT i32 (i32.const 0))
  (export "F1_EXPORT" (func $F1_NS))
  (export "F2_EXPORT" (func $F2_SYM))
  (export "F3_EXPORT" (func $F3_EXPORT))
  (export "G0_EXPORT" (global 0))
  (export "G1_EXPORT" (global 1))
  (data $D0_SYM (i32.const 0) "foo")
  (data $D1_SYM (i32.const 10) "bar"))
;;; STDOUT ;;)
