 
   matchedAttributes: []
 
+  when: (@patternMatchingGuard) -> this
+
 # Pattern matching utilities
 isMatchPattern = (p) -> p instanceof Base or p.isNodeClass
 

    throw "match failed" unless node instanceof pattern.constructor
    for attr in pattern.children.concat pattern.matchedAttributes
      matchNode(pattern[attr], node[attr], match)

  else if underscore.isArray(pattern)
    throw "match failed" unless underscore.isArray(node)

        node.front = true
        fragments = node.compileToFragments o
        if @exportAll then node.match [  # add assignment in here
          Class, Code, new Assign(any, any).when((a)->a.isCodeDef()), () =>
            fragments.unshift @makeCode "export "
        ]
        unless node.isStatement o
