From 1b962fc7206bf3134b2a2097d3db0ee6d2863c47 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 14 Aug 2008 12:53:29 +0000 Subject: * @-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}. --- src/libexpr/expr-to-xml.cc | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/libexpr/expr-to-xml.cc') diff --git a/src/libexpr/expr-to-xml.cc b/src/libexpr/expr-to-xml.cc index 5aa537b200ee..6ec906356a68 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 -- cgit 1.4.1