about summary refs log tree commit diff
path: root/src/libexpr/expr-to-xml.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2008-08-14T12·53+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2008-08-14T12·53+0000
commit1b962fc7206bf3134b2a2097d3db0ee6d2863c47 (patch)
tree9e259b7df5f0fa3ca748fa9b9035f2dd35b1a44d /src/libexpr/expr-to-xml.cc
parente8188384129bda7c8cdd5e17023ab05047551e6e (diff)
* @-patterns as in Haskell. For instance, in a function definition
    f = args @ {x, y, z}: ...;

  `args' refers to the argument as a whole, which is further
  pattern-matched against the attribute set pattern {x, y, z}.

Diffstat (limited to 'src/libexpr/expr-to-xml.cc')
-rw-r--r--src/libexpr/expr-to-xml.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/libexpr/expr-to-xml.cc b/src/libexpr/expr-to-xml.cc
index 5aa537b200..6ec906356a 100644
--- a/src/libexpr/expr-to-xml.cc
+++ b/src/libexpr/expr-to-xml.cc
@@ -40,10 +40,11 @@ static void showAttrs(const ATermMap & attrs, XMLWriter & doc,
 }
 
 
-static void printPatternAsXML(Pattern pat, XMLWriter & doc, PathSet & context)
+static void printPatternAsXML(Pattern pat, XMLWriter & doc)
 {
     ATerm name;
     ATermList formals;
+    Pattern pat1, pat2;
     if (matchVarPat(pat, name))
         doc.writeEmptyElement("varpat", singletonAttrs("name", aterm2String(name)));
     else if (matchAttrsPat(pat, formals)) {
@@ -54,6 +55,11 @@ static void printPatternAsXML(Pattern pat, XMLWriter & doc, PathSet & context)
             doc.writeEmptyElement("attr", singletonAttrs("name", aterm2String(name)));
         }
     }
+    else if (matchAtPat(pat, pat1, pat2)) {
+        XMLOpenElement _(doc, "at");
+        printPatternAsXML(pat1, doc);
+        printPatternAsXML(pat2, doc);
+    }
 }
 
 
@@ -128,7 +134,7 @@ static void printTermAsXML(Expr e, XMLWriter & doc, PathSet & context,
 
     else if (matchFunction(e, pat, body, pos)) {
         XMLOpenElement _(doc, "function");
-        printPatternAsXML(pat, doc, context);
+        printPatternAsXML(pat, doc);
     }
 
     else