From fd012eb7fd3cab8174e3cb2eda802a2ad3930d67 Mon Sep 17 00:00:00 2001 From: Markus Pfeiffer Date: Wed, 19 Sep 2018 17:03:25 +0100 Subject: [PATCH] Updates --- lib/syntaxtree.gi | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/lib/syntaxtree.gi b/lib/syntaxtree.gi index bf04c522f0..41b3a06795 100644 --- a/lib/syntaxtree.gi +++ b/lib/syntaxtree.gi @@ -54,22 +54,30 @@ function() # More generically (and prettier) maybe # using method selection and overloading + (or *), 'or'? DOC := rec( NIL := rec( type := "NIL" ) - , CONCAT := function(d1, d2) return rec( type := ":<>", d1 := d1, d2 := d2 ); end - , NEST := function(i,x) return rec(type := "NEST", indent := i, doc := x ); end - , TEXT := function(s) return rec(type := "TEXT", text := s); end + , CONCAT := {d1,d2} -> rec( type := ":<>" + , d1 := d1 + , d2 := d2 ) + , NEST := {i,x} -> rec( type := "NEST" + , indent := i + , doc := x ) + , TEXT := s -> rec( type := "TEXT" + , text := s ) , LINE := rec( type := "LINE" ) - , ALT := function(d1, d2) return rec( type := ":<|>", d1 := d1, d2 := d2 ); end ); + , ALT := {d1,d2} -> rec( type := ":<|>" + , d1 := d1 + , d2 := d2 ) ); Doc := rec( Nil := rec( type := "Nil" ) - , Text := function(s, d) return rec( type := "Text", text := s, doc := d ); end - , Line := function(i, d) return rec( type := "Line", indent := i, doc := d ); end ); + , Text := {s,d} -> rec( type := "Text" + , text := s + , doc := d ) + , Line := {i,d} -> rec( type := "Line" + , indent := i + , doc := d ) ); - - group := function(doc) - return rec( type := ":<|>" - , d1 := flatten(doc) - , d2 := doc ); - end; + group := doc -> rec( type := ":<|>" + , d1 := flatten(doc) + , d2 := doc ); flatten := function(doc) if doc.type = "NIL" then @@ -333,7 +341,8 @@ function() ,")") , DOC.TEXT("local") , folddoc(DOC.CONCAT, List(expr.locnams, DOC.TEXT)) - , folddoc(DOC.CONCAT, List(expr.stats, compiler.compile)) ]; + , folddoc(DOC.CONCAT, compiler.compile(expr.stats)) + ]; end; compiler.T_OR := compile_record;