From 85de20c4fcc81f19ed80fe914a4a584ac2bdd528 Mon Sep 17 00:00:00 2001 From: Daniel Wirtz Date: Sun, 31 Mar 2019 19:59:39 +0200 Subject: [PATCH 1/2] Add WASI bindings (#562) --- std/assembly/bindings/wasi.ts | 1 + std/assembly/bindings/wasi_unstable.ts | 1449 ++++++++++++++++++++++++ tests/compiler/wasi.optimized.wat | 18 + tests/compiler/wasi.ts | 73 ++ tests/compiler/wasi.untouched.wat | 546 +++++++++ 5 files changed, 2087 insertions(+) create mode 100644 std/assembly/bindings/wasi.ts create mode 100644 std/assembly/bindings/wasi_unstable.ts create mode 100644 tests/compiler/wasi.optimized.wat create mode 100644 tests/compiler/wasi.ts create mode 100644 tests/compiler/wasi.untouched.wat diff --git a/std/assembly/bindings/wasi.ts b/std/assembly/bindings/wasi.ts new file mode 100644 index 00000000..c6bd75e9 --- /dev/null +++ b/std/assembly/bindings/wasi.ts @@ -0,0 +1 @@ +export * from "./wasi_unstable"; diff --git a/std/assembly/bindings/wasi_unstable.ts b/std/assembly/bindings/wasi_unstable.ts new file mode 100644 index 00000000..d5c8e799 --- /dev/null +++ b/std/assembly/bindings/wasi_unstable.ts @@ -0,0 +1,1449 @@ +// see: https://wasi.dev + +/* tslint:disable:max-line-length */ + +// helper types to be more explicit +type char = u8; +type ptr = usize; // all pointers are usize'd +type struct = T; // structs are references already in AS + +/** Read command-line argument data. */ +export declare function args_get( + /** Input: Pointer to a buffer to write the argument pointers. */ + argv: ptr>, + /** Input: Pointer to a buffer to write the argument string data. */ + argv_buf: ptr +): errno; + +/** Return command-line argument data sizes. */ +export declare function args_sizes_get( + /** Output: Number of arguments. */ + argc: ptr, + /** Output: Size of the argument string data. */ + argv_buf_size: ptr +): errno; + +/** Return the resolution of a clock. */ +export declare function clock_res_get( + /** Input: The clock for which to return the resolution. */ + clock: clockid, + /** Output: The resolution of the clock. */ + resolution: ptr +): errno; + +/** Return the time value of a clock. */ +export declare function clock_time_get( + /** Input: Cock for which to return the time. */ + clock: clockid, + /** Input: Maximum lag (exclusive) that the returned time value may have, compared to its actual value. */ + precision: timestamp, + /** Output: Time value of the clock. */ + time: ptr +): errno; + +/** Read environment variable data. */ +export declare function environ_get( + /** Input: Pointer to a buffer to write the environment variable pointers. */ + environ: ptr, + /** Input: Pointer to a buffer to write the environment variable string data. */ + environ_buf: usize +): errno; + +/** Return command-line argument data sizes. */ +export declare function environ_sizes_get( + /** Output: The number of environment variables. */ + environ_count: ptr, + /** Output: The size of the environment variable string data. */ + environ_buf_size: ptr +): errno; + +/** Provide file advisory information on a file descriptor. */ +export declare function fd_advise( + /** Input: The file descriptor for the file for which to provide file advisory information. */ + fd: fd, + /** Input: The offset within the file to which the advisory applies. */ + offset: filesize, + /** Input: The length of the region to which the advisory applies. */ + len: filesize, + /** Input: The advice. */ + advice: advice +): errno; + +/** Provide file advisory information on a file descriptor. */ +export declare function fd_allocate( + /** Input: The file descriptor for the file in which to allocate space. */ + fd: fd, + /** Input: The offset at which to start the allocation. */ + offset: filesize, + /** Input: The length of the area that is allocated. */ + len: filesize +): errno; + +/** Close a file descriptor. */ +export declare function fd_close( + /** Input: The file descriptor to close. */ + fd: fd +): errno; + +/** Synchronize the data of a file to disk. */ +export declare function fd_datasync( + /** Input: The file descriptor of the file to synchronize to disk. */ + fd: fd +): errno; + +/** Get the attributes of a file descriptor. */ +export declare function fd_fdstat_get( + /** Input: The file descriptor to inspect. */ + fd: fd, + /** Input: The buffer where the file descriptor's attributes are stored. */ + buf: struct +): errno; + +/** Adjust the flags associated with a file descriptor. */ +export declare function fd_fdstat_set_flags( + /** Input: The file descriptor to operate on. */ + fd: fd, + /** Input: The desired values of the file descriptor flags. */ + flags: fdflags +): errno; + +/** Adjust the rights associated with a file descriptor. */ +export declare function fd_fdstat_set_rights( + /** Input: The file descriptor to operate on. */ + fd: fd, + /** Input: The desired rights of the file descriptor. */ + fs_rights_base: rights, + /** Input: The desired rights of the file descriptor. */ + fs_rights_inheriting: rights +): errno; + +/** Return the attributes of an open file. */ +export declare function fd_filestat_get( + /** Input: The file descriptor to inspect. */ + fd: fd, + /** Input: The buffer where the file's attributes are stored. */ + buf: struct +): errno; + +/** Adjust the size of an open file. If this increases the file's size, the extra bytes are filled with zeros. */ +export declare function fd_filestat_set_size( + /** Input: A file descriptor for the file to adjust. */ + fd: fd, + /** Input: The desired file size. */ + size: filesize +): errno; + +/** Adjust the timestamps of an open file or directory. */ +export declare function fd_filestat_set_times( + /** Input: The file descriptor to operate on. */ + fd: fd, + /** Input: The desired values of the data access timestamp. */ + st_atim: timestamp, + /** Input: The desired values of the data modification timestamp. */ + st_mtim: timestamp, + /** Input: A bitmask indicating which timestamps to adjust. */ + fstflags: fstflags +): errno; + +/** Read from a file descriptor, without using and updating the file descriptor's offset. */ +export declare function fd_pread( + /** Input: The file descriptor from which to read data. */ + fd: fd, + /** Input: List of scatter/gather vectors in which to store data. */ + iovs: ptr>, + /** Input: Length of the list of scatter/gather vectors in which to store data. */ + iovs_len: usize, + /** Input: The offset within the file at which to read. */ + offset: filesize, + /** Output: The number of bytes read. */ + nread: ptr +): errno; + +/** Return a description of the given preopened file descriptor. */ +export declare function fd_prestat_get( + /** Input: The file descriptor about which to retrieve information. */ + fd: fd, + /** Input: The buffer where the description is stored. */ + buf: struct +): errno; + +/** Return a description of the given preopened file descriptor. */ +export declare function fd_prestat_dir_name( + /** Input: The file descriptor about which to retrieve information. */ + fd: fd, + /** Input: Buffer into which to write the preopened directory name. */ + path: ptr, + /** Input: Length of the buffer into which to write the preopened directory name. */ + path_len: usize +): errno; + +/** Write to a file descriptor, without using and updating the file descriptor's offset. */ +export declare function fd_pwrite( + /** Input: The file descriptor to which to write data. */ + fd: fd, + /** Input: List of scatter/gather vectors from which to retrieve data. */ + iovs: ptr>, + /** Input: Length of the list of scatter/gather vectors from which to retrieve data. */ + iovs_len: usize, + /** Input: The offset within the file at which to write. */ + offset: filesize, + /** Output: The number of bytes written. */ + nwritten: ptr +): errno; + +/** Read from a file descriptor. */ +export declare function fd_read( + /** Input: The file descriptor from which to read data. */ + fd: fd, + /** Input: List of scatter/gather vectors to which to store data. */ + iovs: ptr>, + /** Input: Length of the list of scatter/gather vectors to which to store data. */ + iovs_len: usize, + /** Output: The number of bytes read. */ + nread: ptr +): errno; + +/** Read directory entries from a directory. */ +export declare function fd_readdir( + /** Input: Directory from which to read the directory entries. */ + fd: fd, + /** Input: Buffer where directory entries are stored. */ + buf: ptr>, + /** Input: Length of the buffer where directory entries are stored. */ + buf_len: usize, + /** Input: Location within the directory to start reading. */ + cookie: dircookie, + /** Output: Number of bytes stored in the read buffer. If less than the size of the read buffer, the end of the directory has been reached. */ + buf_used: ptr +): errno; + +/** Atomically replace a file descriptor by renumbering another file descriptor. */ +export declare function fd_renumber( + /** Input: The file descriptor to renumber. */ + from: fd, + /** Input: The file descriptor to overwrite. */ + to: fd +): errno; + +/** Move the offset of a file descriptor. */ +export declare function fd_seek( + /** Input: The file descriptor to operate on. */ + fd: fd, + /** Input: The number of bytes to move. */ + offset: filedelta, + /** Input: The base from which the offset is relative. */ + whence: whence, + /** Output: The new offset of the file descriptor, relative to the start of the file. */ + newoffset: ptr +): errno; + +/** Synchronize the data and metadata of a file to disk. */ +export declare function fd_sync( + /** Input: The file descriptor of the file containing the data and metadata to synchronize to disk. */ + fd: fd +): errno; + +/** Return the current offset of a file descriptor. */ +export declare function fd_tell( + /** Input: The file descriptor to inspect. */ + fd: fd, + /** Output: The current offset of the file descriptor, relative to the start of the file. */ + newoffset: ptr +): errno; + +/** Write to a file descriptor. */ +export declare function fd_write( + /** Input: The file descriptor to which to write data. */ + fd: fd, + /** Input: List of scatter/gather vectors from which to retrieve data. */ + iovs: ptr>, + /** Input: List of scatter/gather vectors from which to retrieve data. */ + iovs_len: usize, + /** Output: The number of bytes written. */ + nwritten: ptr +): errno; + +/* Create a directory. */ +export declare function path_create_directory( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: The path at which to create the directory. */ + path: ptr, + /** Input: The path at which to create the directory. */ + path_len: usize +): errno; + +/** Return the attributes of a file or directory. */ +export declare function path_filestat_get( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: Flags determining the method of how the path is resolved. */ + flags: lookupflags, + /** Input: The path of the file or directory to inspect. */ + path: ptr, + /** Input: The path of the file or directory to inspect. */ + path_len: usize, + /** Input: The buffer where the file's attributes are stored. */ + buf: struct +): errno; + +/** Adjust the timestamps of a file or directory. */ +export declare function path_filestat_set_times( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: Flags determining the method of how the path is resolved. */ + flags: lookupflags, + /** Input: The path of the file or directory to operate on. */ + path: ptr, + /** Input: The path of the file or directory to operate on. */ + path_len: usize, + /** Input: The desired values of the data access timestamp. */ + st_atim: timestamp, + /** Input: The desired values of the data modification timestamp. */ + st_mtim: timestamp, + /** Input: A bitmask indicating which timestamps to adjust. */ + fstflags: fstflags +): errno; + +/** Create a hard link. */ +export declare function path_link( + /** Input: The working directory at which the resolution of the old path starts. */ + old_fd: fd, + /** Input: Flags determining the method of how the path is resolved. */ + old_flags: lookupflags, + /** Input: The source path from which to link. */ + old_path: ptr, + /** Input: The source path from which to link. */ + old_path_len: usize, + /** Input: The working directory at which the resolution of the new path starts. */ + new_fd: fd, + /** Input: The destination path at which to create the hard link. */ + new_path: ptr, + /** Input: The length of the destination path at which to create the hard link. */ + new_path_len: usize +): errno; + +/** Open a file or directory. */ +export declare function path_open( + /** Input: The working directory at which the resolution of the path starts. */ + dirfd: fd, + /** Input: Flags determining the method of how the path is resolved. */ + dirflags: lookupflags, + /** Input: The path of the file or directory to open. */ + path: ptr, + /** Input: The length of the path of the file or directory to open. */ + path_len: usize, + /** Input: The method by which to open the file. */ + oflags: oflags, + /** Input: The initial base rights that apply to operations using the file descriptor itself. */ + fs_rights_base: rights, + /** Input: The initial inheriting rights that apply to file descriptors derived from it. */ + fs_rights_inheriting: rights, + /** Input: The initial flags of the file descriptor. */ + fs_flags: fdflags, + /** Output: The file descriptor of the file that has been opened. */ + fd: ptr +): errno; + +/** Read the contents of a symbolic link. */ +export declare function path_readlink( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: The path of the symbolic link from which to read. */ + path: ptr, + /** Input: The length of the path of the symbolic link from which to read. */ + path_len: usize, + /** Input: The buffer to which to write the contents of the symbolic link. */ + buf: ptr, + /** Input: The length of the buffer to which to write the contents of the symbolic link. */ + buf_len: usize, + /** Output: The number of bytes placed in the buffer. */ + buf_used: ptr +): errno; + +/** Remove a directory. */ +export declare function path_remove_directory( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: The path to a directory to remove. */ + path: ptr, + /** Input: The length of the path to a directory to remove. */ + path_len: usize +): errno; + +/** Rename a file or directory. */ +export declare function path_rename( + /** Input: The working directory at which the resolution of the old path starts. */ + old_fd: fd, + /** Input: The source path of the file or directory to rename. */ + old_path: ptr, + /** Input: The length of the source path of the file or directory to rename. */ + old_path_len: usize, + /** Input: The working directory at which the resolution of the new path starts. */ + new_fd: fd, + /** Input: The destination path to which to rename the file or directory. */ + new_path: ptr, + /** Input: The length of the destination path to which to rename the file or directory. */ + new_path_len: usize +): errno; + +/** Create a symbolic link. */ +export declare function path_symlink( + /** Input: The contents of the symbolic link. */ + old_path: ptr, + /** Input: The length of the contents of the symbolic link. */ + old_path_len: usize, + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: The destination path at which to create the symbolic link. */ + new_path: ptr, + /** Input: The length of the destination path at which to create the symbolic link. */ + new_path_len: usize +): errno; + +/** Unlink a file. */ +export declare function path_unlink_file( + /** Input: The working directory at which the resolution of the path starts. */ + fd: fd, + /** Input: The path to a file to unlink. */ + path: ptr, + /** Input: The length of the path to a file to unlink. */ + path_len: usize +): errno; + +/** Concurrently poll for the occurrence of a set of events. */ +export declare function poll_oneoff( + /** Input: The events to which to subscribe. */ + in_: ptr>, + /** Input: The events that have occurred. */ + out: ptr>, + /** Input: Both the number of subscriptions and events. */ + nsubscriptions: usize, + /** Output: The number of events stored. */ + nevents: ptr +): errno; + +/** Terminate the process normally. An exit code of 0 indicates successful termination of the program. The meanings of other values is dependent on the environment. */ +export declare function proc_exit( + /** Input: The exit code returned by the process. */ + rval: u32 +): void; + +/** Send a signal to the process of the calling thread. */ +export declare function proc_raise( + /** Input: The signal condition to trigger. */ + sig: signal +): errno; + +/** Write high-quality random data into a buffer. */ +export declare function random_get( + /** Input: The buffer to fill with random data. */ + buf: usize, + /** Input: The length of the buffer to fill with random data. */ + buf_len: usize +): errno; + +/** Temporarily yield execution of the calling thread. */ +export declare function sched_yield(): errno; + +/** Receive a message from a socket. */ +export declare function sock_recv( + /** Input: The socket on which to receive data. */ + sock: fd, + /** Input: List of scatter/gather vectors to which to store data. */ + ri_data: ptr>, + /** Input: The length of the list of scatter/gather vectors to which to store data. */ + ri_data_len: usize, + /** Input: Message flags. */ + ri_flags: riflags, + /** Output: Number of bytes stored in `ri_data`. */ + ro_datalen: ptr, + /** Output: Message flags. */ + ro_flags: ptr +): errno; + +/** Send a message on a socket. */ +export declare function sock_send( + /** Input: The socket on which to send data. */ + sock: fd, + /** Input: List of scatter/gather vectors to which to retrieve data */ + si_data: ptr>, + /** Input: The length of the list of scatter/gather vectors to which to retrieve data */ + si_data_len: usize, + /** Input: Message flags. */ + si_flags: siflags, + /** Output: Number of bytes transmitted. */ + so_datalen: ptr +): errno; + +/** Shut down socket send and receive channels. */ +export declare function sock_shutdown( + /** Input: The socket on which to shutdown channels. */ + sock: fd, + /** Input: Which channels on the socket to shut down. */ + how: sdflags +): errno; + +// === Types ====================================================================================== + +/** File or memory access pattern advisory information. */ +export namespace advice { + /** The application has no advice to give on its behavior with respect to the specified data. */ + // @ts-ignore: decorator + @inline + export const NORMAL: advice = 0; + /** The application expects to access the specified data sequentially from lower offsets to higher offsets. */ + // @ts-ignore: decorator + @inline + export const SEQUENTIAL : advice = 1; + /** The application expects to access the specified data in a random order. */ + // @ts-ignore: decorator + @inline + export const RANDOM: advice = 2; + /** The application expects to access the specified data in the near future. */ + // @ts-ignore: decorator + @inline + export const WILLNEED: advice = 3; + /** The application expects that it will not access the specified data in the near future. */ + // @ts-ignore: decorator + @inline + export const DONTNEED: advice = 4; + /** The application expects to access the specified data once and then not reuse it thereafter. */ + // @ts-ignore: decorator + @inline + export const NOREUSE: advice = 5; +} +export type advice = u8; + +/** Identifiers for clocks. */ +export namespace clockid { + /** The clock measuring real time. Time value zero corresponds with 1970-01-01T00:00:00Z. */ + // @ts-ignore: decorator + @inline + export const REALTIME: clockid = 0; + /** The store-wide monotonic clock. Absolute value has no meaning. */ + // @ts-ignore: decorator + @inline + export const MONOTONIC: clockid = 1; + /** The CPU-time clock associated with the current process. */ + // @ts-ignore: decorator + @inline + export const PROCESS_CPUTIME_ID: clockid = 2; + /** The CPU-time clock associated with the current thread. */ + // @ts-ignore: decorator + @inline + export const THREAD_CPUTIME_ID: clockid = 3; +} +export type clockid = u32; + +/** Identifier for a device containing a file system. Can be used in combination with `inode` to uniquely identify a file or directory in the filesystem. */ +export type device = u64; + +/** A reference to the offset of a directory entry. */ +export type dircookie = u64; + +/** A directory entry. */ +@unmanaged export class dirent { + /** The offset of the next directory entry stored in this directory. */ + next: dircookie; + /** The serial number of the file referred to by this directory entry. */ + ino: inode; + /** The length of the name of the directory entry. */ + namlen: u32; + /** The type of the file referred to by this directory entry. */ + type: filetype; + private __padding0: u16; +} + +/** Error codes returned by functions. */ +export namespace errno { + /** No error occurred. System call completed successfully. */ + // @ts-ignore: decorator + @inline + export const SUCCESS: errno = 0; + /** Argument list too long. */ + // @ts-ignore: decorator + @inline + export const TOOBIG: errno = 1; + /** Permission denied. */ + // @ts-ignore: decorator + @inline + export const ACCES: errno = 2; + /** Address in use. */ + // @ts-ignore: decorator + @inline + export const ADDRINUSE: errno = 3; + /** Address not available. */ + // @ts-ignore: decorator + @inline + export const ADDRNOTAVAIL: errno = 4; + /** Address family not supported. */ + // @ts-ignore: decorator + @inline + export const AFNOSUPPORT: errno = 5; + /** Resource unavailable, or operation would block. */ + // @ts-ignore: decorator + @inline + export const AGAIN: errno = 6; + /** Connection already in progress. */ + // @ts-ignore: decorator + @inline + export const ALREADY: errno = 7; + /** Bad file descriptor. */ + // @ts-ignore: decorator + @inline + export const BADF: errno = 8; + /** Bad message. */ + // @ts-ignore: decorator + @inline + export const BADMSG: errno = 9; + /** Device or resource busy. */ + // @ts-ignore: decorator + @inline + export const BUSY: errno = 10; + /** Operation canceled. */ + // @ts-ignore: decorator + @inline + export const CANCELED: errno = 11; + /** No child processes. */ + // @ts-ignore: decorator + @inline + export const CHILD: errno = 12; + /** Connection aborted. */ + // @ts-ignore: decorator + @inline + export const CONNABORTED: errno = 13; + /** Connection refused. */ + // @ts-ignore: decorator + @inline + export const CONNREFUSED: errno = 14; + /** Connection reset. */ + // @ts-ignore: decorator + @inline + export const CONNRESET: errno = 15; + /** Resource deadlock would occur. */ + // @ts-ignore: decorator + @inline + export const DEADLK: errno = 16; + /** Destination address required. */ + // @ts-ignore: decorator + @inline + export const DESTADDRREQ: errno = 17; + /** Mathematics argument out of domain of function. */ + // @ts-ignore: decorator + @inline + export const DOM: errno = 18; + /** Reserved. */ + // @ts-ignore: decorator + @inline + export const DQUOT: errno = 19; + /** File exists. */ + // @ts-ignore: decorator + @inline + export const EXIST: errno = 20; + /** Bad address. */ + // @ts-ignore: decorator + @inline + export const FAULT: errno = 21; + /** File too large. */ + // @ts-ignore: decorator + @inline + export const FBIG: errno = 22; + /** Host is unreachable. */ + // @ts-ignore: decorator + @inline + export const HOSTUNREACH: errno = 23; + /** Identifier removed. */ + // @ts-ignore: decorator + @inline + export const IDRM: errno = 24; + /** Illegal byte sequence. */ + // @ts-ignore: decorator + @inline + export const ILSEQ: errno = 25; + /** Operation in progress. */ + // @ts-ignore: decorator + @inline + export const INPROGRESS: errno = 26; + /** Interrupted function. */ + // @ts-ignore: decorator + @inline + export const INTR: errno = 27; + /** Invalid argument. */ + // @ts-ignore: decorator + @inline + export const INVAL: errno = 28; + /** I/O error. */ + // @ts-ignore: decorator + @inline + export const IO: errno = 29; + /** Socket is connected. */ + // @ts-ignore: decorator + @inline + export const ISCONN: errno = 30; + /** Is a directory. */ + // @ts-ignore: decorator + @inline + export const ISDIR: errno = 31; + /** Too many levels of symbolic links. */ + // @ts-ignore: decorator + @inline + export const LOOP: errno = 32; + /** File descriptor value too large. */ + // @ts-ignore: decorator + @inline + export const MFILE: errno = 33; + /** Too many links. */ + // @ts-ignore: decorator + @inline + export const MLINK: errno = 34; + /** Message too large. */ + // @ts-ignore: decorator + @inline + export const MSGSIZE: errno = 35; + /** Reserved. */ + // @ts-ignore: decorator + @inline + export const MULTIHOP: errno = 36; + /** Filename too long. */ + // @ts-ignore: decorator + @inline + export const NAMETOOLONG: errno = 37; + /** Network is down. */ + // @ts-ignore: decorator + @inline + export const NETDOWN: errno = 38; + /** Connection aborted by network. */ + // @ts-ignore: decorator + @inline + export const NETRESET: errno = 39; + /** Network unreachable. */ + // @ts-ignore: decorator + @inline + export const NETUNREACH: errno = 40; + /** Too many files open in system. */ + // @ts-ignore: decorator + @inline + export const NFILE: errno = 41; + /** No buffer space available. */ + // @ts-ignore: decorator + @inline + export const NOBUFS: errno = 42; + /** No such device. */ + // @ts-ignore: decorator + @inline + export const NODEV: errno = 43; + /** No such file or directory. */ + // @ts-ignore: decorator + @inline + export const NOENT: errno = 44; + /** Executable file format error. */ + // @ts-ignore: decorator + @inline + export const NOEXEC: errno = 45; + /** No locks available. */ + // @ts-ignore: decorator + @inline + export const NOLCK: errno = 46; + /** Reserved. */ + // @ts-ignore: decorator + @inline + export const NOLINK: errno = 47; + /** Not enough space. */ + // @ts-ignore: decorator + @inline + export const NOMEM: errno = 48; + /** No message of the desired type. */ + // @ts-ignore: decorator + @inline + export const NOMSG: errno = 49; + /** Protocol not available. */ + // @ts-ignore: decorator + @inline + export const NOPROTOOPT: errno = 50; + /** No space left on device. */ + // @ts-ignore: decorator + @inline + export const NOSPC: errno = 51; + /** Function not supported. */ + // @ts-ignore: decorator + @inline + export const NOSYS: errno = 52; + /** The socket is not connected. */ + // @ts-ignore: decorator + @inline + export const NOTCONN: errno = 53; + /** Not a directory or a symbolic link to a directory. */ + // @ts-ignore: decorator + @inline + export const NOTDIR: errno = 54; + /** Directory not empty. */ + // @ts-ignore: decorator + @inline + export const NOTEMPTY: errno = 55; + /** State not recoverable. */ + // @ts-ignore: decorator + @inline + export const NOTRECOVERABLE: errno = 56; + /** Not a socket. */ + // @ts-ignore: decorator + @inline + export const NOTSOCK: errno = 57; + /** Not supported, or operation not supported on socket. */ + // @ts-ignore: decorator + @inline + export const NOTSUP: errno = 58; + /** Inappropriate I/O control operation. */ + // @ts-ignore: decorator + @inline + export const NOTTY: errno = 59; + /** No such device or address. */ + // @ts-ignore: decorator + @inline + export const NXIO: errno = 60; + /** Value too large to be stored in data type. */ + // @ts-ignore: decorator + @inline + export const OVERFLOW: errno = 61; + /** Previous owner died. */ + // @ts-ignore: decorator + @inline + export const OWNERDEAD: errno = 62; + /** Operation not permitted. */ + // @ts-ignore: decorator + @inline + export const PERM: errno = 63; + /** Broken pipe. */ + // @ts-ignore: decorator + @inline + export const PIPE: errno = 64; + /** Protocol error. */ + // @ts-ignore: decorator + @inline + export const PROTO: errno = 65; + /** Protocol not supported. */ + // @ts-ignore: decorator + @inline + export const PROTONOSUPPORT: errno = 66; + /** Protocol wrong type for socket. */ + // @ts-ignore: decorator + @inline + export const PROTOTYPE: errno = 67; + /** Result too large. */ + // @ts-ignore: decorator + @inline + export const RANGE: errno = 68; + /** Read-only file system. */ + // @ts-ignore: decorator + @inline + export const ROFS: errno = 69; + /** Invalid seek. */ + // @ts-ignore: decorator + @inline + export const SPIPE: errno = 70; + /** No such process. */ + // @ts-ignore: decorator + @inline + export const SRCH: errno = 71; + /** Reserved. */ + // @ts-ignore: decorator + @inline + export const STALE: errno = 72; + /** Connection timed out. */ + // @ts-ignore: decorator + @inline + export const TIMEDOUT: errno = 73; + /** Text file busy. */ + // @ts-ignore: decorator + @inline + export const TXTBSY: errno = 74; + /** Cross-device link. */ + // @ts-ignore: decorator + @inline + export const XDEV: errno = 75; + /** Extension: Capabilities insufficient. */ + // @ts-ignore: decorator + @inline + export const NOTCAPABLE: errno = 76; +} +export type errno = u16; + +/** An event that occurred. */ +@unmanaged export abstract class event { + /** User-provided value that got attached to `subscription#userdata`. */ + userdata: userdata; + /** If non-zero, an error that occurred while processing the subscription request. */ + error: errno; + /* The type of the event that occurred. */ + type: eventtype; + private __padding0: u16; +} + +/** An event that occurred when type is `eventtype.FD_READ` or `eventtype.FD_WRITE`. */ +@unmanaged export class rwevent extends event { + /* The number of bytes available for reading or writing. */ + nbytes: filesize; + /* The state of the file descriptor. */ + flags: eventrwflags; + private __padding1: u32; +} + +/** The state of the file descriptor subscribed to with `eventtype.FD_READ` or `eventtype.FD_WRITE`. */ +export namespace eventrwflags { + /** The peer of this socket has closed or disconnected. */ + // @ts-ignore: decorator + @inline + export const HANGUP: eventrwflags = 1; +} +export type eventrwflags = u16; + +/** Type of a subscription to an event or its occurrence. */ +export namespace eventtype { + /** The time value of clock has reached the timestamp. */ + // @ts-ignore: decorator + @inline + export const CLOCK: eventtype = 0; + /** File descriptor has data available for reading. */ + // @ts-ignore: decorator + @inline + export const FD_READ: eventtype = 1; + /** File descriptor has capacity available for writing */ + // @ts-ignore: decorator + @inline + export const FD_WRITE: eventtype = 2; +} +export type eventtype = u8; + +/** Exit code generated by a process when exiting. */ +export type exitcode = u32; + +/** A file descriptor number. */ +export type fd = u32; + +/** File descriptor flags. */ +export namespace fdflags { + /** Append mode: Data written to the file is always appended to the file's end. */ + // @ts-ignore: decorator + @inline + export const APPEND: fdflags = 1; + /** Write according to synchronized I/O data integrity completion. Only the data stored in the file is synchronized. */ + // @ts-ignore: decorator + @inline + export const DSYNC: fdflags = 2; + /** Non-blocking mode. */ + // @ts-ignore: decorator + @inline + export const NONBLOCK: fdflags = 4; + /** Synchronized read I/O operations. */ + // @ts-ignore: decorator + @inline + export const RSYNC: fdflags = 8; + /** Write according to synchronized I/O file integrity completion. */ + // @ts-ignore: decorator + @inline + export const SYNC: fdflags = 16; +} +export type fdflags = u16; + +/** File descriptor attributes. */ +@unmanaged export class fdstat { + /** File type. */ + filetype: filetype; + /** File descriptor flags. */ + flags: fdflags; + /** Rights that apply to this file descriptor. */ + rights_base: rights; + /** Maximum set of rights that may be installed on new file descriptors that are created through this file descriptor, e.g., through `path_open`. */ + rights_inheriting: rights; +} + +/** Relative offset within a file. */ +export type filedelta = i64; + +/** Non-negative file size or length of a region within a file. */ +export type filesize = u64; + +/** File attributes. */ +@unmanaged export class filestat { + /** Device ID of device containing the file. */ + dev: device; + /** File serial number. */ + ino: inode; + /** File type. */ + filetype: filetype; + /** Number of hard links to the file. */ + nlink: linkcount; + /** For regular files, the file size in bytes. For symbolic links, the length in bytes of the pathname contained in the symbolic link. */ + size: filesize; + /** Last data access timestamp. */ + atim: timestamp; + /** Last data modification timestamp. */ + mtim: timestamp; + /** Last file status change timestamp. */ + ctim: timestamp; +} + +/** The type of a file descriptor or file. */ +export namespace filetype { + /** The type of the file descriptor or file is unknown or is different from any of the other types specified. */ + // @ts-ignore: decorator + @inline + export const UNKNOWN: filetype = 0; + /** The file descriptor or file refers to a block device inode. */ + // @ts-ignore: decorator + @inline + export const BLOCK_DEVICE: filetype = 1; + /** The file descriptor or file refers to a character device inode. */ + // @ts-ignore: decorator + @inline + export const CHARACTER_DEVICE: filetype = 2; + /** The file descriptor or file refers to a directory inode. */ + // @ts-ignore: decorator + @inline + export const DIRECTORY: filetype = 3; + /** The file descriptor or file refers to a regular file inode. */ + // @ts-ignore: decorator + @inline + export const REGULAR_FILE: filetype = 4; + /** The file descriptor or file refers to a datagram socket. */ + // @ts-ignore: decorator + @inline + export const SOCKET_DGRAM: filetype = 5; + /** The file descriptor or file refers to a byte-stream socket. */ + // @ts-ignore: decorator + @inline + export const SOCKET_STREAM: filetype = 6; + /** The file refers to a symbolic link inode. */ + // @ts-ignore: decorator + @inline + export const SYMBOLIC_LINK: filetype = 7; +} +export type filetype = u8; + +/** Which file time attributes to adjust. */ +export namespace fstflags { + /** Adjust the last data access timestamp to the value stored in `filestat#st_atim`. */ + // @ts-ignore: decorator + @inline + export const SET_ATIM: fstflags = 1; + /** Adjust the last data access timestamp to the time of clock `clockid.REALTIME`. */ + // @ts-ignore: decorator + @inline + export const SET_ATIM_NOW: fstflags = 2; + /** Adjust the last data modification timestamp to the value stored in `filestat#st_mtim`. */ + // @ts-ignore: decorator + @inline + export const SET_MTIM: fstflags = 4; + /** Adjust the last data modification timestamp to the time of clock `clockid.REALTIME`. */ + // @ts-ignore: decorator + @inline + export const SET_MTIM_NOW: fstflags = 8; +} +export type fstflags = u16; + +/** File serial number that is unique within its file system. */ +export type inode = u64; + +/** A region of memory for scatter/gather reads. */ +@unmanaged export class iovec { + /** The address of the buffer to be filled. */ + buf: usize; + /** The length of the buffer to be filled. */ + buf_len: usize; +} + +/** Number of hard links to an inode. */ +export type linkcount = u32; + +/** Flags determining the method of how paths are resolved. */ +export namespace lookupflags { + /** As long as the resolved path corresponds to a symbolic link, it is expanded. */ + // @ts-ignore: decorator + @inline + export const SYMLINK_FOLLOW: lookupflags = 1; +} +export type lookupflags = u32; + +/** Open flags. */ +export namespace oflags { + /** Create file if it does not exist. */ + // @ts-ignore: decorator + @inline + export const CREAT: oflags = 1; + /** Fail if not a directory. */ + // @ts-ignore: decorator + @inline + export const DIRECTORY: oflags = 2; + /** Fail if file already exists. */ + // @ts-ignore: decorator + @inline + export const EXCL: oflags = 4; + /** Truncate file to size 0. */ + // @ts-ignore: decorator + @inline + export const TRUNC: oflags = 8; +} +export type oflags = u16; + +// TODO: undocumented +export namespace preopentype { + // @ts-ignore: decorator + @inline + export const DIR: preopentype = 0; +} +export type preopentype = u8; + +// TODO: undocumented +export abstract class prestat { + type: preopentype; +} + +// TODO: undocumented +export class dirprestat extends prestat { + name_len: usize; +} + +/** Flags provided to `sock_recv`. */ +export namespace riflags { + /** Returns the message without removing it from the socket's receive queue. */ + // @ts-ignore: decorator + @inline + export const PEEK: riflags = 1; + /** On byte-stream sockets, block until the full amount of data can be returned. */ + // @ts-ignore: decorator + @inline + export const WAITALL: riflags = 2; +} +export type riflags = u16; + +/** File descriptor rights, determining which actions may be performed. */ +export namespace rights { + /** The right to invoke `fd_datasync`. */ + // @ts-ignore: decorator + @inline + export const FD_DATASYNC: rights = 1; + /** The right to invoke `fd_read` and `sock_recv`. */ + // @ts-ignore: decorator + @inline + export const FD_READ: rights = 2; + /** The right to invoke `fd_seek`. This flag implies `rights.FD_TELL`. */ + // @ts-ignore: decorator + @inline + export const FD_SEEK: rights = 4; + /** The right to invoke `fd_fdstat_set_flags`. */ + // @ts-ignore: decorator + @inline + export const FD_FDSTAT_SET_FLAGS: rights = 8; + /** The right to invoke `fd_sync`. */ + // @ts-ignore: decorator + @inline + export const FD_SYNC: rights = 16; + /** The right to invoke `fd_seek` in such a way that the file offset remains unaltered (i.e., `whence.CUR` with offset zero), or to invoke `fd_tell`). */ + // @ts-ignore: decorator + @inline + export const FD_TELL: rights = 32; + /** The right to invoke `fd_write` and `sock_send`. If `rights.FD_SEEK` is set, includes the right to invoke `fd_pwrite`. */ + // @ts-ignore: decorator + @inline + export const FD_WRITE: rights = 64; + /** The right to invoke `fd_advise`. */ + // @ts-ignore: decorator + @inline + export const FD_ADVISE: rights = 128; + /** The right to invoke `fd_allocate`. */ + // @ts-ignore: decorator + @inline + export const FD_ALLOCATE: rights = 256; + /** The right to invoke `path_create_directory`. */ + // @ts-ignore: decorator + @inline + export const PATH_CREATE_DIRECTORY: rights = 512; + /** If `rights.PATH_OPEN` is set, the right to invoke `path_open` with `oflags.CREAT`. */ + // @ts-ignore: decorator + @inline + export const PATH_CREATE_FILE: rights = 1024; + /** The right to invoke `path_link` with the file descriptor as the source directory. */ + // @ts-ignore: decorator + @inline + export const PATH_LINK_SOURCE: rights = 2048; + /** The right to invoke `path_link` with the file descriptor as the target directory. */ + // @ts-ignore: decorator + @inline + export const PATH_LINK_TARGET: rights = 4096; + /** The right to invoke `path_open`. */ + // @ts-ignore: decorator + @inline + export const PATH_OPEN: rights = 8192; + /** The right to invoke `fd_readdir`. */ + // @ts-ignore: decorator + @inline + export const FD_READDIR: rights = 16384; + /** The right to invoke `path_readlink`. */ + // @ts-ignore: decorator + @inline + export const PATH_READLINK: rights = 32768; + /** The right to invoke `path_rename` with the file descriptor as the source directory. */ + // @ts-ignore: decorator + @inline + export const PATH_RENAME_SOURCE: rights = 65536; + /** The right to invoke `path_rename` with the file descriptor as the target directory. */ + // @ts-ignore: decorator + @inline + export const PATH_RENAME_TARGET: rights = 131072; + /** The right to invoke `path_filestat_get`. */ + // @ts-ignore: decorator + @inline + export const PATH_FILESTAT_GET: rights = 262144; + /** The right to change a file's size (there is no `path_filestat_set_size`). If `rights.PATH_OPEN` is set, includes the right to invoke `path_open` with `oflags.TRUNC`. */ + // @ts-ignore: decorator + @inline + export const PATH_FILESTAT_SET_SIZE: rights = 524288; + /** The right to invoke `path_filestat_set_times`. */ + // @ts-ignore: decorator + @inline + export const PATH_FILESTAT_SET_TIMES: rights = 1048576; + /** The right to invoke `fd_filestat_get`. */ + // @ts-ignore: decorator + @inline + export const FD_FILESTAT_GET: rights = 2097152; + /** The right to invoke `fd_filestat_set_size`. */ + // @ts-ignore: decorator + @inline + export const FD_FILESTAT_SET_SIZE: rights = 4194304; + /** The right to invoke `fd_filestat_set_times`. */ + // @ts-ignore: decorator + @inline + export const FD_FILESTAT_SET_TIMES: rights = 8388608; + /** The right to invoke `path_symlink`. */ + // @ts-ignore: decorator + @inline + export const RIGHT_PATH_SYMLINK: rights = 16777216; + /** The right to invoke `path_remove_directory`. */ + // @ts-ignore: decorator + @inline + export const PATH_REMOVE_DIRECTORY: rights = 33554432; + /** The right to invoke `path_unlink_file`. */ + // @ts-ignore: decorator + @inline + export const PATH_UNLINK_FILE: rights = 67108864; + /** If `rights.FD_READ` is set, includes the right to invoke `poll_oneoff` to subscribe to `eventtype.FD_READ`. If `rights.FD_WRITE` is set, includes the right to invoke `poll_oneoff` to subscribe to `eventtype.FD_WRITE`. */ + // @ts-ignore: decorator + @inline + export const POLL_FD_READWRITE: rights = 134217728; + /** The right to invoke `sock_shutdown`. */ + // @ts-ignore: decorator + @inline + export const SOCK_SHUTDOWN: rights = 268435456; +} +export type rights = u64; + +/** Flags returned by `sock_recv`. */ +export namespace roflags { + /** Message data has been truncated. */ + // @ts-ignore: decorator + @inline + export const DATA_TRUNCATED: roflags = 1; +} +export type roflags = u16; + +/** Which channels on a socket to shut down. */ +export namespace sdflags { + /** Disables further receive operations. */ + // @ts-ignore: decorator + @inline + export const RD: sdflags = 1; + /** Disables further send operations. */ + // @ts-ignore: decorator + @inline + export const WR: sdflags = 2; +} +export type sdflags = u8; + +/** Flags provided to `sock_send`. */ +export namespace siflags { + // As there are currently no flags defined, it must be set to zero. +} +export type siflags = u16; + +/** Signal condition. */ +export namespace signal { + /** Hangup. */ + // @ts-ignore: decorator + @inline + export const HUP: signal = 1; + /** Terminate interrupt signal. */ + // @ts-ignore: decorator + @inline + export const INT: signal = 2; + /** Terminal quit signal. */ + // @ts-ignore: decorator + @inline + export const QUIT: signal = 3; + /** Illegal instruction. */ + // @ts-ignore: decorator + @inline + export const ILL: signal = 4; + /** Trace/breakpoint trap. */ + // @ts-ignore: decorator + @inline + export const TRAP: signal = 5; + /** Process abort signal. */ + // @ts-ignore: decorator + @inline + export const ABRT: signal = 6; + /** Access to an undefined portion of a memory object. */ + // @ts-ignore: decorator + @inline + export const BUS: signal = 7; + /** Erroneous arithmetic operation. */ + // @ts-ignore: decorator + @inline + export const FPE: signal = 8; + /** Kill. */ + // @ts-ignore: decorator + @inline + export const KILL: signal = 9; + /** User-defined signal 1. */ + // @ts-ignore: decorator + @inline + export const USR1: signal = 10; + /** Invalid memory reference. */ + // @ts-ignore: decorator + @inline + export const SEGV: signal = 11; + /** User-defined signal 2. */ + // @ts-ignore: decorator + @inline + export const USR2: signal = 12; + /** Write on a pipe with no one to read it. */ + // @ts-ignore: decorator + @inline + export const PIPE: signal = 13; + /** Alarm clock. */ + // @ts-ignore: decorator + @inline + export const ALRM: signal = 14; + /** Termination signal. */ + // @ts-ignore: decorator + @inline + export const TERM: signal = 15; + /** Child process terminated, stopped, or continued. */ + // @ts-ignore: decorator + @inline + export const CHLD: signal = 16; + /** Continue executing, if stopped. */ + // @ts-ignore: decorator + @inline + export const CONT: signal = 17; + /** Stop executing. */ + // @ts-ignore: decorator + @inline + export const STOP: signal = 18; + /** Terminal stop signal. */ + // @ts-ignore: decorator + @inline + export const TSTP: signal = 19; + /** Background process attempting read. */ + // @ts-ignore: decorator + @inline + export const TTIN: signal = 20; + /** Background process attempting write. */ + // @ts-ignore: decorator + @inline + export const TTOU: signal = 21; + /** High bandwidth data is available at a socket. */ + // @ts-ignore: decorator + @inline + export const URG: signal = 22; + /** CPU time limit exceeded. */ + // @ts-ignore: decorator + @inline + export const XCPU: signal = 23; + /** File size limit exceeded. */ + // @ts-ignore: decorator + @inline + export const XFSZ: signal = 24; + /** Virtual timer expired. */ + // @ts-ignore: decorator + @inline + export const VTALRM: signal = 25; + // @ts-ignore: decorator + @inline + export const PROF: signal = 26; + // @ts-ignore: decorator + @inline + export const WINCH: signal = 27; + // @ts-ignore: decorator + @inline + export const POLL: signal = 28; + // @ts-ignore: decorator + @inline + export const PWR: signal = 29; + /** Bad system call. */ + // @ts-ignore: decorator + @inline + export const SYS: signal = 30; +} +export type signal = u8; + +/** Flags determining how to interpret the timestamp provided in `subscription_t::u.clock.timeout. */ +export namespace subclockflags { + /** If set, treat the timestamp provided in `clocksubscription` as an absolute timestamp. */ + // @ts-ignore: decorator + @inline + export const ABSTIME: subclockflags = 1; +} +export type subclockflags = u16; + +/** Subscription to an event. */ +@unmanaged export abstract class subscription { + /** User-provided value that is attached to the subscription. */ + userdata: userdata; + /** The type of the event to which to subscribe. */ + type: eventtype; + private __padding0: u32; +} + +/* Subscription to an event of type `eventtype.CLOCK`.**/ +@unmanaged export class clocksubscription extends subscription { + /** The user-defined unique identifier of the clock. */ + identifier: userdata; + /** The clock against which to compare the timestamp. */ + clock_id: clockid; + /** The absolute or relative timestamp. */ + timeout: timestamp; + /** The amount of time that the implementation may wait additionally to coalesce with other events. */ + precision: timestamp; + /** Flags specifying whether the timeout is absolute or relative. */ + flags: subclockflags; + private __padding1: u32; +} + +/* Subscription to an event of type `eventtype.FD_READ` or `eventtype.FD_WRITE`.**/ +@unmanaged export class fdsubscription extends subscription { + /** The file descriptor on which to wait for it to become ready for reading or writing. */ + fd: fd; +} + +/** Timestamp in nanoseconds. */ +export type timestamp = u64; + +/** User-provided value that may be attached to objects that is retained when extracted from the implementation. */ +export type userdata = u64; + +/** The position relative to which to set the offset of the file descriptor. */ +export namespace whence { + /** Seek relative to current position. */ + // @ts-ignore: decorator + @inline + export const CUR: whence = 0; + /** Seek relative to end-of-file. */ + // @ts-ignore: decorator + @inline + export const END: whence = 1; + /** Seek relative to start-of-file. */ + // @ts-ignore: decorator + @inline + export const SET: whence = 2; +} +export type whence = u8; diff --git a/tests/compiler/wasi.optimized.wat b/tests/compiler/wasi.optimized.wat new file mode 100644 index 00000000..e04375f3 --- /dev/null +++ b/tests/compiler/wasi.optimized.wat @@ -0,0 +1,18 @@ +(module + (type $FUNCSIG$v (func)) + (memory $0 1) + (data (i32.const 8) "\07\00\00\00w\00a\00s\00i\00.\00t\00s") + (table $0 1 funcref) + (elem (i32.const 0) $null) + (global $wasi/sig (mut i32) (i32.const 1)) + (export "memory" (memory $0)) + (export "table" (table $0)) + (start $start) + (func $start (; 0 ;) (type $FUNCSIG$v) + i32.const 9 + global.set $wasi/sig + ) + (func $null (; 1 ;) (type $FUNCSIG$v) + nop + ) +) diff --git a/tests/compiler/wasi.ts b/tests/compiler/wasi.ts new file mode 100644 index 00000000..cd42168f --- /dev/null +++ b/tests/compiler/wasi.ts @@ -0,0 +1,73 @@ +import { dirent, rwevent, fdstat, filestat, iovec, clocksubscription, fdsubscription, signal, dirprestat } from "bindings/wasi"; + +const WASM32 = 1; +const WASM64 = 2; + +assert(offsetof("next") == 0); +assert(offsetof("ino") == 8); +assert(offsetof("namlen") == 16); +assert(offsetof("type") == 20); +assert(offsetof() == 24); + +assert(offsetof("userdata") == 0); +assert(offsetof("error") == 8); +assert(offsetof("type") == 10); +assert(offsetof("nbytes") == 16); +assert(offsetof("flags") == 24); +assert(offsetof() == 32); + +assert(offsetof("filetype") == 0); +assert(offsetof("flags") == 2); +assert(offsetof("rights_base") == 8); +assert(offsetof("rights_inheriting") == 16); +assert(offsetof() == 24); + +assert(offsetof("dev") == 0); +assert(offsetof("ino") == 8); +assert(offsetof("filetype") == 16); +assert(offsetof("nlink") == 20); +assert(offsetof("size") == 24); +assert(offsetof("atim") == 32); +assert(offsetof("mtim") == 40); +assert(offsetof("ctim") == 48); +assert(offsetof() == 56); + +assert(offsetof("buf") == 0); +if (ASC_TARGET == WASM32) { + assert(offsetof("buf_len") == 4); + assert(offsetof() == 8); +} else if (ASC_TARGET == WASM64) { + assert(offsetof("buf_len") == 8); + assert(offsetof() == 16); +} else { + assert(false); +} + +assert(offsetof("userdata") == 0); +assert(offsetof("type") == 8); +assert(offsetof("identifier") == 16); +assert(offsetof("clock_id") == 24); +assert(offsetof("timeout") == 32); +assert(offsetof("precision") == 40); +assert(offsetof("flags") == 48); +assert(offsetof() == 56); + +assert(offsetof("userdata") == 0); +assert(offsetof("type") == 8); +assert(offsetof("fd") == 16); +assert(offsetof() == 20); + +assert(offsetof("type") == 0); +if (ASC_TARGET == WASM32) { + assert(offsetof("name_len") == 4); + assert(offsetof() == 8); +} else if (ASC_TARGET == WASM64) { + assert(offsetof("name_len") == 8); + assert(offsetof() == 16); +} else { + assert(false); +} + +// check assignability of mimicked typed enums +var sig: signal = signal.HUP; +sig = signal.KILL; diff --git a/tests/compiler/wasi.untouched.wat b/tests/compiler/wasi.untouched.wat new file mode 100644 index 00000000..b71b5b77 --- /dev/null +++ b/tests/compiler/wasi.untouched.wat @@ -0,0 +1,546 @@ +(module + (type $FUNCSIG$viiii (func (param i32 i32 i32 i32))) + (type $FUNCSIG$v (func)) + (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) + (memory $0 1) + (data (i32.const 8) "\07\00\00\00w\00a\00s\00i\00.\00t\00s\00") + (table $0 1 funcref) + (elem (i32.const 0) $null) + (global $wasi/WASM32 i32 (i32.const 1)) + (global $wasi/WASM64 i32 (i32.const 2)) + (global $~lib/ASC_TARGET i32 (i32.const 0)) + (global $wasi/sig (mut i32) (i32.const 1)) + (global $~lib/memory/HEAP_BASE i32 (i32.const 28)) + (export "memory" (memory $0)) + (export "table" (table $0)) + (start $start) + (func $start:wasi (; 1 ;) (type $FUNCSIG$v) + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 6 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 7 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 8 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 20 + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 9 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 24 + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 10 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 12 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 13 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 10 + i32.const 10 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 14 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 15 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 24 + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 16 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 32 + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 17 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 19 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 2 + i32.const 2 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 20 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 21 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 22 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 24 + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 23 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 25 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 26 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 27 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 20 + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 28 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 24 + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 29 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 32 + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 30 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 40 + i32.const 40 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 31 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 48 + i32.const 48 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 32 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 56 + i32.const 56 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 33 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 35 + i32.const 0 + call $~lib/env/abort + unreachable + end + block + i32.const 4 + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 37 + i32.const 2 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 38 + i32.const 2 + call $~lib/env/abort + unreachable + end + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 46 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 47 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 48 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 24 + i32.const 24 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 49 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 32 + i32.const 32 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 50 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 40 + i32.const 40 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 51 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 48 + i32.const 48 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 52 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 56 + i32.const 56 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 53 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 55 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 56 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 16 + i32.const 16 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 57 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 20 + i32.const 20 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 58 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 60 + i32.const 0 + call $~lib/env/abort + unreachable + end + block + i32.const 4 + i32.const 4 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 62 + i32.const 2 + call $~lib/env/abort + unreachable + end + i32.const 8 + i32.const 8 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 8 + i32.const 63 + i32.const 2 + call $~lib/env/abort + unreachable + end + end + i32.const 9 + global.set $wasi/sig + ) + (func $start (; 2 ;) (type $FUNCSIG$v) + call $start:wasi + ) + (func $null (; 3 ;) (type $FUNCSIG$v) + ) +) From abf3de9076da002ff20a86d8d163017ad85815e0 Mon Sep 17 00:00:00 2001 From: Max Graey Date: Sun, 31 Mar 2019 21:00:54 +0300 Subject: [PATCH 2/2] Fix implicit string to bool conversion (#567) --- std/assembly/string.ts | 35 +- tests/compiler/number.optimized.wat | 2 +- tests/compiler/number.untouched.wat | 2 +- tests/compiler/std/array-access.optimized.wat | 2 +- tests/compiler/std/array-access.untouched.wat | 2 +- tests/compiler/std/array.optimized.wat | 2 +- tests/compiler/std/array.untouched.wat | 2 +- tests/compiler/std/string-utf8.optimized.wat | 8 +- tests/compiler/std/string-utf8.untouched.wat | 8 +- tests/compiler/std/string.optimized.wat | 1320 +++++++-------- tests/compiler/std/string.ts | 60 +- tests/compiler/std/string.untouched.wat | 1458 +++++++++-------- 12 files changed, 1502 insertions(+), 1399 deletions(-) diff --git a/std/assembly/string.ts b/std/assembly/string.ts index b6ca9f73..c1a343c2 100644 --- a/std/assembly/string.ts +++ b/std/assembly/string.ts @@ -42,7 +42,7 @@ export class String { ); } else { code -= 0x10000; - let hi: u32 = (code >>> 10) + 0xD800; + let hi: u32 = (code >>> 10) + 0xD800; let lo: u32 = (code & 0x3FF) + 0xDC00; store( changetype(out), @@ -110,9 +110,9 @@ export class String { assert(this !== null); if (other === null) other = changetype("null"); - var thisLen: isize = this.length; + var thisLen: isize = this.length; var otherLen: isize = other.length; - var outLen: usize = thisLen + otherLen; + var outLen: usize = thisLen + otherLen; if (outLen == 0) return changetype(""); var out = allocateUnsafe(outLen); copyUnsafe(out, 0, this, 0, thisLen); @@ -141,6 +141,11 @@ export class String { return !compareUnsafe(left, 0, right, 0, leftLength); } + @operator.prefix("!") + private static __not(str: String): bool { + return str === null || !str.length; + } + @operator("!=") private static __ne(left: String, right: String): bool { return !this.__eq(left, right); @@ -345,8 +350,8 @@ export class String { var out = allocateUnsafe(targetLength); if (len > padLen) { let count = (len - 1) / padLen; - let base = count * padLen; - let rest = len - base; + let base = count * padLen; + let rest = len - base; repeatUnsafe(out, 0, padString, count); if (rest) copyUnsafe(out, base, padString, 0, rest); } else { @@ -394,9 +399,9 @@ export class String { } slice(beginIndex: i32, endIndex: i32 = i32.MAX_VALUE): String { - var len = this.length; + var len = this.length; var begin = beginIndex < 0 ? max(beginIndex + len, 0) : min(beginIndex, len); - var end = endIndex < 0 ? max(endIndex + len, 0) : min(endIndex, len); + var end = endIndex < 0 ? max(endIndex + len, 0) : min(endIndex, len); len = end - begin; if (len <= 0) return changetype(""); var out = allocateUnsafe(len); @@ -512,7 +517,7 @@ export class String { cp = ( (cp & 7) << 18 | (load(ptr + ptrPos++) & 63) << 12 | - (load(ptr + ptrPos++) & 63) << 6 | + (load(ptr + ptrPos++) & 63) << 6 | load(ptr + ptrPos++) & 63 ) - 0x10000; store(buf + bufPos, 0xD800 + (cp >> 10)); @@ -523,7 +528,7 @@ export class String { assert(ptrPos + 2 <= len); store(buf + bufPos, (cp & 15) << 12 | - (load(ptr + ptrPos++) & 63) << 6 | + (load(ptr + ptrPos++) & 63) << 6 | load(ptr + ptrPos++) & 63 ); bufPos += 2; @@ -548,8 +553,8 @@ export class String { ++off; ++pos; } else if (c1 < 2048) { let ptr = buf + off; - store(ptr, c1 >> 6 | 192); - store(ptr, c1 & 63 | 128, 1); + store(ptr, c1 >> 6 | 192); + store(ptr, c1 & 63 | 128, 1); off += 2; ++pos; } else { let ptr = buf + off; @@ -559,15 +564,15 @@ export class String { c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF); store(ptr, c1 >> 18 | 240); store(ptr, c1 >> 12 & 63 | 128, 1); - store(ptr, c1 >> 6 & 63 | 128, 2); + store(ptr, c1 >> 6 & 63 | 128, 2); store(ptr, c1 & 63 | 128, 3); off += 4; pos += 2; continue; } } - store(ptr, c1 >> 12 | 224); - store(ptr, c1 >> 6 & 63 | 128, 1); - store(ptr, c1 & 63 | 128, 2); + store(ptr, c1 >> 12 | 224); + store(ptr, c1 >> 6 & 63 | 128, 1); + store(ptr, c1 & 63 | 128, 2); off += 3; ++pos; } } diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat index fd82f14b..30eaa202 100644 --- a/tests/compiler/number.optimized.wat +++ b/tests/compiler/number.optimized.wat @@ -2348,7 +2348,7 @@ if i32.const 0 i32.const 2072 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat index 950ff574..8a36243e 100644 --- a/tests/compiler/number.untouched.wat +++ b/tests/compiler/number.untouched.wat @@ -3525,7 +3525,7 @@ if i32.const 0 i32.const 2072 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat index 20c3bfb6..a9133fb2 100644 --- a/tests/compiler/std/array-access.optimized.wat +++ b/tests/compiler/std/array-access.optimized.wat @@ -115,7 +115,7 @@ if i32.const 0 i32.const 16 - i32.const 224 + i32.const 229 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/array-access.untouched.wat b/tests/compiler/std/array-access.untouched.wat index 185c18b0..fb344029 100644 --- a/tests/compiler/std/array-access.untouched.wat +++ b/tests/compiler/std/array-access.untouched.wat @@ -199,7 +199,7 @@ if i32.const 0 i32.const 16 - i32.const 224 + i32.const 229 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index 43bff187..abb65df0 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -6238,7 +6238,7 @@ if i32.const 0 i32.const 4056 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index f4e84c17..5d7c3e9b 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -11617,7 +11617,7 @@ if i32.const 0 i32.const 4056 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/string-utf8.optimized.wat b/tests/compiler/std/string-utf8.optimized.wat index e2f911a4..d1c6bb54 100644 --- a/tests/compiler/std/string-utf8.optimized.wat +++ b/tests/compiler/std/string-utf8.optimized.wat @@ -1525,7 +1525,7 @@ if i32.const 0 i32.const 72 - i32.const 507 + i32.const 512 i32.const 8 call $~lib/env/abort unreachable @@ -1572,7 +1572,7 @@ if i32.const 0 i32.const 72 - i32.const 511 + i32.const 516 i32.const 8 call $~lib/env/abort unreachable @@ -1651,7 +1651,7 @@ if i32.const 0 i32.const 72 - i32.const 523 + i32.const 528 i32.const 8 call $~lib/env/abort unreachable @@ -1706,7 +1706,7 @@ if i32.const 0 i32.const 72 - i32.const 532 + i32.const 537 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/string-utf8.untouched.wat b/tests/compiler/std/string-utf8.untouched.wat index f5568db2..2e159138 100644 --- a/tests/compiler/std/string-utf8.untouched.wat +++ b/tests/compiler/std/string-utf8.untouched.wat @@ -2008,7 +2008,7 @@ if i32.const 0 i32.const 72 - i32.const 507 + i32.const 512 i32.const 8 call $~lib/env/abort unreachable @@ -2062,7 +2062,7 @@ if i32.const 0 i32.const 72 - i32.const 511 + i32.const 516 i32.const 8 call $~lib/env/abort unreachable @@ -2157,7 +2157,7 @@ if i32.const 0 i32.const 72 - i32.const 523 + i32.const 528 i32.const 8 call $~lib/env/abort unreachable @@ -2220,7 +2220,7 @@ if i32.const 0 i32.const 72 - i32.const 532 + i32.const 537 i32.const 4 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index 1c1b1621..bdbcd96d 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -20,17 +20,17 @@ (data (i32.const 8) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g") (data (i32.const 48) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") (data (i32.const 80) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 112) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") - (data (i32.const 168) "\01") - (data (i32.const 176) "\01\00\00\006") - (data (i32.const 184) "\02\00\00\004\d8\06\df") - (data (i32.const 192) "\02\00\00\00h\00i") - (data (i32.const 200) "\04\00\00\00n\00u\00l\00l") - (data (i32.const 216) "\06\00\00\00s\00t\00r\00i\00n\00g") - (data (i32.const 232) "\03\00\00\00I\00\'\00m") - (data (i32.const 248) "\01\00\00\00 ") - (data (i32.const 264) "\03\00\00\00 \00 \00 ") - (data (i32.const 280) "\01\00\00\00a") + (data (i32.const 120) "\01") + (data (i32.const 128) "\01\00\00\00a") + (data (i32.const 136) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s") + (data (i32.const 192) "\01\00\00\006") + (data (i32.const 200) "\02\00\00\004\d8\06\df") + (data (i32.const 208) "\02\00\00\00h\00i") + (data (i32.const 216) "\04\00\00\00n\00u\00l\00l") + (data (i32.const 232) "\06\00\00\00s\00t\00r\00i\00n\00g") + (data (i32.const 248) "\03\00\00\00I\00\'\00m") + (data (i32.const 264) "\01\00\00\00 ") + (data (i32.const 272) "\03\00\00\00 \00 \00 ") (data (i32.const 288) "\03\00\00\00a\00b\00c") (data (i32.const 304) "\05\00\00\00 \00 \00a\00b\00c") (data (i32.const 320) "\03\00\00\001\002\003") @@ -293,7 +293,7 @@ i32.eqz if i32.const 0 - i32.const 112 + i32.const 136 i32.const 14 i32.const 2 call $~lib/env/abort @@ -458,12 +458,12 @@ if i32.const 0 i32.const 80 - i32.const 224 + i32.const 229 i32.const 4 call $~lib/env/abort unreachable end - i32.const 192 + i32.const 208 i32.load local.tee $2 i32.const 0 @@ -484,7 +484,7 @@ end local.get $0 local.get $3 - i32.const 192 + i32.const 208 local.get $2 call $~lib/internal/string/compareUnsafe i32.eqz @@ -515,7 +515,7 @@ local.get $2 i32.lt_s select - i32.const 216 + i32.const 232 i32.load local.tee $1 i32.sub @@ -528,7 +528,7 @@ end local.get $0 local.get $2 - i32.const 216 + i32.const 232 local.get $1 call $~lib/internal/string/compareUnsafe i32.eqz @@ -542,13 +542,13 @@ if i32.const 0 i32.const 80 - i32.const 193 + i32.const 198 i32.const 4 call $~lib/env/abort unreachable end local.get $1 - i32.const 200 + i32.const 216 local.get $1 select local.tee $1 @@ -1895,7 +1895,7 @@ if i32.const 0 i32.const 80 - i32.const 340 + i32.const 345 i32.const 4 call $~lib/env/abort unreachable @@ -1987,7 +1987,7 @@ end unreachable end - i32.const 248 + i32.const 264 local.set $2 end local.get $0 @@ -2004,7 +2004,7 @@ if i32.const 0 i32.const 80 - i32.const 360 + i32.const 365 i32.const 4 call $~lib/env/abort unreachable @@ -2099,7 +2099,7 @@ end unreachable end - i32.const 248 + i32.const 264 local.set $2 end local.get $0 @@ -2115,7 +2115,7 @@ if i32.const 0 i32.const 80 - i32.const 209 + i32.const 214 i32.const 4 call $~lib/env/abort unreachable @@ -2124,7 +2124,7 @@ i32.load local.set $3 local.get $1 - i32.const 200 + i32.const 216 local.get $1 select local.tee $1 @@ -2543,7 +2543,7 @@ if i32.const 0 i32.const 80 - i32.const 625 + i32.const 630 i32.const 10 call $~lib/env/abort unreachable @@ -2620,7 +2620,7 @@ i32.load local.tee $3 local.get $1 - i32.const 200 + i32.const 216 local.get $1 select local.tee $1 @@ -2630,7 +2630,7 @@ local.tee $2 i32.eqz if - i32.const 256 + i32.const 112 return end local.get $2 @@ -2651,7 +2651,7 @@ ) (func $~lib/string/String.__concat (; 24 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 - i32.const 200 + i32.const 216 local.get $0 select local.get $1 @@ -2780,7 +2780,7 @@ i32.eqz ) (func $~lib/string/String.__lte (; 29 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) - i32.const 256 + i32.const 112 local.get $0 call $~lib/string/String.__gt i32.eqz @@ -2793,7 +2793,7 @@ if i32.const 0 i32.const 80 - i32.const 380 + i32.const 385 i32.const 4 call $~lib/env/abort unreachable @@ -2818,7 +2818,7 @@ if i32.const 0 i32.const 80 - i32.const 385 + i32.const 390 i32.const 6 call $~lib/env/abort unreachable @@ -2834,7 +2834,7 @@ end local.get $2 if - i32.const 256 + i32.const 112 return end local.get $1 @@ -2909,7 +2909,7 @@ i32.const 0 i32.le_s if - i32.const 256 + i32.const 112 return end local.get $2 @@ -3376,7 +3376,7 @@ if i32.const 0 i32.const 80 - i32.const 408 + i32.const 413 i32.const 4 call $~lib/env/abort unreachable @@ -3421,7 +3421,7 @@ call $~lib/array/Array<~lib/string/String>#constructor local.tee $0 i32.load - i32.const 256 + i32.const 112 i32.store offset=8 local.get $0 i32.load @@ -3515,7 +3515,7 @@ call $~lib/array/Array<~lib/string/String>#push else local.get $2 - i32.const 256 + i32.const 112 call $~lib/array/Array<~lib/string/String>#push end local.get $5 @@ -3571,7 +3571,7 @@ call $~lib/array/Array<~lib/string/String>#push else local.get $2 - i32.const 256 + i32.const 112 call $~lib/array/Array<~lib/string/String>#push end local.get $2 @@ -5072,7 +5072,7 @@ if i32.const 0 i32.const 80 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable @@ -5115,7 +5115,7 @@ local.tee $3 i32.eqz if - i32.const 256 + i32.const 112 return end local.get $1 @@ -5188,7 +5188,7 @@ i32.eqz if i32.const 0 - i32.const 112 + i32.const 136 i32.const 28 i32.const 4 call $~lib/env/abort @@ -5238,11 +5238,8 @@ call $~lib/env/abort unreachable end - i32.const 0 - call $~lib/string/String.fromCharCode - i32.const 168 - call $~lib/string/String.__eq - i32.eqz + i32.const 112 + i32.load if i32.const 0 i32.const 48 @@ -5251,11 +5248,12 @@ call $~lib/env/abort unreachable end - i32.const 54 - call $~lib/string/String.fromCharCode - i32.const 176 - call $~lib/string/String.__eq + i32.const 120 + i32.load i32.eqz + i32.eqz + i32.const 1 + i32.ne if i32.const 0 i32.const 48 @@ -5264,11 +5262,12 @@ call $~lib/env/abort unreachable end - i32.const 65590 - call $~lib/string/String.fromCharCode - i32.const 176 - call $~lib/string/String.__eq + i32.const 128 + i32.load i32.eqz + i32.eqz + i32.const 1 + i32.ne if i32.const 0 i32.const 48 @@ -5278,8 +5277,8 @@ unreachable end i32.const 0 - call $~lib/string/String.fromCodePoint - i32.const 168 + call $~lib/string/String.fromCharCode + i32.const 120 call $~lib/string/String.__eq i32.eqz if @@ -5291,8 +5290,8 @@ unreachable end i32.const 54 - call $~lib/string/String.fromCodePoint - i32.const 176 + call $~lib/string/String.fromCharCode + i32.const 192 call $~lib/string/String.__eq i32.eqz if @@ -5303,13 +5302,52 @@ call $~lib/env/abort unreachable end + i32.const 65590 + call $~lib/string/String.fromCharCode + i32.const 192 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 27 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 0 + call $~lib/string/String.fromCodePoint + i32.const 120 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 29 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 54 + call $~lib/string/String.fromCodePoint + i32.const 192 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 30 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 119558 call $~lib/string/String.fromCodePoint i32.eqz if - i32.const 184 + i32.const 200 i32.const 48 - i32.const 27 + i32.const 31 i32.const 0 call $~lib/env/abort unreachable @@ -5320,7 +5358,7 @@ if i32.const 0 i32.const 48 - i32.const 29 + i32.const 33 i32.const 0 call $~lib/env/abort unreachable @@ -5349,13 +5387,13 @@ if i32.const 0 i32.const 48 - i32.const 30 + i32.const 34 i32.const 0 call $~lib/env/abort unreachable end global.get $std/string/str - i32.const 232 + i32.const 248 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -5363,7 +5401,7 @@ if i32.const 0 i32.const 48 - i32.const 31 + i32.const 35 i32.const 0 call $~lib/env/abort unreachable @@ -5379,7 +5417,7 @@ if i32.const 0 i32.const 48 - i32.const 33 + i32.const 37 i32.const 0 call $~lib/env/abort unreachable @@ -5395,53 +5433,53 @@ if i32.const 0 i32.const 48 - i32.const 34 + i32.const 38 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 3 call $~lib/string/String#padStart|trampoline - i32.const 264 + i32.const 272 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 35 + i32.const 39 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 10 - i32.const 256 + i32.const 112 call $~lib/string/String#padStart - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 36 + i32.const 40 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 100 - i32.const 256 + i32.const 112 call $~lib/string/String#padStart - i32.const 280 + i32.const 128 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 37 + i32.const 41 i32.const 0 call $~lib/env/abort unreachable @@ -5457,7 +5495,7 @@ if i32.const 0 i32.const 48 - i32.const 38 + i32.const 42 i32.const 0 call $~lib/env/abort unreachable @@ -5472,7 +5510,7 @@ if i32.const 0 i32.const 48 - i32.const 39 + i32.const 43 i32.const 0 call $~lib/env/abort unreachable @@ -5487,7 +5525,7 @@ if i32.const 0 i32.const 48 - i32.const 40 + i32.const 44 i32.const 0 call $~lib/env/abort unreachable @@ -5503,7 +5541,7 @@ if i32.const 0 i32.const 48 - i32.const 42 + i32.const 46 i32.const 0 call $~lib/env/abort unreachable @@ -5519,53 +5557,53 @@ if i32.const 0 i32.const 48 - i32.const 43 + i32.const 47 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 3 call $~lib/string/String#padEnd|trampoline - i32.const 264 + i32.const 272 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 44 + i32.const 48 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 10 - i32.const 256 + i32.const 112 call $~lib/string/String#padEnd - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 45 + i32.const 49 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 100 - i32.const 256 + i32.const 112 call $~lib/string/String#padEnd - i32.const 280 + i32.const 128 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 46 + i32.const 50 i32.const 0 call $~lib/env/abort unreachable @@ -5581,7 +5619,7 @@ if i32.const 0 i32.const 48 - i32.const 47 + i32.const 51 i32.const 0 call $~lib/env/abort unreachable @@ -5596,7 +5634,7 @@ if i32.const 0 i32.const 48 - i32.const 48 + i32.const 52 i32.const 0 call $~lib/env/abort unreachable @@ -5611,25 +5649,25 @@ if i32.const 0 i32.const 48 - i32.const 49 + i32.const 53 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 + i32.const 112 + i32.const 112 i32.const 0 call $~lib/string/String#indexOf if i32.const 0 i32.const 48 - i32.const 51 + i32.const 55 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 - i32.const 192 + i32.const 112 + i32.const 208 i32.const 0 call $~lib/string/String#indexOf i32.const -1 @@ -5637,19 +5675,19 @@ if i32.const 0 i32.const 48 - i32.const 52 + i32.const 56 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 - i32.const 280 + i32.const 128 + i32.const 128 i32.const 0 call $~lib/string/String#indexOf if i32.const 0 i32.const 48 - i32.const 53 + i32.const 57 i32.const 0 call $~lib/env/abort unreachable @@ -5662,19 +5700,19 @@ if i32.const 0 i32.const 48 - i32.const 54 + i32.const 58 i32.const 0 call $~lib/env/abort unreachable end global.get $std/string/str - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#indexOf if i32.const 0 i32.const 48 - i32.const 55 + i32.const 59 i32.const 0 call $~lib/env/abort unreachable @@ -5688,7 +5726,7 @@ if i32.const 0 i32.const 48 - i32.const 56 + i32.const 60 i32.const 0 call $~lib/env/abort unreachable @@ -5702,7 +5740,7 @@ if i32.const 0 i32.const 48 - i32.const 57 + i32.const 61 i32.const 0 call $~lib/env/abort unreachable @@ -5716,7 +5754,7 @@ if i32.const 0 i32.const 48 - i32.const 58 + i32.const 62 i32.const 0 call $~lib/env/abort unreachable @@ -5730,7 +5768,7 @@ if i32.const 0 i32.const 48 - i32.const 59 + i32.const 63 i32.const 0 call $~lib/env/abort unreachable @@ -5744,35 +5782,35 @@ if i32.const 0 i32.const 48 - i32.const 60 + i32.const 64 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 256 + i32.const 112 + i32.const 112 call $~lib/string/String#lastIndexOf|trampoline if i32.const 0 i32.const 48 - i32.const 62 + i32.const 66 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 192 + i32.const 112 + i32.const 208 call $~lib/string/String#lastIndexOf|trampoline i32.const -1 i32.ne if i32.const 0 i32.const 48 - i32.const 63 + i32.const 67 i32.const 0 call $~lib/env/abort unreachable @@ -5780,7 +5818,7 @@ i32.const 1 global.set $~lib/argc global.get $std/string/str - i32.const 256 + i32.const 112 call $~lib/string/String#lastIndexOf|trampoline global.get $std/string/str i32.load @@ -5788,7 +5826,7 @@ if i32.const 0 i32.const 48 - i32.const 64 + i32.const 68 i32.const 0 call $~lib/env/abort unreachable @@ -5803,7 +5841,7 @@ if i32.const 0 i32.const 48 - i32.const 65 + i32.const 69 i32.const 0 call $~lib/env/abort unreachable @@ -5818,7 +5856,7 @@ if i32.const 0 i32.const 48 - i32.const 66 + i32.const 70 i32.const 0 call $~lib/env/abort unreachable @@ -5833,7 +5871,7 @@ if i32.const 0 i32.const 48 - i32.const 67 + i32.const 71 i32.const 0 call $~lib/env/abort unreachable @@ -5847,7 +5885,7 @@ if i32.const 0 i32.const 48 - i32.const 68 + i32.const 72 i32.const 0 call $~lib/env/abort unreachable @@ -5861,7 +5899,7 @@ if i32.const 0 i32.const 48 - i32.const 69 + i32.const 73 i32.const 0 call $~lib/env/abort unreachable @@ -5875,7 +5913,7 @@ if i32.const 0 i32.const 48 - i32.const 70 + i32.const 74 i32.const 0 call $~lib/env/abort unreachable @@ -5889,19 +5927,19 @@ if i32.const 0 i32.const 48 - i32.const 71 + i32.const 75 i32.const 0 call $~lib/env/abort unreachable end global.get $std/string/str - i32.const 192 + i32.const 208 i32.const 0 call $~lib/string/String#lastIndexOf if i32.const 0 i32.const 48 - i32.const 72 + i32.const 76 i32.const 0 call $~lib/env/abort unreachable @@ -5913,7 +5951,7 @@ if i32.const 0 i32.const 48 - i32.const 78 + i32.const 82 i32.const 0 call $~lib/env/abort unreachable @@ -5925,7 +5963,7 @@ if i32.const 0 i32.const 48 - i32.const 79 + i32.const 83 i32.const 0 call $~lib/env/abort unreachable @@ -5937,7 +5975,7 @@ if i32.const 0 i32.const 48 - i32.const 80 + i32.const 84 i32.const 0 call $~lib/env/abort unreachable @@ -5949,7 +5987,7 @@ if i32.const 0 i32.const 48 - i32.const 81 + i32.const 85 i32.const 0 call $~lib/env/abort unreachable @@ -5961,7 +5999,7 @@ if i32.const 0 i32.const 48 - i32.const 82 + i32.const 86 i32.const 0 call $~lib/env/abort unreachable @@ -5973,7 +6011,7 @@ if i32.const 0 i32.const 48 - i32.const 83 + i32.const 87 i32.const 0 call $~lib/env/abort unreachable @@ -5985,7 +6023,7 @@ if i32.const 0 i32.const 48 - i32.const 84 + i32.const 88 i32.const 0 call $~lib/env/abort unreachable @@ -5997,7 +6035,7 @@ if i32.const 0 i32.const 48 - i32.const 85 + i32.const 89 i32.const 0 call $~lib/env/abort unreachable @@ -6009,7 +6047,7 @@ if i32.const 0 i32.const 48 - i32.const 87 + i32.const 91 i32.const 0 call $~lib/env/abort unreachable @@ -6021,7 +6059,7 @@ if i32.const 0 i32.const 48 - i32.const 88 + i32.const 92 i32.const 0 call $~lib/env/abort unreachable @@ -6033,7 +6071,7 @@ if i32.const 0 i32.const 48 - i32.const 89 + i32.const 93 i32.const 0 call $~lib/env/abort unreachable @@ -6045,7 +6083,7 @@ if i32.const 0 i32.const 48 - i32.const 90 + i32.const 94 i32.const 0 call $~lib/env/abort unreachable @@ -6057,12 +6095,12 @@ if i32.const 0 i32.const 48 - i32.const 91 + i32.const 95 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 648 call $~lib/string/String.__concat global.set $std/string/c @@ -6070,54 +6108,6 @@ i32.const 656 call $~lib/string/String.__eq i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 94 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/c - i32.const 280 - call $~lib/string/String.__ne - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 95 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 96 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - global.get $std/string/nullStr - call $~lib/string/String.__ne - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 97 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/nullStr - i32.const 256 - call $~lib/string/String.__ne - i32.eqz if i32.const 0 i32.const 48 @@ -6126,8 +6116,8 @@ call $~lib/env/abort unreachable end - i32.const 280 - i32.const 648 + global.get $std/string/c + i32.const 128 call $~lib/string/String.__ne i32.eqz if @@ -6138,8 +6128,8 @@ call $~lib/env/abort unreachable end - i32.const 280 - i32.const 280 + i32.const 112 + i32.const 112 call $~lib/string/String.__eq i32.eqz if @@ -6150,6 +6140,54 @@ call $~lib/env/abort unreachable end + i32.const 112 + global.get $std/string/nullStr + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 101 + i32.const 0 + call $~lib/env/abort + unreachable + end + global.get $std/string/nullStr + i32.const 112 + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 102 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 648 + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 103 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 104 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 664 i32.const 680 call $~lib/string/String.__ne @@ -6157,7 +6195,7 @@ if i32.const 0 i32.const 48 - i32.const 101 + i32.const 105 i32.const 0 call $~lib/env/abort unreachable @@ -6169,7 +6207,7 @@ if i32.const 0 i32.const 48 - i32.const 102 + i32.const 106 i32.const 0 call $~lib/env/abort unreachable @@ -6181,7 +6219,7 @@ if i32.const 0 i32.const 48 - i32.const 103 + i32.const 107 i32.const 0 call $~lib/env/abort unreachable @@ -6193,7 +6231,7 @@ if i32.const 0 i32.const 48 - i32.const 104 + i32.const 108 i32.const 0 call $~lib/env/abort unreachable @@ -6205,7 +6243,7 @@ if i32.const 0 i32.const 48 - i32.const 105 + i32.const 109 i32.const 0 call $~lib/env/abort unreachable @@ -6217,7 +6255,7 @@ if i32.const 0 i32.const 48 - i32.const 106 + i32.const 110 i32.const 0 call $~lib/env/abort unreachable @@ -6229,31 +6267,31 @@ if i32.const 0 i32.const 48 - i32.const 107 + i32.const 111 i32.const 0 call $~lib/env/abort unreachable end i32.const 648 - i32.const 280 + i32.const 128 call $~lib/string/String.__gt i32.eqz if i32.const 0 i32.const 48 - i32.const 109 + i32.const 113 i32.const 0 call $~lib/env/abort unreachable end i32.const 864 - i32.const 280 + i32.const 128 call $~lib/string/String.__gt i32.eqz if i32.const 0 i32.const 48 - i32.const 110 + i32.const 114 i32.const 0 call $~lib/env/abort unreachable @@ -6265,7 +6303,7 @@ if i32.const 0 i32.const 48 - i32.const 111 + i32.const 115 i32.const 0 call $~lib/env/abort unreachable @@ -6274,39 +6312,6 @@ i32.const 656 call $~lib/string/String.__gt i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 112 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 864 - i32.const 656 - call $~lib/string/String.__lt - if - i32.const 0 - i32.const 48 - i32.const 113 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 648 - global.get $std/string/nullStr - call $~lib/string/String.__lt - if - i32.const 0 - i32.const 48 - i32.const 115 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/nullStr - i32.const 648 - call $~lib/string/String.__lt if i32.const 0 i32.const 48 @@ -6315,22 +6320,20 @@ call $~lib/env/abort unreachable end - i32.const 288 - i32.const 256 - call $~lib/string/String.__gt - i32.eqz + i32.const 864 + i32.const 656 + call $~lib/string/String.__lt if i32.const 0 i32.const 48 - i32.const 118 + i32.const 117 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 - i32.const 288 + i32.const 648 + global.get $std/string/nullStr call $~lib/string/String.__lt - i32.eqz if i32.const 0 i32.const 48 @@ -6339,10 +6342,9 @@ call $~lib/env/abort unreachable end - i32.const 288 - i32.const 256 - call $~lib/string/String.__gte - i32.eqz + global.get $std/string/nullStr + i32.const 648 + call $~lib/string/String.__lt if i32.const 0 i32.const 48 @@ -6352,19 +6354,9 @@ unreachable end i32.const 288 - call $~lib/string/String.__lte + i32.const 112 + call $~lib/string/String.__gt i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 121 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 288 - i32.const 256 - call $~lib/string/String.__lt if i32.const 0 i32.const 48 @@ -6373,9 +6365,10 @@ call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 288 - call $~lib/string/String.__gt + call $~lib/string/String.__lt + i32.eqz if i32.const 0 i32.const 48 @@ -6384,9 +6377,10 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__lt + i32.const 288 + i32.const 112 + call $~lib/string/String.__gte + i32.eqz if i32.const 0 i32.const 48 @@ -6395,9 +6389,9 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__gt + i32.const 288 + call $~lib/string/String.__lte + i32.eqz if i32.const 0 i32.const 48 @@ -6406,10 +6400,9 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__gte - i32.eqz + i32.const 288 + i32.const 112 + call $~lib/string/String.__lt if i32.const 0 i32.const 48 @@ -6418,13 +6411,58 @@ call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 + i32.const 288 + call $~lib/string/String.__gt + if + i32.const 0 + i32.const 48 + i32.const 127 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__lt + if + i32.const 0 + i32.const 48 + i32.const 128 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__gt + if + i32.const 0 + i32.const 48 + i32.const 129 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__gte + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 130 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 call $~lib/string/String.__lte i32.eqz if i32.const 0 i32.const 48 - i32.const 127 + i32.const 131 i32.const 0 call $~lib/env/abort unreachable @@ -6445,7 +6483,7 @@ if i32.const 0 i32.const 48 - i32.const 131 + i32.const 135 i32.const 0 call $~lib/env/abort unreachable @@ -6454,48 +6492,6 @@ i32.load i32.const 3 i32.ne - if - i32.const 0 - i32.const 48 - i32.const 133 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 100 - call $~lib/string/String#repeat - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 135 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 280 - i32.const 0 - call $~lib/string/String#repeat - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 136 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 280 - i32.const 1 - call $~lib/string/String#repeat - i32.const 280 - call $~lib/string/String.__eq - i32.eqz if i32.const 0 i32.const 48 @@ -6504,7 +6500,49 @@ call $~lib/env/abort unreachable end - i32.const 280 + i32.const 112 + i32.const 100 + call $~lib/string/String#repeat + i32.const 112 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 139 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 0 + call $~lib/string/String#repeat + i32.const 112 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 140 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 1 + call $~lib/string/String#repeat + i32.const 128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 141 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 i32.const 2 call $~lib/string/String#repeat i32.const 872 @@ -6513,12 +6551,12 @@ if i32.const 0 i32.const 48 - i32.const 138 + i32.const 142 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 3 call $~lib/string/String#repeat i32.const 880 @@ -6527,7 +6565,7 @@ if i32.const 0 i32.const 48 - i32.const 139 + i32.const 143 i32.const 0 call $~lib/env/abort unreachable @@ -6541,12 +6579,12 @@ if i32.const 0 i32.const 48 - i32.const 140 + i32.const 144 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 5 call $~lib/string/String#repeat i32.const 920 @@ -6555,12 +6593,12 @@ if i32.const 0 i32.const 48 - i32.const 141 + i32.const 145 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 6 call $~lib/string/String#repeat i32.const 936 @@ -6569,12 +6607,12 @@ if i32.const 0 i32.const 48 - i32.const 142 + i32.const 146 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 7 call $~lib/string/String#repeat i32.const 952 @@ -6583,7 +6621,7 @@ if i32.const 0 i32.const 48 - i32.const 143 + i32.const 147 i32.const 0 call $~lib/env/abort unreachable @@ -6601,7 +6639,7 @@ if i32.const 0 i32.const 48 - i32.const 147 + i32.const 151 i32.const 0 call $~lib/env/abort unreachable @@ -6617,7 +6655,7 @@ if i32.const 0 i32.const 48 - i32.const 148 + i32.const 152 i32.const 0 call $~lib/env/abort unreachable @@ -6633,7 +6671,7 @@ if i32.const 0 i32.const 48 - i32.const 149 + i32.const 153 i32.const 0 call $~lib/env/abort unreachable @@ -6648,7 +6686,7 @@ if i32.const 0 i32.const 48 - i32.const 150 + i32.const 154 i32.const 0 call $~lib/env/abort unreachable @@ -6663,7 +6701,7 @@ if i32.const 0 i32.const 48 - i32.const 151 + i32.const 155 i32.const 0 call $~lib/env/abort unreachable @@ -6672,13 +6710,13 @@ i32.const 4 i32.const 3 call $~lib/string/String#slice - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 152 + i32.const 156 i32.const 0 call $~lib/env/abort unreachable @@ -6693,14 +6731,14 @@ if i32.const 0 i32.const 48 - i32.const 153 + i32.const 157 i32.const 0 call $~lib/env/abort unreachable end i32.const 0 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#split|trampoline global.set $std/string/sa @@ -6724,7 +6762,7 @@ else unreachable end - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $0 @@ -6733,15 +6771,15 @@ if i32.const 0 i32.const 48 - i32.const 158 + i32.const 162 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 256 + i32.const 112 + i32.const 112 call $~lib/string/String#split|trampoline global.set $std/string/sa global.get $std/string/sa @@ -6749,14 +6787,14 @@ if i32.const 0 i32.const 48 - i32.const 160 + i32.const 164 i32.const 0 call $~lib/env/abort unreachable end i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 432 call $~lib/string/String#split|trampoline global.set $std/string/sa @@ -6780,7 +6818,7 @@ else unreachable end - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $0 @@ -6789,7 +6827,7 @@ if i32.const 0 i32.const 48 - i32.const 162 + i32.const 166 i32.const 0 call $~lib/env/abort unreachable @@ -6829,7 +6867,7 @@ if i32.const 0 i32.const 48 - i32.const 164 + i32.const 168 i32.const 0 call $~lib/env/abort unreachable @@ -6862,7 +6900,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -6917,7 +6955,7 @@ if i32.const 0 i32.const 48 - i32.const 166 + i32.const 170 i32.const 0 call $~lib/env/abort unreachable @@ -6950,7 +6988,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7005,7 +7043,7 @@ if i32.const 0 i32.const 48 - i32.const 168 + i32.const 172 i32.const 0 call $~lib/env/abort unreachable @@ -7039,7 +7077,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7085,7 +7123,7 @@ else unreachable end - i32.const 256 + i32.const 112 call $~lib/string/String.__eq local.set $0 end @@ -7117,7 +7155,7 @@ if i32.const 0 i32.const 48 - i32.const 170 + i32.const 174 i32.const 0 call $~lib/env/abort unreachable @@ -7151,7 +7189,7 @@ else unreachable end - i32.const 256 + i32.const 112 call $~lib/string/String.__eq local.set $0 end @@ -7174,7 +7212,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7229,7 +7267,7 @@ if i32.const 0 i32.const 48 - i32.const 172 + i32.const 176 i32.const 0 call $~lib/env/abort unreachable @@ -7263,7 +7301,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7332,7 +7370,7 @@ else unreachable end - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $0 @@ -7341,7 +7379,7 @@ if i32.const 0 i32.const 48 - i32.const 174 + i32.const 178 i32.const 0 call $~lib/env/abort unreachable @@ -7349,7 +7387,7 @@ i32.const 1 global.set $~lib/argc i32.const 288 - i32.const 256 + i32.const 112 call $~lib/string/String#split|trampoline global.set $std/string/sa block (result i32) @@ -7374,7 +7412,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7429,13 +7467,13 @@ if i32.const 0 i32.const 48 - i32.const 176 + i32.const 180 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#split global.set $std/string/sa @@ -7444,13 +7482,13 @@ if i32.const 0 i32.const 48 - i32.const 178 + i32.const 182 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 1 call $~lib/string/String#split global.set $std/string/sa @@ -7474,7 +7512,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $0 @@ -7483,7 +7521,7 @@ if i32.const 0 i32.const 48 - i32.const 180 + i32.const 184 i32.const 0 call $~lib/env/abort unreachable @@ -7513,7 +7551,7 @@ else unreachable end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $0 @@ -7522,13 +7560,13 @@ if i32.const 0 i32.const 48 - i32.const 182 + i32.const 186 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 4 call $~lib/string/String#split global.set $std/string/sa @@ -7554,181 +7592,7 @@ else unreachable end - i32.const 280 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - i32.const 1 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.const 4 - i32.add - i32.load offset=8 - else - unreachable - end - i32.const 648 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if (result i32) - i32.const 2 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.const 8 - i32.add - i32.load offset=8 - else - unreachable - end - i32.const 1216 - call $~lib/string/String.__eq - else - local.get $0 - end - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 184 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 288 - i32.const 256 - i32.const -1 - call $~lib/string/String#split - global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=4 - i32.const 3 - i32.eq - local.tee $0 - if - i32.const 0 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.load offset=8 - else - unreachable - end - i32.const 280 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if - i32.const 1 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.const 4 - i32.add - i32.load offset=8 - else - unreachable - end - i32.const 648 - call $~lib/string/String.__eq - local.set $0 - end - local.get $0 - end - if (result i32) - i32.const 2 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.const 8 - i32.add - i32.load offset=8 - else - unreachable - end - i32.const 1216 - call $~lib/string/String.__eq - else - local.get $0 - end - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 186 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 1192 - i32.const 432 - i32.const -1 - call $~lib/string/String#split - global.set $std/string/sa - block (result i32) - block (result i32) - global.get $std/string/sa - i32.load offset=4 - i32.const 3 - i32.eq - local.tee $0 - if - i32.const 0 - global.get $std/string/sa - i32.load - local.tee $0 - i32.load - i32.const 2 - i32.shr_u - i32.lt_u - if (result i32) - local.get $0 - i32.load offset=8 - else - unreachable - end - i32.const 280 + i32.const 128 call $~lib/string/String.__eq local.set $0 end @@ -7788,6 +7652,180 @@ call $~lib/env/abort unreachable end + i32.const 288 + i32.const 112 + i32.const -1 + call $~lib/string/String#split + global.set $std/string/sa + block (result i32) + block (result i32) + global.get $std/string/sa + i32.load offset=4 + i32.const 3 + i32.eq + local.tee $0 + if + i32.const 0 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.load offset=8 + else + unreachable + end + i32.const 128 + call $~lib/string/String.__eq + local.set $0 + end + local.get $0 + end + if + i32.const 1 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.const 4 + i32.add + i32.load offset=8 + else + unreachable + end + i32.const 648 + call $~lib/string/String.__eq + local.set $0 + end + local.get $0 + end + if (result i32) + i32.const 2 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.const 8 + i32.add + i32.load offset=8 + else + unreachable + end + i32.const 1216 + call $~lib/string/String.__eq + else + local.get $0 + end + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 190 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 1192 + i32.const 432 + i32.const -1 + call $~lib/string/String#split + global.set $std/string/sa + block (result i32) + block (result i32) + global.get $std/string/sa + i32.load offset=4 + i32.const 3 + i32.eq + local.tee $0 + if + i32.const 0 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.load offset=8 + else + unreachable + end + i32.const 128 + call $~lib/string/String.__eq + local.set $0 + end + local.get $0 + end + if + i32.const 1 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.const 4 + i32.add + i32.load offset=8 + else + unreachable + end + i32.const 648 + call $~lib/string/String.__eq + local.set $0 + end + local.get $0 + end + if (result i32) + i32.const 2 + global.get $std/string/sa + i32.load + local.tee $0 + i32.load + i32.const 2 + i32.shr_u + i32.lt_u + if (result i32) + local.get $0 + i32.const 8 + i32.add + i32.load offset=8 + else + unreachable + end + i32.const 1216 + call $~lib/string/String.__eq + else + local.get $0 + end + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 192 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 0 call $~lib/internal/number/itoa32 i32.const 480 @@ -7796,7 +7834,7 @@ if i32.const 0 i32.const 48 - i32.const 190 + i32.const 194 i32.const 0 call $~lib/env/abort unreachable @@ -7809,7 +7847,7 @@ if i32.const 0 i32.const 48 - i32.const 191 + i32.const 195 i32.const 0 call $~lib/env/abort unreachable @@ -7822,7 +7860,7 @@ if i32.const 0 i32.const 48 - i32.const 192 + i32.const 196 i32.const 0 call $~lib/env/abort unreachable @@ -7835,7 +7873,7 @@ if i32.const 0 i32.const 48 - i32.const 193 + i32.const 197 i32.const 0 call $~lib/env/abort unreachable @@ -7848,7 +7886,7 @@ if i32.const 0 i32.const 48 - i32.const 194 + i32.const 198 i32.const 0 call $~lib/env/abort unreachable @@ -7861,7 +7899,7 @@ if i32.const 0 i32.const 48 - i32.const 195 + i32.const 199 i32.const 0 call $~lib/env/abort unreachable @@ -7874,7 +7912,7 @@ if i32.const 0 i32.const 48 - i32.const 196 + i32.const 200 i32.const 0 call $~lib/env/abort unreachable @@ -7887,7 +7925,7 @@ if i32.const 0 i32.const 48 - i32.const 197 + i32.const 201 i32.const 0 call $~lib/env/abort unreachable @@ -7900,7 +7938,7 @@ if i32.const 0 i32.const 48 - i32.const 198 + i32.const 202 i32.const 0 call $~lib/env/abort unreachable @@ -7913,7 +7951,7 @@ if i32.const 0 i32.const 48 - i32.const 199 + i32.const 203 i32.const 0 call $~lib/env/abort unreachable @@ -7926,7 +7964,7 @@ if i32.const 0 i32.const 48 - i32.const 200 + i32.const 204 i32.const 0 call $~lib/env/abort unreachable @@ -7939,7 +7977,7 @@ if i32.const 0 i32.const 48 - i32.const 201 + i32.const 205 i32.const 0 call $~lib/env/abort unreachable @@ -7952,7 +7990,7 @@ if i32.const 0 i32.const 48 - i32.const 202 + i32.const 206 i32.const 0 call $~lib/env/abort unreachable @@ -7965,7 +8003,7 @@ if i32.const 0 i32.const 48 - i32.const 203 + i32.const 207 i32.const 0 call $~lib/env/abort unreachable @@ -7978,7 +8016,7 @@ if i32.const 0 i32.const 48 - i32.const 205 + i32.const 209 i32.const 0 call $~lib/env/abort unreachable @@ -7991,7 +8029,7 @@ if i32.const 0 i32.const 48 - i32.const 206 + i32.const 210 i32.const 0 call $~lib/env/abort unreachable @@ -8004,7 +8042,7 @@ if i32.const 0 i32.const 48 - i32.const 207 + i32.const 211 i32.const 0 call $~lib/env/abort unreachable @@ -8017,7 +8055,7 @@ if i32.const 0 i32.const 48 - i32.const 208 + i32.const 212 i32.const 0 call $~lib/env/abort unreachable @@ -8030,7 +8068,7 @@ if i32.const 0 i32.const 48 - i32.const 209 + i32.const 213 i32.const 0 call $~lib/env/abort unreachable @@ -8043,7 +8081,7 @@ if i32.const 0 i32.const 48 - i32.const 211 + i32.const 215 i32.const 0 call $~lib/env/abort unreachable @@ -8056,7 +8094,7 @@ if i32.const 0 i32.const 48 - i32.const 212 + i32.const 216 i32.const 0 call $~lib/env/abort unreachable @@ -8069,7 +8107,7 @@ if i32.const 0 i32.const 48 - i32.const 213 + i32.const 217 i32.const 0 call $~lib/env/abort unreachable @@ -8082,7 +8120,7 @@ if i32.const 0 i32.const 48 - i32.const 214 + i32.const 218 i32.const 0 call $~lib/env/abort unreachable @@ -8095,7 +8133,7 @@ if i32.const 0 i32.const 48 - i32.const 215 + i32.const 219 i32.const 0 call $~lib/env/abort unreachable @@ -8108,7 +8146,7 @@ if i32.const 0 i32.const 48 - i32.const 216 + i32.const 220 i32.const 0 call $~lib/env/abort unreachable @@ -8121,7 +8159,7 @@ if i32.const 0 i32.const 48 - i32.const 217 + i32.const 221 i32.const 0 call $~lib/env/abort unreachable @@ -8134,7 +8172,7 @@ if i32.const 0 i32.const 48 - i32.const 218 + i32.const 222 i32.const 0 call $~lib/env/abort unreachable @@ -8147,7 +8185,7 @@ if i32.const 0 i32.const 48 - i32.const 219 + i32.const 223 i32.const 0 call $~lib/env/abort unreachable @@ -8160,7 +8198,7 @@ if i32.const 0 i32.const 48 - i32.const 220 + i32.const 224 i32.const 0 call $~lib/env/abort unreachable @@ -8173,7 +8211,7 @@ if i32.const 0 i32.const 48 - i32.const 221 + i32.const 225 i32.const 0 call $~lib/env/abort unreachable @@ -8186,7 +8224,7 @@ if i32.const 0 i32.const 48 - i32.const 223 + i32.const 227 i32.const 0 call $~lib/env/abort unreachable @@ -8199,7 +8237,7 @@ if i32.const 0 i32.const 48 - i32.const 224 + i32.const 228 i32.const 0 call $~lib/env/abort unreachable @@ -8212,7 +8250,7 @@ if i32.const 0 i32.const 48 - i32.const 225 + i32.const 229 i32.const 0 call $~lib/env/abort unreachable @@ -8225,7 +8263,7 @@ if i32.const 0 i32.const 48 - i32.const 226 + i32.const 230 i32.const 0 call $~lib/env/abort unreachable @@ -8238,7 +8276,7 @@ if i32.const 0 i32.const 48 - i32.const 227 + i32.const 231 i32.const 0 call $~lib/env/abort unreachable @@ -8251,7 +8289,7 @@ if i32.const 0 i32.const 48 - i32.const 228 + i32.const 232 i32.const 0 call $~lib/env/abort unreachable @@ -8264,7 +8302,7 @@ if i32.const 0 i32.const 48 - i32.const 229 + i32.const 233 i32.const 0 call $~lib/env/abort unreachable @@ -8277,7 +8315,7 @@ if i32.const 0 i32.const 48 - i32.const 230 + i32.const 234 i32.const 0 call $~lib/env/abort unreachable @@ -8290,7 +8328,7 @@ if i32.const 0 i32.const 48 - i32.const 231 + i32.const 235 i32.const 0 call $~lib/env/abort unreachable @@ -8303,7 +8341,7 @@ if i32.const 0 i32.const 48 - i32.const 232 + i32.const 236 i32.const 0 call $~lib/env/abort unreachable @@ -8316,7 +8354,7 @@ if i32.const 0 i32.const 48 - i32.const 233 + i32.const 237 i32.const 0 call $~lib/env/abort unreachable @@ -8329,7 +8367,7 @@ if i32.const 0 i32.const 48 - i32.const 236 + i32.const 240 i32.const 0 call $~lib/env/abort unreachable @@ -8342,7 +8380,7 @@ if i32.const 0 i32.const 48 - i32.const 237 + i32.const 241 i32.const 0 call $~lib/env/abort unreachable @@ -8355,7 +8393,7 @@ if i32.const 0 i32.const 48 - i32.const 238 + i32.const 242 i32.const 0 call $~lib/env/abort unreachable @@ -8368,7 +8406,7 @@ if i32.const 0 i32.const 48 - i32.const 239 + i32.const 243 i32.const 0 call $~lib/env/abort unreachable @@ -8381,7 +8419,7 @@ if i32.const 0 i32.const 48 - i32.const 240 + i32.const 244 i32.const 0 call $~lib/env/abort unreachable @@ -8394,7 +8432,7 @@ if i32.const 0 i32.const 48 - i32.const 241 + i32.const 245 i32.const 0 call $~lib/env/abort unreachable @@ -8407,7 +8445,7 @@ if i32.const 0 i32.const 48 - i32.const 242 + i32.const 246 i32.const 0 call $~lib/env/abort unreachable @@ -8420,7 +8458,7 @@ if i32.const 0 i32.const 48 - i32.const 243 + i32.const 247 i32.const 0 call $~lib/env/abort unreachable @@ -8433,7 +8471,7 @@ if i32.const 0 i32.const 48 - i32.const 244 + i32.const 248 i32.const 0 call $~lib/env/abort unreachable @@ -8446,7 +8484,7 @@ if i32.const 0 i32.const 48 - i32.const 245 + i32.const 249 i32.const 0 call $~lib/env/abort unreachable @@ -8459,7 +8497,7 @@ if i32.const 0 i32.const 48 - i32.const 246 + i32.const 250 i32.const 0 call $~lib/env/abort unreachable @@ -8472,7 +8510,7 @@ if i32.const 0 i32.const 48 - i32.const 249 + i32.const 253 i32.const 0 call $~lib/env/abort unreachable @@ -8485,7 +8523,7 @@ if i32.const 0 i32.const 48 - i32.const 250 + i32.const 254 i32.const 0 call $~lib/env/abort unreachable @@ -8498,7 +8536,7 @@ if i32.const 0 i32.const 48 - i32.const 251 + i32.const 255 i32.const 0 call $~lib/env/abort unreachable @@ -8511,7 +8549,7 @@ if i32.const 0 i32.const 48 - i32.const 252 + i32.const 256 i32.const 0 call $~lib/env/abort unreachable @@ -8524,7 +8562,7 @@ if i32.const 0 i32.const 48 - i32.const 253 + i32.const 257 i32.const 0 call $~lib/env/abort unreachable @@ -8537,7 +8575,7 @@ if i32.const 0 i32.const 48 - i32.const 259 + i32.const 263 i32.const 0 call $~lib/env/abort unreachable @@ -8550,7 +8588,7 @@ if i32.const 0 i32.const 48 - i32.const 260 + i32.const 264 i32.const 0 call $~lib/env/abort unreachable @@ -8563,7 +8601,7 @@ if i32.const 0 i32.const 48 - i32.const 261 + i32.const 265 i32.const 0 call $~lib/env/abort unreachable @@ -8576,7 +8614,7 @@ if i32.const 0 i32.const 48 - i32.const 262 + i32.const 266 i32.const 0 call $~lib/env/abort unreachable @@ -8589,7 +8627,7 @@ if i32.const 0 i32.const 48 - i32.const 264 + i32.const 268 i32.const 0 call $~lib/env/abort unreachable @@ -8602,7 +8640,7 @@ if i32.const 0 i32.const 48 - i32.const 265 + i32.const 269 i32.const 0 call $~lib/env/abort unreachable @@ -8615,7 +8653,7 @@ if i32.const 0 i32.const 48 - i32.const 266 + i32.const 270 i32.const 0 call $~lib/env/abort unreachable @@ -8628,7 +8666,7 @@ if i32.const 0 i32.const 48 - i32.const 267 + i32.const 271 i32.const 0 call $~lib/env/abort unreachable @@ -8641,7 +8679,7 @@ if i32.const 0 i32.const 48 - i32.const 268 + i32.const 272 i32.const 0 call $~lib/env/abort unreachable @@ -8654,7 +8692,7 @@ if i32.const 0 i32.const 48 - i32.const 269 + i32.const 273 i32.const 0 call $~lib/env/abort unreachable @@ -8667,7 +8705,7 @@ if i32.const 0 i32.const 48 - i32.const 271 + i32.const 275 i32.const 0 call $~lib/env/abort unreachable @@ -8680,7 +8718,7 @@ if i32.const 0 i32.const 48 - i32.const 272 + i32.const 276 i32.const 0 call $~lib/env/abort unreachable @@ -8693,7 +8731,7 @@ if i32.const 0 i32.const 48 - i32.const 273 + i32.const 277 i32.const 0 call $~lib/env/abort unreachable @@ -8706,7 +8744,7 @@ if i32.const 0 i32.const 48 - i32.const 274 + i32.const 278 i32.const 0 call $~lib/env/abort unreachable @@ -8719,7 +8757,7 @@ if i32.const 0 i32.const 48 - i32.const 275 + i32.const 279 i32.const 0 call $~lib/env/abort unreachable @@ -8732,7 +8770,7 @@ if i32.const 0 i32.const 48 - i32.const 276 + i32.const 280 i32.const 0 call $~lib/env/abort unreachable @@ -8745,7 +8783,7 @@ if i32.const 0 i32.const 48 - i32.const 277 + i32.const 281 i32.const 0 call $~lib/env/abort unreachable @@ -8758,7 +8796,7 @@ if i32.const 0 i32.const 48 - i32.const 278 + i32.const 282 i32.const 0 call $~lib/env/abort unreachable @@ -8771,7 +8809,7 @@ if i32.const 0 i32.const 48 - i32.const 279 + i32.const 283 i32.const 0 call $~lib/env/abort unreachable @@ -8784,7 +8822,7 @@ if i32.const 0 i32.const 48 - i32.const 281 + i32.const 285 i32.const 0 call $~lib/env/abort unreachable @@ -8797,7 +8835,7 @@ if i32.const 0 i32.const 48 - i32.const 282 + i32.const 286 i32.const 0 call $~lib/env/abort unreachable @@ -8810,7 +8848,7 @@ if i32.const 0 i32.const 48 - i32.const 284 + i32.const 288 i32.const 0 call $~lib/env/abort unreachable @@ -8823,7 +8861,7 @@ if i32.const 0 i32.const 48 - i32.const 285 + i32.const 289 i32.const 0 call $~lib/env/abort unreachable @@ -8836,7 +8874,7 @@ if i32.const 0 i32.const 48 - i32.const 286 + i32.const 290 i32.const 0 call $~lib/env/abort unreachable @@ -8849,7 +8887,7 @@ if i32.const 0 i32.const 48 - i32.const 287 + i32.const 291 i32.const 0 call $~lib/env/abort unreachable @@ -8862,7 +8900,7 @@ if i32.const 0 i32.const 48 - i32.const 289 + i32.const 293 i32.const 0 call $~lib/env/abort unreachable @@ -8875,7 +8913,7 @@ if i32.const 0 i32.const 48 - i32.const 290 + i32.const 294 i32.const 0 call $~lib/env/abort unreachable @@ -8888,7 +8926,7 @@ if i32.const 0 i32.const 48 - i32.const 291 + i32.const 295 i32.const 0 call $~lib/env/abort unreachable @@ -8901,7 +8939,7 @@ if i32.const 0 i32.const 48 - i32.const 292 + i32.const 296 i32.const 0 call $~lib/env/abort unreachable @@ -8914,7 +8952,7 @@ if i32.const 0 i32.const 48 - i32.const 293 + i32.const 297 i32.const 0 call $~lib/env/abort unreachable @@ -8927,7 +8965,7 @@ if i32.const 0 i32.const 48 - i32.const 294 + i32.const 298 i32.const 0 call $~lib/env/abort unreachable @@ -8940,7 +8978,7 @@ if i32.const 0 i32.const 48 - i32.const 295 + i32.const 299 i32.const 0 call $~lib/env/abort unreachable @@ -8953,7 +8991,7 @@ if i32.const 0 i32.const 48 - i32.const 296 + i32.const 300 i32.const 0 call $~lib/env/abort unreachable @@ -8966,7 +9004,7 @@ if i32.const 0 i32.const 48 - i32.const 297 + i32.const 301 i32.const 0 call $~lib/env/abort unreachable diff --git a/tests/compiler/std/string.ts b/tests/compiler/std/string.ts index d29fba22..2393c27a 100644 --- a/tests/compiler/std/string.ts +++ b/tests/compiler/std/string.ts @@ -18,6 +18,10 @@ assert(changetype(str) == changetype("hi, I'm a string")); assert(str.length == 16); assert(str.charCodeAt(0) == 0x68); +assert(!!"" == false); +assert(!!"\0" == true); +assert(!!"a" == true); + assert(String.fromCharCode(0) == "\0"); assert(String.fromCharCode(54) == "6"); assert(String.fromCharCode(0x10000 + 54) == "6"); @@ -222,8 +226,8 @@ assert(utoa64(u64.MAX_VALUE) == "18446744073709551615"); assert(itoa64(0) == "0"); assert(itoa64(-1234) == "-1234"); -assert(itoa64(0xffffffff) == "4294967295"); -assert(itoa64(-0xffffffff) == "-4294967295"); +assert(itoa64(0xffffffff) == "4294967295"); +assert(itoa64(-0xffffffff) == "-4294967295"); assert(itoa64(68719476735) == "68719476735"); assert(itoa64(-68719476735) == "-68719476735"); assert(itoa64(-868719476735) == "-868719476735"); @@ -233,13 +237,13 @@ assert(itoa64(i64.MAX_VALUE) == "9223372036854775807"); assert(itoa64(i64.MIN_VALUE) == "-9223372036854775808"); // special cases -assert(dtoa(0.0) == "0.0"); +assert(dtoa(0.0) == "0.0"); assert(dtoa(-0.0) == "0.0"); -assert(dtoa(NaN) == "NaN"); +assert(dtoa(NaN) == "NaN"); assert(dtoa(+Infinity) == "Infinity"); assert(dtoa(-Infinity) == "-Infinity"); -assert(dtoa(+f64.EPSILON) == "2.220446049250313e-16"); -assert(dtoa(-f64.EPSILON) == "-2.220446049250313e-16"); +assert(dtoa(+f64.EPSILON) == "2.220446049250313e-16"); +assert(dtoa(-f64.EPSILON) == "-2.220446049250313e-16"); assert(dtoa(+f64.MAX_VALUE) == "1.7976931348623157e+308"); assert(dtoa(-f64.MAX_VALUE) == "-1.7976931348623157e+308"); assert(dtoa(4.185580496821357e+298) == "4.185580496821357e+298"); @@ -256,44 +260,44 @@ assert(dtoa(5e-324) == "5e-324"); // Actual: 1.2344999999999999e+21 // assert(dtoa(1.2345e+21) == "1.2345e+21"); -assert(dtoa(1.0) == "1.0"); -assert(dtoa(0.1) == "0.1"); +assert(dtoa(1.0) == "1.0"); +assert(dtoa(0.1) == "0.1"); assert(dtoa(-1.0) == "-1.0"); assert(dtoa(-0.1) == "-0.1"); -assert(dtoa(1e+6) == "1000000.0"); -assert(dtoa(1e-6) == "0.000001"); +assert(dtoa(1e+6) == "1000000.0"); +assert(dtoa(1e-6) == "0.000001"); assert(dtoa(-1e+6) == "-1000000.0"); assert(dtoa(-1e-6) == "-0.000001"); -assert(dtoa(1e+7) == "10000000.0"); -assert(dtoa(1e-7) == "1e-7"); +assert(dtoa(1e+7) == "10000000.0"); +assert(dtoa(1e-7) == "1e-7"); -assert(dtoa(1e+308) == "1e+308"); +assert(dtoa(1e+308) == "1e+308"); assert(dtoa(-1e+308) == "-1e+308"); -assert(dtoa(1e+309) == "Infinity"); +assert(dtoa(1e+309) == "Infinity"); assert(dtoa(-1e+309) == "-Infinity"); -assert(dtoa(1e-308) == "1e-308"); +assert(dtoa(1e-308) == "1e-308"); assert(dtoa(-1e-308) == "-1e-308"); -assert(dtoa(1e-323) == "1e-323"); +assert(dtoa(1e-323) == "1e-323"); assert(dtoa(-1e-323) == "-1e-323"); -assert(dtoa(1e-324) == "0.0"); +assert(dtoa(1e-324) == "0.0"); assert(dtoa(4294967272) == "4294967272.0"); assert(dtoa(1.23121456734562345678e-8) == "1.2312145673456234e-8"); // assert(dtoa(-0.0000010471975511965976) == "-0.0000010471975511965976"); // FIXME -assert(dtoa(555555555.55555555) == "555555555.5555556"); -assert(dtoa(0.9999999999999999) == "0.9999999999999999"); +assert(dtoa(555555555.55555555) == "555555555.5555556"); +assert(dtoa(0.9999999999999999) == "0.9999999999999999"); assert(dtoa(0.99999999999999995) == "1.0"); -assert(dtoa(1234e-2) == "12.34"); +assert(dtoa(1234e-2) == "12.34"); // assert(dtoa(0.1 + 0.2) == "0.30000000000000004"); // FIXME -assert(dtoa(1.0 / 3.0) == "0.3333333333333333"); -assert(dtoa(1.234e+20) == "123400000000000000000.0"); -assert(dtoa(1.234e+21) == "1.234e+21"); -assert(dtoa(2.71828) == "2.71828"); -assert(dtoa(2.71828e-2) == "0.0271828"); -assert(dtoa(2.71828e+2) == "271.828"); -assert(dtoa(1.1e+128) == "1.1e+128"); -assert(dtoa(1.1e-64) == "1.1e-64"); +assert(dtoa(1.0 / 3.0) == "0.3333333333333333"); +assert(dtoa(1.234e+20) == "123400000000000000000.0"); +assert(dtoa(1.234e+21) == "1.234e+21"); +assert(dtoa(2.71828) == "2.71828"); +assert(dtoa(2.71828e-2) == "0.0271828"); +assert(dtoa(2.71828e+2) == "271.828"); +assert(dtoa(1.1e+128) == "1.1e+128"); +assert(dtoa(1.1e-64) == "1.1e-64"); assert(dtoa(0.000035689) == "0.000035689"); // assert(dtoa(f32.MAX_VALUE) == "3.4028234663852886e+38"); // FIXME diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index f4860de8..be9c7aed 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -21,18 +21,18 @@ (data (i32.const 8) "\10\00\00\00h\00i\00,\00 \00I\00\'\00m\00 \00a\00 \00s\00t\00r\00i\00n\00g\00") (data (i32.const 48) "\0d\00\00\00s\00t\00d\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") (data (i32.const 80) "\0e\00\00\00~\00l\00i\00b\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 112) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") - (data (i32.const 168) "\01\00\00\00\00\00") - (data (i32.const 176) "\01\00\00\006\00") - (data (i32.const 184) "\02\00\00\004\d8\06\df") - (data (i32.const 192) "\02\00\00\00h\00i\00") - (data (i32.const 200) "\04\00\00\00n\00u\00l\00l\00") - (data (i32.const 216) "\06\00\00\00s\00t\00r\00i\00n\00g\00") - (data (i32.const 232) "\03\00\00\00I\00\'\00m\00") - (data (i32.const 248) "\01\00\00\00 \00") - (data (i32.const 256) "\00\00\00\00") - (data (i32.const 264) "\03\00\00\00 \00 \00 \00") - (data (i32.const 280) "\01\00\00\00a\00") + (data (i32.const 112) "\00\00\00\00") + (data (i32.const 120) "\01\00\00\00\00\00") + (data (i32.const 128) "\01\00\00\00a\00") + (data (i32.const 136) "\17\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00s\00t\00r\00i\00n\00g\00.\00t\00s\00") + (data (i32.const 192) "\01\00\00\006\00") + (data (i32.const 200) "\02\00\00\004\d8\06\df") + (data (i32.const 208) "\02\00\00\00h\00i\00") + (data (i32.const 216) "\04\00\00\00n\00u\00l\00l\00") + (data (i32.const 232) "\06\00\00\00s\00t\00r\00i\00n\00g\00") + (data (i32.const 248) "\03\00\00\00I\00\'\00m\00") + (data (i32.const 264) "\01\00\00\00 \00") + (data (i32.const 272) "\03\00\00\00 \00 \00 \00") (data (i32.const 288) "\03\00\00\00a\00b\00c\00") (data (i32.const 304) "\05\00\00\00 \00 \00a\00b\00c\00") (data (i32.const 320) "\03\00\00\001\002\003\00") @@ -244,7 +244,21 @@ i32.add i32.load16_u offset=4 ) - (func $~lib/allocator/arena/__memory_allocate (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String.__not (; 3 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (local $1 i32) + local.get $0 + i32.const 0 + i32.eq + local.tee $1 + if (result i32) + local.get $1 + else + local.get $0 + i32.load + i32.eqz + end + ) + (func $~lib/allocator/arena/__memory_allocate (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -323,7 +337,7 @@ global.set $~lib/allocator/arena/offset local.get $1 ) - (func $~lib/internal/string/allocateUnsafe (; 4 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/string/allocateUnsafe (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -340,7 +354,7 @@ i32.eqz if i32.const 0 - i32.const 112 + i32.const 136 i32.const 14 i32.const 2 call $~lib/env/abort @@ -363,7 +377,7 @@ i32.store local.get $2 ) - (func $~lib/string/String.fromCharCode (; 5 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String.fromCharCode (; 6 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) i32.const 1 call $~lib/internal/string/allocateUnsafe @@ -373,7 +387,7 @@ i32.store16 offset=4 local.get $1 ) - (func $~lib/internal/string/compareUnsafe (; 6 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) + (func $~lib/internal/string/compareUnsafe (; 7 ;) (type $FUNCSIG$iiiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -426,7 +440,7 @@ end local.get $5 ) - (func $~lib/string/String.__eq (; 7 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__eq (; 8 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) local.get $0 @@ -470,7 +484,7 @@ call $~lib/internal/string/compareUnsafe i32.eqz ) - (func $~lib/string/String.fromCodePoint (; 8 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/string/String.fromCodePoint (; 9 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -529,7 +543,7 @@ end local.get $2 ) - (func $~lib/string/String#startsWith (; 9 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#startsWith (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -543,7 +557,7 @@ if i32.const 0 i32.const 80 - i32.const 224 + i32.const 229 i32.const 4 call $~lib/env/abort unreachable @@ -552,7 +566,7 @@ i32.const 0 i32.eq if - i32.const 200 + i32.const 216 local.set $1 end local.get $2 @@ -596,7 +610,7 @@ call $~lib/internal/string/compareUnsafe i32.eqz ) - (func $~lib/string/String#endsWith (; 10 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#endsWith (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -660,7 +674,7 @@ call $~lib/internal/string/compareUnsafe i32.eqz ) - (func $~lib/string/String#endsWith|trampoline (; 11 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#endsWith|trampoline (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -679,7 +693,7 @@ local.get $2 call $~lib/string/String#endsWith ) - (func $~lib/string/String#indexOf (; 12 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#indexOf (; 13 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -692,7 +706,7 @@ if i32.const 0 i32.const 80 - i32.const 193 + i32.const 198 i32.const 4 call $~lib/env/abort unreachable @@ -701,7 +715,7 @@ i32.const 0 i32.eq if - i32.const 200 + i32.const 216 local.set $1 end local.get $1 @@ -773,7 +787,7 @@ end i32.const -1 ) - (func $~lib/internal/memory/memcpy (; 13 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memcpy (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -1974,7 +1988,7 @@ i32.store8 end ) - (func $~lib/internal/memory/memmove (; 14 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memmove (; 15 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) local.get $0 local.get $1 @@ -2201,7 +2215,7 @@ end end ) - (func $~lib/internal/string/repeatUnsafe (; 15 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) + (func $~lib/internal/string/repeatUnsafe (; 16 ;) (type $FUNCSIG$viiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) @@ -2481,7 +2495,7 @@ unreachable end ) - (func $~lib/internal/string/copyUnsafe (; 16 ;) (type $FUNCSIG$viiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) + (func $~lib/internal/string/copyUnsafe (; 17 ;) (type $FUNCSIG$viiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (local $5 i32) (local $6 i32) (local $7 i32) @@ -2510,7 +2524,7 @@ local.get $7 call $~lib/internal/memory/memmove ) - (func $~lib/string/String#padStart (; 17 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padStart (; 18 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2525,7 +2539,7 @@ if i32.const 0 i32.const 80 - i32.const 340 + i32.const 345 i32.const 4 call $~lib/env/abort unreachable @@ -2608,7 +2622,7 @@ end local.get $7 ) - (func $~lib/string/String#padStart|trampoline (; 18 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padStart|trampoline (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -2619,7 +2633,7 @@ end unreachable end - i32.const 248 + i32.const 264 local.set $2 end local.get $0 @@ -2627,7 +2641,7 @@ local.get $2 call $~lib/string/String#padStart ) - (func $~lib/string/String#padEnd (; 19 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padEnd (; 20 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2642,7 +2656,7 @@ if i32.const 0 i32.const 80 - i32.const 360 + i32.const 365 i32.const 4 call $~lib/env/abort unreachable @@ -2727,7 +2741,7 @@ end local.get $7 ) - (func $~lib/string/String#padEnd|trampoline (; 20 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#padEnd|trampoline (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -2738,7 +2752,7 @@ end unreachable end - i32.const 248 + i32.const 264 local.set $2 end local.get $0 @@ -2746,7 +2760,7 @@ local.get $2 call $~lib/string/String#padEnd ) - (func $~lib/string/String#lastIndexOf (; 21 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#lastIndexOf (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -2759,7 +2773,7 @@ if i32.const 0 i32.const 80 - i32.const 209 + i32.const 214 i32.const 4 call $~lib/env/abort unreachable @@ -2768,7 +2782,7 @@ i32.const 0 i32.eq if - i32.const 200 + i32.const 216 local.set $1 end local.get $0 @@ -2838,7 +2852,7 @@ end i32.const -1 ) - (func $~lib/string/String#lastIndexOf|trampoline (; 22 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#lastIndexOf|trampoline (; 23 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -2857,7 +2871,7 @@ local.get $2 call $~lib/string/String#lastIndexOf ) - (func $~lib/internal/string/parse (; 23 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/internal/string/parse (; 24 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3158,12 +3172,12 @@ local.get $7 f64.mul ) - (func $~lib/string/parseInt (; 24 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) + (func $~lib/string/parseInt (; 25 ;) (type $FUNCSIG$dii) (param $0 i32) (param $1 i32) (result f64) local.get $0 local.get $1 call $~lib/internal/string/parse ) - (func $~lib/string/parseFloat (; 25 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) + (func $~lib/string/parseFloat (; 26 ;) (type $FUNCSIG$di) (param $0 i32) (result f64) (local $1 i32) (local $2 i32) (local $3 i32) @@ -3292,7 +3306,7 @@ if i32.const 0 i32.const 80 - i32.const 625 + i32.const 630 i32.const 10 call $~lib/env/abort unreachable @@ -3360,7 +3374,7 @@ local.get $5 f64.mul ) - (func $~lib/string/String#concat (; 26 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#concat (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3381,7 +3395,7 @@ i32.const 0 i32.eq if - i32.const 200 + i32.const 216 local.set $1 end local.get $0 @@ -3398,7 +3412,7 @@ i32.const 0 i32.eq if - i32.const 256 + i32.const 112 return end local.get $4 @@ -3418,24 +3432,24 @@ call $~lib/internal/string/copyUnsafe local.get $5 ) - (func $~lib/string/String.__concat (; 27 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__concat (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 i32.eqz if - i32.const 200 + i32.const 216 local.set $0 end local.get $0 local.get $1 call $~lib/string/String#concat ) - (func $~lib/string/String.__ne (; 28 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__ne (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/string/String.__eq i32.eqz ) - (func $~lib/string/String.__gt (; 29 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gt (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3500,7 +3514,7 @@ i32.const 0 i32.gt_s ) - (func $~lib/string/String.__lt (; 30 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lt (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3565,19 +3579,19 @@ i32.const 0 i32.lt_s ) - (func $~lib/string/String.__gte (; 31 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__gte (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/string/String.__lt i32.eqz ) - (func $~lib/string/String.__lte (; 32 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String.__lte (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) local.get $0 local.get $1 call $~lib/string/String.__gt i32.eqz ) - (func $~lib/string/String#repeat (; 33 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/string/String#repeat (; 34 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -3588,7 +3602,7 @@ if i32.const 0 i32.const 80 - i32.const 380 + i32.const 385 i32.const 4 call $~lib/env/abort unreachable @@ -3614,7 +3628,7 @@ if i32.const 0 i32.const 80 - i32.const 385 + i32.const 390 i32.const 6 call $~lib/env/abort unreachable @@ -3630,7 +3644,7 @@ i32.eqz end if - i32.const 256 + i32.const 112 return end local.get $1 @@ -3652,7 +3666,7 @@ call $~lib/internal/string/repeatUnsafe local.get $4 ) - (func $~lib/string/String#slice (; 34 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#slice (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -3720,7 +3734,7 @@ i32.const 0 i32.le_s if - i32.const 256 + i32.const 112 return end local.get $3 @@ -3734,7 +3748,7 @@ call $~lib/internal/string/copyUnsafe local.get $8 ) - (func $~lib/string/String#slice|trampoline (; 35 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#slice|trampoline (; 36 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $1of1 block $0of1 block $outOfRange @@ -3753,7 +3767,7 @@ local.get $2 call $~lib/string/String#slice ) - (func $~lib/internal/arraybuffer/computeSize (; 36 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/computeSize (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) i32.const 1 i32.const 32 local.get $0 @@ -3765,7 +3779,7 @@ i32.sub i32.shl ) - (func $~lib/internal/arraybuffer/allocateUnsafe (; 37 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/arraybuffer/allocateUnsafe (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) local.get $0 @@ -3794,12 +3808,12 @@ i32.store local.get $1 ) - (func $~lib/memory/memory.allocate (; 38 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/memory/memory.allocate (; 39 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) local.get $0 call $~lib/allocator/arena/__memory_allocate return ) - (func $~lib/internal/memory/memset (; 39 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/memory/memset (; 40 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i64) @@ -4053,7 +4067,7 @@ end end ) - (func $~lib/array/Array<~lib/string/String>#constructor (; 40 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#constructor (; 41 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4114,7 +4128,7 @@ end local.get $0 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 41 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_set (; 42 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4138,7 +4152,7 @@ local.get $5 i32.store offset=8 ) - (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 42 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__unchecked_get (; 43 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4158,10 +4172,10 @@ i32.add i32.load offset=8 ) - (func $~lib/allocator/arena/__memory_free (; 43 ;) (type $FUNCSIG$vi) (param $0 i32) + (func $~lib/allocator/arena/__memory_free (; 44 ;) (type $FUNCSIG$vi) (param $0 i32) nop ) - (func $~lib/internal/arraybuffer/reallocateUnsafe (; 44 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/internal/arraybuffer/reallocateUnsafe (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4268,7 +4282,7 @@ end local.get $0 ) - (func $~lib/array/Array<~lib/string/String>#push (; 45 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#push (; 46 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4341,7 +4355,7 @@ end local.get $5 ) - (func $~lib/string/String#split (; 46 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4364,7 +4378,7 @@ if i32.const 0 i32.const 80 - i32.const 408 + i32.const 413 i32.const 4 call $~lib/env/abort unreachable @@ -4499,7 +4513,7 @@ local.tee $3 i32.const 0 local.tee $7 - i32.const 256 + i32.const 112 call $~lib/array/Array<~lib/string/String>#__unchecked_set local.get $3 local.get $7 @@ -4554,7 +4568,7 @@ drop else local.get $13 - i32.const 256 + i32.const 112 call $~lib/array/Array<~lib/string/String>#push drop end @@ -4622,13 +4636,13 @@ drop else local.get $13 - i32.const 256 + i32.const 112 call $~lib/array/Array<~lib/string/String>#push drop end local.get $13 ) - (func $~lib/string/String#split|trampoline (; 47 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#split|trampoline (; 48 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) block $2of2 block $1of2 block $0of2 @@ -4649,7 +4663,7 @@ local.get $2 call $~lib/string/String#split ) - (func $~lib/array/Array<~lib/string/String>#__get (; 48 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) + (func $~lib/array/Array<~lib/string/String>#__get (; 49 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) (local $4 i32) @@ -4682,7 +4696,7 @@ unreachable end ) - (func $~lib/internal/number/decimalCount32 (; 49 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/number/decimalCount32 (; 50 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) local.get $0 i32.const 100000 @@ -4751,7 +4765,7 @@ unreachable unreachable ) - (func $~lib/internal/number/utoa32_lut (; 50 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/internal/number/utoa32_lut (; 51 ;) (type $FUNCSIG$viii) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -4937,7 +4951,7 @@ i32.store16 offset=4 end ) - (func $~lib/internal/number/itoa32 (; 51 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/number/itoa32 (; 52 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -4989,7 +5003,7 @@ end local.get $3 ) - (func $~lib/internal/number/utoa32 (; 52 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) + (func $~lib/internal/number/utoa32 (; 53 ;) (type $FUNCSIG$ii) (param $0 i32) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5021,7 +5035,7 @@ end local.get $2 ) - (func $~lib/internal/number/decimalCount64 (; 53 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/internal/number/decimalCount64 (; 54 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) local.get $0 i64.const 1000000000000000 @@ -5090,7 +5104,7 @@ unreachable unreachable ) - (func $~lib/internal/number/utoa64_lut (; 54 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) + (func $~lib/internal/number/utoa64_lut (; 55 ;) (type $FUNCSIG$viji) (param $0 i32) (param $1 i64) (param $2 i32) (local $3 i32) (local $4 i64) (local $5 i32) @@ -5261,7 +5275,7 @@ local.get $2 call $~lib/internal/number/utoa32_lut ) - (func $~lib/internal/number/utoa64 (; 55 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/internal/number/utoa64 (; 56 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5323,7 +5337,7 @@ end local.get $1 ) - (func $~lib/internal/number/itoa64 (; 56 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) + (func $~lib/internal/number/itoa64 (; 57 ;) (type $FUNCSIG$ij) (param $0 i64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -5407,19 +5421,19 @@ end local.get $2 ) - (func $~lib/builtins/isFinite (; 57 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isFinite (; 58 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.sub f64.const 0 f64.eq ) - (func $~lib/builtins/isNaN (; 58 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/builtins/isNaN (; 59 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) local.get $0 local.get $0 f64.ne ) - (func $~lib/internal/number/genDigits (; 59 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) + (func $~lib/internal/number/genDigits (; 60 ;) (type $FUNCSIG$iijijiji) (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32) (local $7 i32) (local $8 i64) (local $9 i64) @@ -6010,7 +6024,7 @@ end local.get $15 ) - (func $~lib/internal/number/prettify (; 60 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/internal/number/prettify (; 61 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6379,7 +6393,7 @@ unreachable unreachable ) - (func $~lib/internal/number/dtoa_core (; 61 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) + (func $~lib/internal/number/dtoa_core (; 62 ;) (type $FUNCSIG$iid) (param $0 i32) (param $1 f64) (result i32) (local $2 i32) (local $3 f64) (local $4 i32) @@ -6852,7 +6866,7 @@ local.get $2 i32.add ) - (func $~lib/string/String#substring (; 62 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/string/String#substring (; 63 ;) (type $FUNCSIG$iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (local $3 i32) (local $4 i32) (local $5 i32) @@ -6868,7 +6882,7 @@ if i32.const 0 i32.const 80 - i32.const 249 + i32.const 254 i32.const 4 call $~lib/env/abort unreachable @@ -6933,7 +6947,7 @@ local.get $3 i32.eqz if - i32.const 256 + i32.const 112 return end local.get $8 @@ -6962,7 +6976,7 @@ call $~lib/internal/string/copyUnsafe local.get $10 ) - (func $~lib/internal/number/dtoa (; 63 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) + (func $~lib/internal/number/dtoa (; 64 ;) (type $FUNCSIG$id) (param $0 f64) (result i32) (local $1 i32) (local $2 i32) (local $3 i32) @@ -7012,7 +7026,7 @@ i32.eqz if i32.const 0 - i32.const 112 + i32.const 136 i32.const 28 i32.const 4 call $~lib/env/abort @@ -7028,7 +7042,7 @@ end local.get $3 ) - (func $start:std/string (; 64 ;) (type $FUNCSIG$v) + (func $start:std/string (; 65 ;) (type $FUNCSIG$v) (local $0 i32) (local $1 i32) (local $2 i32) @@ -7072,10 +7086,11 @@ call $~lib/env/abort unreachable end + i32.const 112 + call $~lib/string/String.__not + i32.eqz i32.const 0 - call $~lib/string/String.fromCharCode - i32.const 168 - call $~lib/string/String.__eq + i32.eq i32.eqz if i32.const 0 @@ -7085,10 +7100,11 @@ call $~lib/env/abort unreachable end - i32.const 54 - call $~lib/string/String.fromCharCode - i32.const 176 - call $~lib/string/String.__eq + i32.const 120 + call $~lib/string/String.__not + i32.eqz + i32.const 1 + i32.eq i32.eqz if i32.const 0 @@ -7098,12 +7114,11 @@ call $~lib/env/abort unreachable end - i32.const 65536 - i32.const 54 - i32.add - call $~lib/string/String.fromCharCode - i32.const 176 - call $~lib/string/String.__eq + i32.const 128 + call $~lib/string/String.__not + i32.eqz + i32.const 1 + i32.eq i32.eqz if i32.const 0 @@ -7114,8 +7129,8 @@ unreachable end i32.const 0 - call $~lib/string/String.fromCodePoint - i32.const 168 + call $~lib/string/String.fromCharCode + i32.const 120 call $~lib/string/String.__eq i32.eqz if @@ -7127,8 +7142,8 @@ unreachable end i32.const 54 - call $~lib/string/String.fromCodePoint - i32.const 176 + call $~lib/string/String.fromCharCode + i32.const 192 call $~lib/string/String.__eq i32.eqz if @@ -7139,21 +7154,25 @@ call $~lib/env/abort unreachable end - i32.const 119558 - call $~lib/string/String.fromCodePoint + i32.const 65536 + i32.const 54 + i32.add + call $~lib/string/String.fromCharCode + i32.const 192 + call $~lib/string/String.__eq i32.eqz if - i32.const 184 + i32.const 0 i32.const 48 i32.const 27 i32.const 0 call $~lib/env/abort unreachable end - global.get $std/string/str - i32.const 192 i32.const 0 - call $~lib/string/String#startsWith + call $~lib/string/String.fromCodePoint + i32.const 120 + call $~lib/string/String.__eq i32.eqz if i32.const 0 @@ -7163,14 +7182,10 @@ call $~lib/env/abort unreachable end - block (result i32) - i32.const 1 - global.set $~lib/argc - global.get $std/string/str - i32.const 216 - i32.const 0 - call $~lib/string/String#endsWith|trampoline - end + i32.const 54 + call $~lib/string/String.fromCodePoint + i32.const 192 + call $~lib/string/String.__eq i32.eqz if i32.const 0 @@ -7180,10 +7195,51 @@ call $~lib/env/abort unreachable end + i32.const 119558 + call $~lib/string/String.fromCodePoint + i32.eqz + if + i32.const 200 + i32.const 48 + i32.const 31 + i32.const 0 + call $~lib/env/abort + unreachable + end + global.get $std/string/str + i32.const 208 + i32.const 0 + call $~lib/string/String#startsWith + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 33 + i32.const 0 + call $~lib/env/abort + unreachable + end + block (result i32) + i32.const 1 + global.set $~lib/argc + global.get $std/string/str + i32.const 232 + i32.const 0 + call $~lib/string/String#endsWith|trampoline + end + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 34 + i32.const 0 + call $~lib/env/abort + unreachable + end block $~lib/string/String#includes|inlined.0 (result i32) global.get $std/string/str local.set $0 - i32.const 232 + i32.const 248 local.set $1 i32.const 0 local.set $2 @@ -7200,7 +7256,7 @@ if i32.const 0 i32.const 48 - i32.const 31 + i32.const 35 i32.const 0 call $~lib/env/abort unreachable @@ -7219,7 +7275,7 @@ if i32.const 0 i32.const 48 - i32.const 33 + i32.const 37 i32.const 0 call $~lib/env/abort unreachable @@ -7238,7 +7294,7 @@ if i32.const 0 i32.const 48 - i32.const 34 + i32.const 38 i32.const 0 call $~lib/env/abort unreachable @@ -7246,48 +7302,48 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 3 i32.const 0 call $~lib/string/String#padStart|trampoline end - i32.const 264 + i32.const 272 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 35 + i32.const 39 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 10 - i32.const 256 + i32.const 112 call $~lib/string/String#padStart - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 36 + i32.const 40 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 100 - i32.const 256 + i32.const 112 call $~lib/string/String#padStart - i32.const 280 + i32.const 128 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 37 + i32.const 41 i32.const 0 call $~lib/env/abort unreachable @@ -7306,7 +7362,7 @@ if i32.const 0 i32.const 48 - i32.const 38 + i32.const 42 i32.const 0 call $~lib/env/abort unreachable @@ -7321,7 +7377,7 @@ if i32.const 0 i32.const 48 - i32.const 39 + i32.const 43 i32.const 0 call $~lib/env/abort unreachable @@ -7336,7 +7392,7 @@ if i32.const 0 i32.const 48 - i32.const 40 + i32.const 44 i32.const 0 call $~lib/env/abort unreachable @@ -7355,7 +7411,7 @@ if i32.const 0 i32.const 48 - i32.const 42 + i32.const 46 i32.const 0 call $~lib/env/abort unreachable @@ -7374,7 +7430,7 @@ if i32.const 0 i32.const 48 - i32.const 43 + i32.const 47 i32.const 0 call $~lib/env/abort unreachable @@ -7382,48 +7438,48 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 3 i32.const 0 call $~lib/string/String#padEnd|trampoline end - i32.const 264 + i32.const 272 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 44 + i32.const 48 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 10 - i32.const 256 + i32.const 112 call $~lib/string/String#padEnd - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 45 + i32.const 49 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 100 - i32.const 256 + i32.const 112 call $~lib/string/String#padEnd - i32.const 280 + i32.const 128 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 46 + i32.const 50 i32.const 0 call $~lib/env/abort unreachable @@ -7442,7 +7498,7 @@ if i32.const 0 i32.const 48 - i32.const 47 + i32.const 51 i32.const 0 call $~lib/env/abort unreachable @@ -7457,7 +7513,7 @@ if i32.const 0 i32.const 48 - i32.const 48 + i32.const 52 i32.const 0 call $~lib/env/abort unreachable @@ -7469,51 +7525,6 @@ i32.const 408 call $~lib/string/String.__eq i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 49 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 256 - i32.const 0 - call $~lib/string/String#indexOf - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 51 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 192 - i32.const 0 - call $~lib/string/String#indexOf - i32.const -1 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 52 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 280 - i32.const 280 - i32.const 0 - call $~lib/string/String#indexOf - i32.const 0 - i32.eq - i32.eqz if i32.const 0 i32.const 48 @@ -7522,23 +7533,8 @@ call $~lib/env/abort unreachable end - global.get $std/string/str - global.get $std/string/str - i32.const 0 - call $~lib/string/String#indexOf - i32.const 0 - i32.eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 54 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/str - i32.const 256 + i32.const 112 + i32.const 112 i32.const 0 call $~lib/string/String#indexOf i32.const 0 @@ -7552,6 +7548,66 @@ call $~lib/env/abort unreachable end + i32.const 112 + i32.const 208 + i32.const 0 + call $~lib/string/String#indexOf + i32.const -1 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 56 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 128 + i32.const 0 + call $~lib/string/String#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 57 + i32.const 0 + call $~lib/env/abort + unreachable + end + global.get $std/string/str + global.get $std/string/str + i32.const 0 + call $~lib/string/String#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 58 + i32.const 0 + call $~lib/env/abort + unreachable + end + global.get $std/string/str + i32.const 112 + i32.const 0 + call $~lib/string/String#indexOf + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 59 + i32.const 0 + call $~lib/env/abort + unreachable + end global.get $std/string/str i32.const 432 i32.const 0 @@ -7562,7 +7618,7 @@ if i32.const 0 i32.const 48 - i32.const 56 + i32.const 60 i32.const 0 call $~lib/env/abort unreachable @@ -7577,7 +7633,7 @@ if i32.const 0 i32.const 48 - i32.const 57 + i32.const 61 i32.const 0 call $~lib/env/abort unreachable @@ -7592,7 +7648,7 @@ if i32.const 0 i32.const 48 - i32.const 58 + i32.const 62 i32.const 0 call $~lib/env/abort unreachable @@ -7607,7 +7663,7 @@ if i32.const 0 i32.const 48 - i32.const 59 + i32.const 63 i32.const 0 call $~lib/env/abort unreachable @@ -7622,7 +7678,7 @@ if i32.const 0 i32.const 48 - i32.const 60 + i32.const 64 i32.const 0 call $~lib/env/abort unreachable @@ -7630,8 +7686,8 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 256 + i32.const 112 + i32.const 112 i32.const 0 call $~lib/string/String#lastIndexOf|trampoline end @@ -7641,7 +7697,7 @@ if i32.const 0 i32.const 48 - i32.const 62 + i32.const 66 i32.const 0 call $~lib/env/abort unreachable @@ -7649,8 +7705,8 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 192 + i32.const 112 + i32.const 208 i32.const 0 call $~lib/string/String#lastIndexOf|trampoline end @@ -7660,7 +7716,7 @@ if i32.const 0 i32.const 48 - i32.const 63 + i32.const 67 i32.const 0 call $~lib/env/abort unreachable @@ -7669,7 +7725,7 @@ i32.const 1 global.set $~lib/argc global.get $std/string/str - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#lastIndexOf|trampoline end @@ -7680,7 +7736,7 @@ if i32.const 0 i32.const 48 - i32.const 64 + i32.const 68 i32.const 0 call $~lib/env/abort unreachable @@ -7699,7 +7755,7 @@ if i32.const 0 i32.const 48 - i32.const 65 + i32.const 69 i32.const 0 call $~lib/env/abort unreachable @@ -7718,7 +7774,7 @@ if i32.const 0 i32.const 48 - i32.const 66 + i32.const 70 i32.const 0 call $~lib/env/abort unreachable @@ -7737,7 +7793,7 @@ if i32.const 0 i32.const 48 - i32.const 67 + i32.const 71 i32.const 0 call $~lib/env/abort unreachable @@ -7752,7 +7808,7 @@ if i32.const 0 i32.const 48 - i32.const 68 + i32.const 72 i32.const 0 call $~lib/env/abort unreachable @@ -7767,7 +7823,7 @@ if i32.const 0 i32.const 48 - i32.const 69 + i32.const 73 i32.const 0 call $~lib/env/abort unreachable @@ -7782,7 +7838,7 @@ if i32.const 0 i32.const 48 - i32.const 70 + i32.const 74 i32.const 0 call $~lib/env/abort unreachable @@ -7797,13 +7853,13 @@ if i32.const 0 i32.const 48 - i32.const 71 + i32.const 75 i32.const 0 call $~lib/env/abort unreachable end global.get $std/string/str - i32.const 192 + i32.const 208 i32.const 0 call $~lib/string/String#lastIndexOf i32.const 0 @@ -7812,7 +7868,7 @@ if i32.const 0 i32.const 48 - i32.const 72 + i32.const 76 i32.const 0 call $~lib/env/abort unreachable @@ -7826,7 +7882,7 @@ if i32.const 0 i32.const 48 - i32.const 78 + i32.const 82 i32.const 0 call $~lib/env/abort unreachable @@ -7840,7 +7896,7 @@ if i32.const 0 i32.const 48 - i32.const 79 + i32.const 83 i32.const 0 call $~lib/env/abort unreachable @@ -7854,7 +7910,7 @@ if i32.const 0 i32.const 48 - i32.const 80 + i32.const 84 i32.const 0 call $~lib/env/abort unreachable @@ -7868,7 +7924,7 @@ if i32.const 0 i32.const 48 - i32.const 81 + i32.const 85 i32.const 0 call $~lib/env/abort unreachable @@ -7882,7 +7938,7 @@ if i32.const 0 i32.const 48 - i32.const 82 + i32.const 86 i32.const 0 call $~lib/env/abort unreachable @@ -7896,7 +7952,7 @@ if i32.const 0 i32.const 48 - i32.const 83 + i32.const 87 i32.const 0 call $~lib/env/abort unreachable @@ -7910,7 +7966,7 @@ if i32.const 0 i32.const 48 - i32.const 84 + i32.const 88 i32.const 0 call $~lib/env/abort unreachable @@ -7924,7 +7980,7 @@ if i32.const 0 i32.const 48 - i32.const 85 + i32.const 89 i32.const 0 call $~lib/env/abort unreachable @@ -7937,7 +7993,7 @@ if i32.const 0 i32.const 48 - i32.const 87 + i32.const 91 i32.const 0 call $~lib/env/abort unreachable @@ -7950,7 +8006,7 @@ if i32.const 0 i32.const 48 - i32.const 88 + i32.const 92 i32.const 0 call $~lib/env/abort unreachable @@ -7963,7 +8019,7 @@ if i32.const 0 i32.const 48 - i32.const 89 + i32.const 93 i32.const 0 call $~lib/env/abort unreachable @@ -7976,7 +8032,7 @@ if i32.const 0 i32.const 48 - i32.const 90 + i32.const 94 i32.const 0 call $~lib/env/abort unreachable @@ -7989,12 +8045,12 @@ if i32.const 0 i32.const 48 - i32.const 91 + i32.const 95 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 648 call $~lib/string/String.__concat global.set $std/string/c @@ -8002,54 +8058,6 @@ i32.const 656 call $~lib/string/String.__eq i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 94 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/c - i32.const 280 - call $~lib/string/String.__ne - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 95 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 96 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - global.get $std/string/nullStr - call $~lib/string/String.__ne - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 97 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/nullStr - i32.const 256 - call $~lib/string/String.__ne - i32.eqz if i32.const 0 i32.const 48 @@ -8058,8 +8066,8 @@ call $~lib/env/abort unreachable end - i32.const 280 - i32.const 648 + global.get $std/string/c + i32.const 128 call $~lib/string/String.__ne i32.eqz if @@ -8070,8 +8078,8 @@ call $~lib/env/abort unreachable end - i32.const 280 - i32.const 280 + i32.const 112 + i32.const 112 call $~lib/string/String.__eq i32.eqz if @@ -8082,6 +8090,54 @@ call $~lib/env/abort unreachable end + i32.const 112 + global.get $std/string/nullStr + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 101 + i32.const 0 + call $~lib/env/abort + unreachable + end + global.get $std/string/nullStr + i32.const 112 + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 102 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 648 + call $~lib/string/String.__ne + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 103 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 104 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 664 i32.const 680 call $~lib/string/String.__ne @@ -8089,7 +8145,7 @@ if i32.const 0 i32.const 48 - i32.const 101 + i32.const 105 i32.const 0 call $~lib/env/abort unreachable @@ -8101,7 +8157,7 @@ if i32.const 0 i32.const 48 - i32.const 102 + i32.const 106 i32.const 0 call $~lib/env/abort unreachable @@ -8113,7 +8169,7 @@ if i32.const 0 i32.const 48 - i32.const 103 + i32.const 107 i32.const 0 call $~lib/env/abort unreachable @@ -8125,7 +8181,7 @@ if i32.const 0 i32.const 48 - i32.const 104 + i32.const 108 i32.const 0 call $~lib/env/abort unreachable @@ -8137,7 +8193,7 @@ if i32.const 0 i32.const 48 - i32.const 105 + i32.const 109 i32.const 0 call $~lib/env/abort unreachable @@ -8149,7 +8205,7 @@ if i32.const 0 i32.const 48 - i32.const 106 + i32.const 110 i32.const 0 call $~lib/env/abort unreachable @@ -8161,31 +8217,31 @@ if i32.const 0 i32.const 48 - i32.const 107 + i32.const 111 i32.const 0 call $~lib/env/abort unreachable end i32.const 648 - i32.const 280 + i32.const 128 call $~lib/string/String.__gt i32.eqz if i32.const 0 i32.const 48 - i32.const 109 + i32.const 113 i32.const 0 call $~lib/env/abort unreachable end i32.const 864 - i32.const 280 + i32.const 128 call $~lib/string/String.__gt i32.eqz if i32.const 0 i32.const 48 - i32.const 110 + i32.const 114 i32.const 0 call $~lib/env/abort unreachable @@ -8197,7 +8253,7 @@ if i32.const 0 i32.const 48 - i32.const 111 + i32.const 115 i32.const 0 call $~lib/env/abort unreachable @@ -8206,45 +8262,6 @@ i32.const 656 call $~lib/string/String.__gt i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 112 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 864 - i32.const 656 - call $~lib/string/String.__lt - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 113 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 648 - global.get $std/string/nullStr - call $~lib/string/String.__lt - i32.eqz - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 115 - i32.const 0 - call $~lib/env/abort - unreachable - end - global.get $std/string/nullStr - i32.const 648 - call $~lib/string/String.__lt - i32.eqz - i32.eqz if i32.const 0 i32.const 48 @@ -8253,22 +8270,24 @@ call $~lib/env/abort unreachable end - i32.const 288 - i32.const 256 - call $~lib/string/String.__gt + i32.const 864 + i32.const 656 + call $~lib/string/String.__lt + i32.eqz i32.eqz if i32.const 0 i32.const 48 - i32.const 118 + i32.const 117 i32.const 0 call $~lib/env/abort unreachable end - i32.const 256 - i32.const 288 + i32.const 648 + global.get $std/string/nullStr call $~lib/string/String.__lt i32.eqz + i32.eqz if i32.const 0 i32.const 48 @@ -8277,9 +8296,10 @@ call $~lib/env/abort unreachable end - i32.const 288 - i32.const 256 - call $~lib/string/String.__gte + global.get $std/string/nullStr + i32.const 648 + call $~lib/string/String.__lt + i32.eqz i32.eqz if i32.const 0 @@ -8289,22 +8309,9 @@ call $~lib/env/abort unreachable end - i32.const 256 i32.const 288 - call $~lib/string/String.__lte - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 121 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 288 - i32.const 256 - call $~lib/string/String.__lt - i32.eqz + i32.const 112 + call $~lib/string/String.__gt i32.eqz if i32.const 0 @@ -8314,10 +8321,9 @@ call $~lib/env/abort unreachable end - i32.const 256 + i32.const 112 i32.const 288 - call $~lib/string/String.__gt - i32.eqz + call $~lib/string/String.__lt i32.eqz if i32.const 0 @@ -8327,10 +8333,9 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__lt - i32.eqz + i32.const 288 + i32.const 112 + call $~lib/string/String.__gte i32.eqz if i32.const 0 @@ -8340,10 +8345,9 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__gt - i32.eqz + i32.const 112 + i32.const 288 + call $~lib/string/String.__lte i32.eqz if i32.const 0 @@ -8353,9 +8357,10 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__gte + i32.const 288 + i32.const 112 + call $~lib/string/String.__lt + i32.eqz i32.eqz if i32.const 0 @@ -8365,9 +8370,10 @@ call $~lib/env/abort unreachable end - i32.const 256 - i32.const 256 - call $~lib/string/String.__lte + i32.const 112 + i32.const 288 + call $~lib/string/String.__gt + i32.eqz i32.eqz if i32.const 0 @@ -8377,6 +8383,56 @@ call $~lib/env/abort unreachable end + i32.const 112 + i32.const 112 + call $~lib/string/String.__lt + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 128 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__gt + i32.eqz + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 129 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__gte + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 130 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 112 + i32.const 112 + call $~lib/string/String.__lte + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 131 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 65377 call $~lib/string/String.fromCodePoint global.set $std/string/a @@ -8393,7 +8449,7 @@ if i32.const 0 i32.const 48 - i32.const 131 + i32.const 135 i32.const 0 call $~lib/env/abort unreachable @@ -8403,48 +8459,6 @@ i32.const 3 i32.eq i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 133 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 256 - i32.const 100 - call $~lib/string/String#repeat - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 135 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 280 - i32.const 0 - call $~lib/string/String#repeat - i32.const 256 - call $~lib/string/String.__eq - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 136 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 280 - i32.const 1 - call $~lib/string/String#repeat - i32.const 280 - call $~lib/string/String.__eq - i32.eqz if i32.const 0 i32.const 48 @@ -8453,7 +8467,49 @@ call $~lib/env/abort unreachable end - i32.const 280 + i32.const 112 + i32.const 100 + call $~lib/string/String#repeat + i32.const 112 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 139 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 0 + call $~lib/string/String#repeat + i32.const 112 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 140 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 + i32.const 1 + call $~lib/string/String#repeat + i32.const 128 + call $~lib/string/String.__eq + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 141 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 128 i32.const 2 call $~lib/string/String#repeat i32.const 872 @@ -8462,12 +8518,12 @@ if i32.const 0 i32.const 48 - i32.const 138 + i32.const 142 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 3 call $~lib/string/String#repeat i32.const 880 @@ -8476,7 +8532,7 @@ if i32.const 0 i32.const 48 - i32.const 139 + i32.const 143 i32.const 0 call $~lib/env/abort unreachable @@ -8490,12 +8546,12 @@ if i32.const 0 i32.const 48 - i32.const 140 + i32.const 144 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 5 call $~lib/string/String#repeat i32.const 920 @@ -8504,12 +8560,12 @@ if i32.const 0 i32.const 48 - i32.const 141 + i32.const 145 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 6 call $~lib/string/String#repeat i32.const 936 @@ -8518,12 +8574,12 @@ if i32.const 0 i32.const 48 - i32.const 142 + i32.const 146 i32.const 0 call $~lib/env/abort unreachable end - i32.const 280 + i32.const 128 i32.const 7 call $~lib/string/String#repeat i32.const 952 @@ -8532,7 +8588,7 @@ if i32.const 0 i32.const 48 - i32.const 143 + i32.const 147 i32.const 0 call $~lib/env/abort unreachable @@ -8553,7 +8609,7 @@ if i32.const 0 i32.const 48 - i32.const 147 + i32.const 151 i32.const 0 call $~lib/env/abort unreachable @@ -8572,7 +8628,7 @@ if i32.const 0 i32.const 48 - i32.const 148 + i32.const 152 i32.const 0 call $~lib/env/abort unreachable @@ -8591,7 +8647,7 @@ if i32.const 0 i32.const 48 - i32.const 149 + i32.const 153 i32.const 0 call $~lib/env/abort unreachable @@ -8606,7 +8662,7 @@ if i32.const 0 i32.const 48 - i32.const 150 + i32.const 154 i32.const 0 call $~lib/env/abort unreachable @@ -8621,7 +8677,7 @@ if i32.const 0 i32.const 48 - i32.const 151 + i32.const 155 i32.const 0 call $~lib/env/abort unreachable @@ -8630,13 +8686,13 @@ i32.const 4 i32.const 3 call $~lib/string/String#slice - i32.const 256 + i32.const 112 call $~lib/string/String.__eq i32.eqz if i32.const 0 i32.const 48 - i32.const 152 + i32.const 156 i32.const 0 call $~lib/env/abort unreachable @@ -8651,7 +8707,7 @@ if i32.const 0 i32.const 48 - i32.const 153 + i32.const 157 i32.const 0 call $~lib/env/abort unreachable @@ -8659,7 +8715,7 @@ block (result i32) i32.const 0 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 0 i32.const 0 call $~lib/string/String#split|trampoline @@ -8678,7 +8734,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $2 @@ -8687,7 +8743,7 @@ if i32.const 0 i32.const 48 - i32.const 158 + i32.const 162 i32.const 0 call $~lib/env/abort unreachable @@ -8695,8 +8751,8 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 - i32.const 256 + i32.const 112 + i32.const 112 i32.const 0 call $~lib/string/String#split|trampoline end @@ -8713,7 +8769,7 @@ if i32.const 0 i32.const 48 - i32.const 160 + i32.const 164 i32.const 0 call $~lib/env/abort unreachable @@ -8721,7 +8777,7 @@ block (result i32) i32.const 1 global.set $~lib/argc - i32.const 256 + i32.const 112 i32.const 432 i32.const 0 call $~lib/string/String#split|trampoline @@ -8740,7 +8796,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $2 @@ -8749,7 +8805,7 @@ if i32.const 0 i32.const 48 - i32.const 162 + i32.const 166 i32.const 0 call $~lib/env/abort unreachable @@ -8785,7 +8841,7 @@ if i32.const 0 i32.const 48 - i32.const 164 + i32.const 168 i32.const 0 call $~lib/env/abort unreachable @@ -8812,7 +8868,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -8841,7 +8897,7 @@ if i32.const 0 i32.const 48 - i32.const 166 + i32.const 170 i32.const 0 call $~lib/env/abort unreachable @@ -8868,7 +8924,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -8897,7 +8953,7 @@ if i32.const 0 i32.const 48 - i32.const 168 + i32.const 172 i32.const 0 call $~lib/env/abort unreachable @@ -8924,7 +8980,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -8944,7 +9000,7 @@ global.get $std/string/sa i32.const 2 call $~lib/array/Array<~lib/string/String>#__get - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $2 @@ -8963,7 +9019,7 @@ if i32.const 0 i32.const 48 - i32.const 170 + i32.const 174 i32.const 0 call $~lib/env/abort unreachable @@ -8990,7 +9046,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $2 @@ -9000,7 +9056,7 @@ global.get $std/string/sa i32.const 1 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9029,7 +9085,7 @@ if i32.const 0 i32.const 48 - i32.const 172 + i32.const 176 i32.const 0 call $~lib/env/abort unreachable @@ -9056,7 +9112,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9086,7 +9142,7 @@ global.get $std/string/sa i32.const 3 call $~lib/array/Array<~lib/string/String>#__get - i32.const 256 + i32.const 112 call $~lib/string/String.__eq else local.get $2 @@ -9095,7 +9151,7 @@ if i32.const 0 i32.const 48 - i32.const 174 + i32.const 178 i32.const 0 call $~lib/env/abort unreachable @@ -9104,7 +9160,7 @@ i32.const 1 global.set $~lib/argc i32.const 288 - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#split|trampoline end @@ -9122,7 +9178,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9151,13 +9207,13 @@ if i32.const 0 i32.const 48 - i32.const 176 + i32.const 180 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 0 call $~lib/string/String#split global.set $std/string/sa @@ -9173,13 +9229,13 @@ if i32.const 0 i32.const 48 - i32.const 178 + i32.const 182 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 1 call $~lib/string/String#split global.set $std/string/sa @@ -9196,7 +9252,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9205,7 +9261,7 @@ if i32.const 0 i32.const 48 - i32.const 180 + i32.const 184 i32.const 0 call $~lib/env/abort unreachable @@ -9228,7 +9284,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9237,13 +9293,13 @@ if i32.const 0 i32.const 48 - i32.const 182 + i32.const 186 i32.const 0 call $~lib/env/abort unreachable end i32.const 288 - i32.const 256 + i32.const 112 i32.const 4 call $~lib/string/String#split global.set $std/string/sa @@ -9260,111 +9316,7 @@ global.get $std/string/sa i32.const 0 call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 - call $~lib/string/String.__eq - else - local.get $2 - end - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 648 - call $~lib/string/String.__eq - else - local.get $2 - end - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1216 - call $~lib/string/String.__eq - else - local.get $2 - end - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 184 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 288 - i32.const 256 - i32.const -1 - call $~lib/string/String#split - global.set $std/string/sa - block $~lib/array/Array<~lib/string/String>#get:length|inlined.14 (result i32) - global.get $std/string/sa - local.set $2 - local.get $2 - i32.load offset=4 - end - i32.const 3 - i32.eq - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 - call $~lib/string/String.__eq - else - local.get $2 - end - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 1 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 648 - call $~lib/string/String.__eq - else - local.get $2 - end - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 2 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 1216 - call $~lib/string/String.__eq - else - local.get $2 - end - i32.eqz - if - i32.const 0 - i32.const 48 - i32.const 186 - i32.const 0 - call $~lib/env/abort - unreachable - end - i32.const 1192 - i32.const 432 - i32.const -1 - call $~lib/string/String#split - global.set $std/string/sa - block $~lib/array/Array<~lib/string/String>#get:length|inlined.15 (result i32) - global.get $std/string/sa - local.set $2 - local.get $2 - i32.load offset=4 - end - i32.const 3 - i32.eq - local.tee $2 - if (result i32) - global.get $std/string/sa - i32.const 0 - call $~lib/array/Array<~lib/string/String>#__get - i32.const 280 + i32.const 128 call $~lib/string/String.__eq else local.get $2 @@ -9398,6 +9350,110 @@ call $~lib/env/abort unreachable end + i32.const 288 + i32.const 112 + i32.const -1 + call $~lib/string/String#split + global.set $std/string/sa + block $~lib/array/Array<~lib/string/String>#get:length|inlined.14 (result i32) + global.get $std/string/sa + local.set $2 + local.get $2 + i32.load offset=4 + end + i32.const 3 + i32.eq + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 128 + call $~lib/string/String.__eq + else + local.get $2 + end + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 648 + call $~lib/string/String.__eq + else + local.get $2 + end + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1216 + call $~lib/string/String.__eq + else + local.get $2 + end + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 190 + i32.const 0 + call $~lib/env/abort + unreachable + end + i32.const 1192 + i32.const 432 + i32.const -1 + call $~lib/string/String#split + global.set $std/string/sa + block $~lib/array/Array<~lib/string/String>#get:length|inlined.15 (result i32) + global.get $std/string/sa + local.set $2 + local.get $2 + i32.load offset=4 + end + i32.const 3 + i32.eq + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 0 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 128 + call $~lib/string/String.__eq + else + local.get $2 + end + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 1 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 648 + call $~lib/string/String.__eq + else + local.get $2 + end + local.tee $2 + if (result i32) + global.get $std/string/sa + i32.const 2 + call $~lib/array/Array<~lib/string/String>#__get + i32.const 1216 + call $~lib/string/String.__eq + else + local.get $2 + end + i32.eqz + if + i32.const 0 + i32.const 48 + i32.const 192 + i32.const 0 + call $~lib/env/abort + unreachable + end i32.const 0 call $~lib/internal/number/itoa32 i32.const 480 @@ -9406,7 +9462,7 @@ if i32.const 0 i32.const 48 - i32.const 190 + i32.const 194 i32.const 0 call $~lib/env/abort unreachable @@ -9419,7 +9475,7 @@ if i32.const 0 i32.const 48 - i32.const 191 + i32.const 195 i32.const 0 call $~lib/env/abort unreachable @@ -9432,7 +9488,7 @@ if i32.const 0 i32.const 48 - i32.const 192 + i32.const 196 i32.const 0 call $~lib/env/abort unreachable @@ -9445,7 +9501,7 @@ if i32.const 0 i32.const 48 - i32.const 193 + i32.const 197 i32.const 0 call $~lib/env/abort unreachable @@ -9458,7 +9514,7 @@ if i32.const 0 i32.const 48 - i32.const 194 + i32.const 198 i32.const 0 call $~lib/env/abort unreachable @@ -9471,7 +9527,7 @@ if i32.const 0 i32.const 48 - i32.const 195 + i32.const 199 i32.const 0 call $~lib/env/abort unreachable @@ -9484,7 +9540,7 @@ if i32.const 0 i32.const 48 - i32.const 196 + i32.const 200 i32.const 0 call $~lib/env/abort unreachable @@ -9497,7 +9553,7 @@ if i32.const 0 i32.const 48 - i32.const 197 + i32.const 201 i32.const 0 call $~lib/env/abort unreachable @@ -9510,7 +9566,7 @@ if i32.const 0 i32.const 48 - i32.const 198 + i32.const 202 i32.const 0 call $~lib/env/abort unreachable @@ -9523,7 +9579,7 @@ if i32.const 0 i32.const 48 - i32.const 199 + i32.const 203 i32.const 0 call $~lib/env/abort unreachable @@ -9536,7 +9592,7 @@ if i32.const 0 i32.const 48 - i32.const 200 + i32.const 204 i32.const 0 call $~lib/env/abort unreachable @@ -9549,7 +9605,7 @@ if i32.const 0 i32.const 48 - i32.const 201 + i32.const 205 i32.const 0 call $~lib/env/abort unreachable @@ -9562,7 +9618,7 @@ if i32.const 0 i32.const 48 - i32.const 202 + i32.const 206 i32.const 0 call $~lib/env/abort unreachable @@ -9575,7 +9631,7 @@ if i32.const 0 i32.const 48 - i32.const 203 + i32.const 207 i32.const 0 call $~lib/env/abort unreachable @@ -9588,7 +9644,7 @@ if i32.const 0 i32.const 48 - i32.const 205 + i32.const 209 i32.const 0 call $~lib/env/abort unreachable @@ -9601,7 +9657,7 @@ if i32.const 0 i32.const 48 - i32.const 206 + i32.const 210 i32.const 0 call $~lib/env/abort unreachable @@ -9614,7 +9670,7 @@ if i32.const 0 i32.const 48 - i32.const 207 + i32.const 211 i32.const 0 call $~lib/env/abort unreachable @@ -9627,7 +9683,7 @@ if i32.const 0 i32.const 48 - i32.const 208 + i32.const 212 i32.const 0 call $~lib/env/abort unreachable @@ -9640,7 +9696,7 @@ if i32.const 0 i32.const 48 - i32.const 209 + i32.const 213 i32.const 0 call $~lib/env/abort unreachable @@ -9653,7 +9709,7 @@ if i32.const 0 i32.const 48 - i32.const 211 + i32.const 215 i32.const 0 call $~lib/env/abort unreachable @@ -9666,7 +9722,7 @@ if i32.const 0 i32.const 48 - i32.const 212 + i32.const 216 i32.const 0 call $~lib/env/abort unreachable @@ -9679,7 +9735,7 @@ if i32.const 0 i32.const 48 - i32.const 213 + i32.const 217 i32.const 0 call $~lib/env/abort unreachable @@ -9692,7 +9748,7 @@ if i32.const 0 i32.const 48 - i32.const 214 + i32.const 218 i32.const 0 call $~lib/env/abort unreachable @@ -9705,7 +9761,7 @@ if i32.const 0 i32.const 48 - i32.const 215 + i32.const 219 i32.const 0 call $~lib/env/abort unreachable @@ -9718,7 +9774,7 @@ if i32.const 0 i32.const 48 - i32.const 216 + i32.const 220 i32.const 0 call $~lib/env/abort unreachable @@ -9731,7 +9787,7 @@ if i32.const 0 i32.const 48 - i32.const 217 + i32.const 221 i32.const 0 call $~lib/env/abort unreachable @@ -9744,7 +9800,7 @@ if i32.const 0 i32.const 48 - i32.const 218 + i32.const 222 i32.const 0 call $~lib/env/abort unreachable @@ -9757,7 +9813,7 @@ if i32.const 0 i32.const 48 - i32.const 219 + i32.const 223 i32.const 0 call $~lib/env/abort unreachable @@ -9770,7 +9826,7 @@ if i32.const 0 i32.const 48 - i32.const 220 + i32.const 224 i32.const 0 call $~lib/env/abort unreachable @@ -9783,7 +9839,7 @@ if i32.const 0 i32.const 48 - i32.const 221 + i32.const 225 i32.const 0 call $~lib/env/abort unreachable @@ -9796,7 +9852,7 @@ if i32.const 0 i32.const 48 - i32.const 223 + i32.const 227 i32.const 0 call $~lib/env/abort unreachable @@ -9809,7 +9865,7 @@ if i32.const 0 i32.const 48 - i32.const 224 + i32.const 228 i32.const 0 call $~lib/env/abort unreachable @@ -9822,7 +9878,7 @@ if i32.const 0 i32.const 48 - i32.const 225 + i32.const 229 i32.const 0 call $~lib/env/abort unreachable @@ -9835,7 +9891,7 @@ if i32.const 0 i32.const 48 - i32.const 226 + i32.const 230 i32.const 0 call $~lib/env/abort unreachable @@ -9848,7 +9904,7 @@ if i32.const 0 i32.const 48 - i32.const 227 + i32.const 231 i32.const 0 call $~lib/env/abort unreachable @@ -9861,7 +9917,7 @@ if i32.const 0 i32.const 48 - i32.const 228 + i32.const 232 i32.const 0 call $~lib/env/abort unreachable @@ -9874,7 +9930,7 @@ if i32.const 0 i32.const 48 - i32.const 229 + i32.const 233 i32.const 0 call $~lib/env/abort unreachable @@ -9887,7 +9943,7 @@ if i32.const 0 i32.const 48 - i32.const 230 + i32.const 234 i32.const 0 call $~lib/env/abort unreachable @@ -9900,7 +9956,7 @@ if i32.const 0 i32.const 48 - i32.const 231 + i32.const 235 i32.const 0 call $~lib/env/abort unreachable @@ -9913,7 +9969,7 @@ if i32.const 0 i32.const 48 - i32.const 232 + i32.const 236 i32.const 0 call $~lib/env/abort unreachable @@ -9926,7 +9982,7 @@ if i32.const 0 i32.const 48 - i32.const 233 + i32.const 237 i32.const 0 call $~lib/env/abort unreachable @@ -9939,7 +9995,7 @@ if i32.const 0 i32.const 48 - i32.const 236 + i32.const 240 i32.const 0 call $~lib/env/abort unreachable @@ -9952,7 +10008,7 @@ if i32.const 0 i32.const 48 - i32.const 237 + i32.const 241 i32.const 0 call $~lib/env/abort unreachable @@ -9965,7 +10021,7 @@ if i32.const 0 i32.const 48 - i32.const 238 + i32.const 242 i32.const 0 call $~lib/env/abort unreachable @@ -9978,7 +10034,7 @@ if i32.const 0 i32.const 48 - i32.const 239 + i32.const 243 i32.const 0 call $~lib/env/abort unreachable @@ -9992,7 +10048,7 @@ if i32.const 0 i32.const 48 - i32.const 240 + i32.const 244 i32.const 0 call $~lib/env/abort unreachable @@ -10005,7 +10061,7 @@ if i32.const 0 i32.const 48 - i32.const 241 + i32.const 245 i32.const 0 call $~lib/env/abort unreachable @@ -10019,7 +10075,7 @@ if i32.const 0 i32.const 48 - i32.const 242 + i32.const 246 i32.const 0 call $~lib/env/abort unreachable @@ -10032,7 +10088,7 @@ if i32.const 0 i32.const 48 - i32.const 243 + i32.const 247 i32.const 0 call $~lib/env/abort unreachable @@ -10046,7 +10102,7 @@ if i32.const 0 i32.const 48 - i32.const 244 + i32.const 248 i32.const 0 call $~lib/env/abort unreachable @@ -10059,7 +10115,7 @@ if i32.const 0 i32.const 48 - i32.const 245 + i32.const 249 i32.const 0 call $~lib/env/abort unreachable @@ -10072,7 +10128,7 @@ if i32.const 0 i32.const 48 - i32.const 246 + i32.const 250 i32.const 0 call $~lib/env/abort unreachable @@ -10085,7 +10141,7 @@ if i32.const 0 i32.const 48 - i32.const 249 + i32.const 253 i32.const 0 call $~lib/env/abort unreachable @@ -10098,7 +10154,7 @@ if i32.const 0 i32.const 48 - i32.const 250 + i32.const 254 i32.const 0 call $~lib/env/abort unreachable @@ -10111,7 +10167,7 @@ if i32.const 0 i32.const 48 - i32.const 251 + i32.const 255 i32.const 0 call $~lib/env/abort unreachable @@ -10124,7 +10180,7 @@ if i32.const 0 i32.const 48 - i32.const 252 + i32.const 256 i32.const 0 call $~lib/env/abort unreachable @@ -10137,7 +10193,7 @@ if i32.const 0 i32.const 48 - i32.const 253 + i32.const 257 i32.const 0 call $~lib/env/abort unreachable @@ -10150,7 +10206,7 @@ if i32.const 0 i32.const 48 - i32.const 259 + i32.const 263 i32.const 0 call $~lib/env/abort unreachable @@ -10163,7 +10219,7 @@ if i32.const 0 i32.const 48 - i32.const 260 + i32.const 264 i32.const 0 call $~lib/env/abort unreachable @@ -10176,7 +10232,7 @@ if i32.const 0 i32.const 48 - i32.const 261 + i32.const 265 i32.const 0 call $~lib/env/abort unreachable @@ -10189,7 +10245,7 @@ if i32.const 0 i32.const 48 - i32.const 262 + i32.const 266 i32.const 0 call $~lib/env/abort unreachable @@ -10202,7 +10258,7 @@ if i32.const 0 i32.const 48 - i32.const 264 + i32.const 268 i32.const 0 call $~lib/env/abort unreachable @@ -10215,7 +10271,7 @@ if i32.const 0 i32.const 48 - i32.const 265 + i32.const 269 i32.const 0 call $~lib/env/abort unreachable @@ -10228,7 +10284,7 @@ if i32.const 0 i32.const 48 - i32.const 266 + i32.const 270 i32.const 0 call $~lib/env/abort unreachable @@ -10241,7 +10297,7 @@ if i32.const 0 i32.const 48 - i32.const 267 + i32.const 271 i32.const 0 call $~lib/env/abort unreachable @@ -10254,7 +10310,7 @@ if i32.const 0 i32.const 48 - i32.const 268 + i32.const 272 i32.const 0 call $~lib/env/abort unreachable @@ -10267,7 +10323,7 @@ if i32.const 0 i32.const 48 - i32.const 269 + i32.const 273 i32.const 0 call $~lib/env/abort unreachable @@ -10280,7 +10336,7 @@ if i32.const 0 i32.const 48 - i32.const 271 + i32.const 275 i32.const 0 call $~lib/env/abort unreachable @@ -10293,7 +10349,7 @@ if i32.const 0 i32.const 48 - i32.const 272 + i32.const 276 i32.const 0 call $~lib/env/abort unreachable @@ -10306,7 +10362,7 @@ if i32.const 0 i32.const 48 - i32.const 273 + i32.const 277 i32.const 0 call $~lib/env/abort unreachable @@ -10319,7 +10375,7 @@ if i32.const 0 i32.const 48 - i32.const 274 + i32.const 278 i32.const 0 call $~lib/env/abort unreachable @@ -10332,7 +10388,7 @@ if i32.const 0 i32.const 48 - i32.const 275 + i32.const 279 i32.const 0 call $~lib/env/abort unreachable @@ -10345,7 +10401,7 @@ if i32.const 0 i32.const 48 - i32.const 276 + i32.const 280 i32.const 0 call $~lib/env/abort unreachable @@ -10358,7 +10414,7 @@ if i32.const 0 i32.const 48 - i32.const 277 + i32.const 281 i32.const 0 call $~lib/env/abort unreachable @@ -10371,7 +10427,7 @@ if i32.const 0 i32.const 48 - i32.const 278 + i32.const 282 i32.const 0 call $~lib/env/abort unreachable @@ -10384,7 +10440,7 @@ if i32.const 0 i32.const 48 - i32.const 279 + i32.const 283 i32.const 0 call $~lib/env/abort unreachable @@ -10397,7 +10453,7 @@ if i32.const 0 i32.const 48 - i32.const 281 + i32.const 285 i32.const 0 call $~lib/env/abort unreachable @@ -10410,7 +10466,7 @@ if i32.const 0 i32.const 48 - i32.const 282 + i32.const 286 i32.const 0 call $~lib/env/abort unreachable @@ -10423,7 +10479,7 @@ if i32.const 0 i32.const 48 - i32.const 284 + i32.const 288 i32.const 0 call $~lib/env/abort unreachable @@ -10436,7 +10492,7 @@ if i32.const 0 i32.const 48 - i32.const 285 + i32.const 289 i32.const 0 call $~lib/env/abort unreachable @@ -10449,7 +10505,7 @@ if i32.const 0 i32.const 48 - i32.const 286 + i32.const 290 i32.const 0 call $~lib/env/abort unreachable @@ -10462,7 +10518,7 @@ if i32.const 0 i32.const 48 - i32.const 287 + i32.const 291 i32.const 0 call $~lib/env/abort unreachable @@ -10477,7 +10533,7 @@ if i32.const 0 i32.const 48 - i32.const 289 + i32.const 293 i32.const 0 call $~lib/env/abort unreachable @@ -10490,7 +10546,7 @@ if i32.const 0 i32.const 48 - i32.const 290 + i32.const 294 i32.const 0 call $~lib/env/abort unreachable @@ -10503,7 +10559,7 @@ if i32.const 0 i32.const 48 - i32.const 291 + i32.const 295 i32.const 0 call $~lib/env/abort unreachable @@ -10516,7 +10572,7 @@ if i32.const 0 i32.const 48 - i32.const 292 + i32.const 296 i32.const 0 call $~lib/env/abort unreachable @@ -10529,7 +10585,7 @@ if i32.const 0 i32.const 48 - i32.const 293 + i32.const 297 i32.const 0 call $~lib/env/abort unreachable @@ -10542,7 +10598,7 @@ if i32.const 0 i32.const 48 - i32.const 294 + i32.const 298 i32.const 0 call $~lib/env/abort unreachable @@ -10555,7 +10611,7 @@ if i32.const 0 i32.const 48 - i32.const 295 + i32.const 299 i32.const 0 call $~lib/env/abort unreachable @@ -10568,7 +10624,7 @@ if i32.const 0 i32.const 48 - i32.const 296 + i32.const 300 i32.const 0 call $~lib/env/abort unreachable @@ -10581,18 +10637,18 @@ if i32.const 0 i32.const 48 - i32.const 297 + i32.const 301 i32.const 0 call $~lib/env/abort unreachable end ) - (func $std/string/getString (; 65 ;) (type $FUNCSIG$i) (result i32) + (func $std/string/getString (; 66 ;) (type $FUNCSIG$i) (result i32) global.get $std/string/str ) - (func $start (; 66 ;) (type $FUNCSIG$v) + (func $start (; 67 ;) (type $FUNCSIG$v) call $start:std/string ) - (func $null (; 67 ;) (type $FUNCSIG$v) + (func $null (; 68 ;) (type $FUNCSIG$v) ) )