Patch title: Release 94 bulk changes
Abstract:
File: /pliant/language/type/misc/blob.pli
Key:
    Removed line
    Added line
module "/pliant/language/unsafe.pli"

constant from_scratch false


type Blob
  if from_scratch
    field Address buffer <- null
    field Int length <- 0
  else
    field Str support


if from_scratch
  function destroy b
    arg_w Blob b
    if b:length>0
      memory_free b:buffer


method b content -> a
  arg Blob b ; arg Address a
  if from_scratch
    a := b buffer
  else
    a := b:support characters

method b size -> s
  arg Blob b ; arg Int s
  if from_scratch
    s := abs b:length
  else
    s := b:support len


method b 'size :=' s
  arg_rw Blob b ; arg Int s
  check s>=0
  if from_scratch
    if b:length>0
      memory_free b:buffer
    b buffer := memory_allocate s addressof:b
    b length := s
  else
    b:support set (memory_allocate s addressof:b) s true


method b map adr size
  arg_rw Blob b ; arg Address adr ; arg Int size
  if from_scratch
    if b:length>0
      memory_free b:buffer
    b buffer := adr
    b length := -size
  else
    b:support set adr size false
  

if from_scratch
  function copy src dest
    arg Blob src ; arg_w Blob dest
    dest size := src size
    memory_copy src:content dest:content src:size


export Blob '. content' '. size' '. size :=' '. map'