 
     # caches
     caches = {}
-    while match = /cache\(([^,]+?), (.*?)\) \{/.exec body
+    while match = /cache[\s\t\n]*\([\s\t\n]*([^,]+?)[\s\t\n]*,[\s\t\n]*(.*?)[\s\t\n]*\)[\s\t\n]*\{/.exec body
       cacheType = match[1].trim()
       cacheName = match[2].trim()
       offsetStart = match.index

        offsetEnd += remainder.length + 1
        # consume terminators to prevent empty statements
        offsetEnd++ if code[offsetEnd] == ';'
        imp = /^(.*?), (.*)$/.exec remainder
        imp =
          fullMatch: code[offsetStart...offsetEnd]
          name: imp[1]

      offsetEnd = offsetStart + match[0].length
      remainder = Jax.Util.scan code[offsetEnd..-1]
      offsetEnd += remainder.length + 1
      exp = /^(.*?)[\s\t\n]*,[\s\t\n]*(.*?)[\s\t\n]*,[\s\t\n]*(.*)$/.exec remainder
      exports.push
        fullMatch: code[offsetStart...offsetEnd]
        type: exp[1]
