From 8e42437d2a0c32ccf2b3084533552cea7ca4ca05 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 21 Feb 2024 01:12:15 +0200 Subject: const types can have own type defs in Go --- internal/generated/nqc.raku | 24 ++++++++++++++++++++---- internal/generated/types/types.go | 11 ++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) (limited to 'internal/generated') diff --git a/internal/generated/nqc.raku b/internal/generated/nqc.raku index a777ba1..ddbd086 100644 --- a/internal/generated/nqc.raku +++ b/internal/generated/nqc.raku @@ -24,14 +24,30 @@ grammar NQC { } class NQCToGoActions { + has Str @.const-types is required; + method TOP($/) { - make "// This file was generated - don't change manually!\n" ~ - "package types\n\n" ~ $.map(*.made).join('') + make "// This file was generated - don't change manually!\n" + ~ "package types\n\n" + ~ @!const-types.map({ "type {self!const-camel-case($_)} int\n" }) + ~ $.map(*.made).join('') } method construct($/) { make $.made // $.made // '' } method statement($/) { make "\n" ~ $.made ~ "\n"; } - method constant($/) { make 'const ' ~ $ ~ ' = ' ~ $ ~ "\n" } + + method constant($/) { + make 'const ' ~ $ ~ "{self!const-type($/)} = " ~ $ ~ "\n" + } + + method !const-type($/) returns Str { + my $suffix = @!const-types.grep({ $.ends-with($_) }).first; + $suffix ?? ' ' ~ self!const-camel-case($suffix) !! '' + } + + method !const-camel-case(Str $const-name) returns Str { + $const-name.lc.split('_').map(*.tc).join('') + } method struct($/) { make 'type ' ~ $.made ~ " struct \{\n\t" @@ -72,4 +88,4 @@ class NQCToGoActions { method identifier($/) { make $/.Str.split('_').map(*.tc).join('') } } -say NQC.parse($*IN.slurp, :actions(NQCToGoActions)).made; +say NQC.parse($*IN.slurp, actions => NQCToGoActions.new(const-types => )).made; diff --git a/internal/generated/types/types.go b/internal/generated/types/types.go index 505b1ca..3460cb3 100644 --- a/internal/generated/types/types.go +++ b/internal/generated/types/types.go @@ -1,12 +1,13 @@ // This file was generated - don't change manually! package types +type OpId int const MAX_FILENAME_LENGTH = 256 -const OPENAT_ENTER_OP_ID = 1 -const OPEN_ENTER_OP_ID = 3 -const CLOSE_ENTER_OP_ID = 5 -const WRITE_ENTER_OP_ID = 7 -const WRITEV_ENTER_OP_ID = 9 +const OPENAT_ENTER_OP_ID OpId = 1 +const OPEN_ENTER_OP_ID OpId = 3 +const CLOSE_ENTER_OP_ID OpId = 5 +const WRITE_ENTER_OP_ID OpId = 7 +const WRITEV_ENTER_OP_ID OpId = 9 type NullEvent struct { OpId uint32 -- cgit v1.2.3