# v1.4.0 - yyyy-mm-dd ## Standard library additions and changes - `uri` adds Data URI Base64, implements RFC-2397. - Add [DOM Parser](https://developer.mozilla.org/en-US/docs/Web/API/DOMParser) to the `dom` module for the JavaScript target. - The default hash for `Ordinal` has changed to something more bit-scrambling. `import hashes; proc hash(x: myInt): Hash = hashIdentity(x)` recovers the old one in an instantiation context while `-d:nimIntHash1` recovers it globally. ## Language changes - In newruntime it is now allowed to assign discriminator field without restrictions as long as case object doesn't have custom destructor. Discriminator value doesn't have to be a constant either. If you have custom destructor for case object and you do want to freely assign discriminator fields, it is recommended to refactor object into 2 objects like this: ```nim type MyObj = object case kind: bool of true: y: ptr UncheckedArray[float] of false: z: seq[int] proc `=destroy`(x: MyObj) = if x.kind and x.y != nil: deallocShared(x.y) x.y = nil ``` Refactor into: ```nim type MySubObj = object val: ptr UncheckedArray[float] MyObj = object case kind: bool of true: y: MySubObj of false: z: seq[int] proc `=destroy`(x: MySubObj) = if x.val != nil: deallocShared(x.val) x.val = nil ``` ## Compiler changes - Specific warnings can now be turned into errors via `--warningAsError[X]:on|off`. - The `define` and `undef` pragmas have been de-deprecated. ## Tool changes