docs: function serialize (node, wrap) {
    //let start = microtime.nowDouble()
    let s = ''
    let i = 0
    let p = 0
    let w = 80
    let wasPunc = false
    let newline = () => {
      s += '\n'
      s += ' '.repeat(i)
      p = i
    }
    let ostr = (x, delta) => {
      x = ''+x
      delta = delta || 0
      // console.log('outputing', JSON.stringify({x:x, p:p}))
      if (x.length > 1 && (p + x.length > w)) {
        newline()
      } else if (x === '[') {
        newline()
      } else {
        if (wasPunc) {
          s += ' '
          p++
        }
      }
      s += x
      p += x.length
      i += delta
      wasPunc = (x === ',' || x === ':')
    }
    walk(node, ostr)
  
    //let end = microtime.nowDouble()
    console.log('elapsed ', end-start)
    
    s += '\n' 
    if (wrap) {
      let ss = `'use strict'
  
  module.exports = function () {
    return (${s})
  }
  `
      s = ss
    }
    
    return s
  }