summaryrefslogtreecommitdiff
path: root/internal/generated/nqc.raku
diff options
context:
space:
mode:
Diffstat (limited to 'internal/generated/nqc.raku')
-rw-r--r--internal/generated/nqc.raku18
1 files changed, 17 insertions, 1 deletions
diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku
index 040617f..f358e2a 100644
--- a/internal/generated/nqc.raku
+++ b/internal/generated/nqc.raku
@@ -34,7 +34,23 @@ class NQCToGoActions {
method constant($/) { make 'const ' ~ $<identifier> ~ ' = ' ~ $<number> ~ "\n" }
method struct($/) {
- make 'type ' ~ $<identifier>.made ~ " struct \{\n\t" ~ $<member>.map(*.made).join("\n\t") ~ "\n\}"
+ make 'type ' ~ $<identifier>.made ~ " struct \{\n\t"
+ ~ $<member>.map(*.made).join("\n\t")
+ ~ "\n\}\n\n"
+ ~ self!struct-go-string-method($/);
+ }
+
+ # Generate String() method on the Go struct, for pretty printing.
+ method !struct-go-string-method($/) returns Str {
+ my Str $self-ref = $<identifier>.lc.substr(0,1);
+ my Str @format = $<member>.map({ $_.<identifier>.made ~ ':%v' });
+ my Str @args = $<member>.map({ "$self-ref." ~ $_.<identifier>.made });
+
+ return qq:to/END/;
+ func ({$self-ref} {$<identifier>}) String() string \{
+ \treturn fmt.Sprintf("{@format.join(' ')}", {@args.join(', ')})
+ \}
+ END
}
method member($/) { make $<identifier>.made ~ ' ' ~ ($<arraysize> // '') ~ $<type>.made }