# Snapshot report for `src/validation/__tests__/validation-spec.js`

The actual snapshot is saved in `validation-spec.js.snap`.

Generated by [AVA](https://ava.li).

## access on undefined objects

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 1 problems.␊
      ␊
      ␊
            obj.y = 5;␊
                ^ Cannot assign "5". Key is "unreachable"␊
      Cannot generate property access␊
        at test() (spec.walt:3:12)␊
      `,
    }

## ast must have metadata attached

> Snapshot 1

    Error {
      message: 'Missing AST metadata!',
    }

## const cannot be re-asigned

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 2 problems.␊
      ␊
      ␊
            x = 1;␊
                  const variables cannot be reassigned, use let instead.␊
      Cannot reassign a const variable x␊
        at test() (spec.walt:4:12)␊
      ␊
      ␊
            y += 1;␊
                   const variables cannot be reassigned, use let instead.␊
      Cannot reassign a const variable y␊
        at test() (spec.walt:6:13)␊
      `,
    }

## constants must be initialized

> Snapshot 1

    Error {
      offset: 13,
      token: {
        col: 22,
        line: 2,
        lineBreaks: 0,
        offset: 22,
        text: '+',
        toString: Function tokenToString {},
        type: 'punctuator',
        value: '+',
      },
      message: `undefined at line 2 col 22:␊
      ␊
            const g: i32 = 2 +␊
                             ^␊
      Unexpected punctuator token: "+"␊
      `,
    }

## functions must be defined

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 4 problems.␊
      ␊
      ␊
            const ptr: Type = 0;␊
                                 Variables must be assigned with a known type.␊
      Unknown type used in a declartion, "Type"␊
        at test() (spec.walt:3:27)␊
      ␊
      ␊
            ptr();␊
                ^ ptr has type Type which is not defined. Indirect calls must have pre-defined types.␊
      Cannot make an indirect call without a valid function type␊
        at test() (spec.walt:4:12)␊
      ␊
      ␊
            return notDefined();␊
                       ^^^^^^^^ notDefined is not defined.␊
      Undefined function reference␊
        at test() (spec.walt:5:26)␊
      ␊
      ␊
            return notDefined();␊
                         ^^^^^^^ Inconsistent return value. Expected i32 received null␊
      Missing return value␊
        at test() (spec.walt:5:27)␊
      `,
    }

## functions must have consistent returns

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 2 problems.␊
      ␊
      ␊
            return;␊
                    Inconsistent return value. Expected i32 received null␊
      Missing return value␊
        at i32void() (spec.walt:3:14)␊
      ␊
      ␊
            return x;␊
                      Inconsistent return value. Expected i32 received i64␊
      Missing return value␊
        at i32i64() (spec.walt:7:16)␊
      `,
    }

## global exports must have value

> Snapshot 1

    Error {
      offset: 8,
      token: {
        col: 20,
        line: 1,
        lineBreaks: 0,
        offset: 19,
        text: ';',
        toString: Function tokenToString {},
        type: 'punctuator',
        value: ';',
      },
      message: `undefined at line 1 col 20:␊
      ␊
        export const x: i32;␊
                           ^␊
      Unexpected punctuator token: ";"␊
      `,
    }

## invalid sucbscript target

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 1 problems.␊
      ␊
      ␊
      		v += a[i];␊
                  Expected array type for a, received i32␊
      Invalid subscript target␊
        at fn() (spec.walt:11:12)␊
      `,
    }

## typos throw

> Snapshot 1

    Error {
      offset: 0,
      token: {
        col: 1,
        line: 1,
        lineBreaks: 0,
        offset: 0,
        text: 'expost',
        toString: Function tokenToString {},
        type: 'identifier',
        value: 'expost',
      },
      message: `undefined at line 1 col 1:␊
      ␊
        expost␊
        ^␊
      Unexpected identifier token: "expost"␊
      `,
    }

## undefined object properties

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 3 problems.␊
      ␊
      ␊
            y = obj.y;␊
                    ^ Cannot assign "unreachable". Key is "unreachable"␊
      Cannot generate property access␊
        at test() (spec.walt:6:16)␊
      ␊
      ␊
            obj = { y: 5 };␊
                    ^ Cannot assign "5". Key is "unreachable"␊
      Cannot generate property access␊
        at test() (spec.walt:7:16)␊
      ␊
      ␊
            obj.y = 5;␊
                ^ Cannot assign "5". Key is "unreachable"␊
      Cannot generate property access␊
        at test() (spec.walt:8:12)␊
      `,
    }

## undefined types throw

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 1 problems.␊
      ␊
      ␊
      import { foo: Type } from 'env';␊
                    ^^^^ Invalid Import. Type type does not exist␊
      Undefined Type Type␊
        at global (spec.walt:1:19)␊
      `,
    }

## unknown user types at global scope, error

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 2 problems.␊
      ␊
      ␊
          let t: unknown = 0;␊
                              Variables must be assigned with a known type.␊
      Unknown type used in a declaration, "unknown"␊
        at global (spec.walt:2:24)␊
      ␊
      ␊
            let k: unknown = 0;␊
                                Variables must be assigned with a known type.␊
      Unknown type used in a declartion, "unknown"␊
        at foo() (spec.walt:4:26)␊
      `,
    }

## unterminated assignment statements

> Snapshot 1

    Error {
      offset: 44,
      token: {
        col: 7,
        line: 6,
        lineBreaks: 0,
        offset: 85,
        text: 'y',
        toString: Function tokenToString {},
        type: 'identifier',
        value: 'y',
      },
      message: `undefined at line 6 col 7:␊
      ␊
              y␊
              ^␊
      Unexpected identifier token: "y"␊
      `,
    }

## unterminated declaration statements

> Snapshot 1

    Error {
      offset: 23,
      token: {
        col: 7,
        line: 4,
        lineBreaks: 0,
        offset: 52,
        text: 'x',
        toString: Function tokenToString {},
        type: 'identifier',
        value: 'x',
      },
      message: `undefined at line 4 col 7:␊
      ␊
              x␊
              ^␊
      Unexpected identifier token: "x"␊
      `,
    }

## untyped imports need to be compiled out via a linker/build step

> Snapshot 1

    Error {
      message: `Cannot generate WebAssembly for spec.walt. 1 problems.␊
      ␊
      ␊
            foo␊
            ^^^ Looks like you'd like to infer a type, but it was never provided by a linker. Non-concrete types cannot be compiled.␊
      Infered type not supplied.␊
        at global (spec.walt:3:10)␊
      `,
    }
