ayzim 0.1.2

A Rust rewrite of the Emscripten asm.js optimizer
dd76827ca5ec408035f1deea91793f102d71487a of emscripten

RSTODO, RSNOTE

why does panic in match arms in rust not type check as *, whereas it does for functions? see setBlockContent

DEBUG=1 && cargo build $([ $DEBUG = 1 ] || echo --release) --features profiling && cp ./target/$([ $DEBUG = 1 ] && echo debug || echo release)/ayzim-opt ~/Desktop/emscripten/

cargo build --release --target x86_64-unknown-linux-musl

 - make sure to always assert that the last element was/wasn't present (or add
   a note that it's not appropriate) when inserting or deleting from sets and
   maps
 - explicitly call .iter/.iter_mut/.into_iter
 - make sure all traverse* closures explicitly give argument types
 - mast may not be needed if you use **
 - review uses of .. - should only be used when matching a number of different
   ast types in order to ignore them
 - consider turning all matches on _ to explicit matches of ast variations
 - be wary about using &IString, they're needlessly inefficient
 - if not indenting inside a traverse*, leave a blank line at beginning and end
   of the closure
 - make sure to never use .X tuple indexing when doing .getBlah
 - convert all unwraps to expect and add details to panics
 - check for &* - the * isn't needed if rust knows the target type
 - consider mem::replace to be must_use - just use *x = y otherwise (maybe clippy should warn)
 - rewrite ayzim-macros to use macros 1.1?


LATER
 - not sure how well tested emit and receivejson are
 - not being able to chain conditions onto the beginning or end of if let lines
   is rubbish, there's an issue fr it somewhere
 - ensure no semicolons except where necessary
 - consistently name the enum members of the ast enum
 - use vecs rather than astvecs where it doesn't increase the size of the
   astvalue enum
 - try and minimise astnode usage - should mostly be &(mut)? AstValue
 - think of some nice way to get rid of mast entirely
 - mem::swaps are interesting because they can either swap the boxes (pointers)
   or the actual AstValues. could this distinction harm locality
 - pattern matches should possibly unbox, so that future accesses only have to
   dereference once
 - is it faster to use functions rather than IStringSets?
 - type aliases for ordered and unordered maps rather than using hashmap and btreemap directly