From b7022e94d2ab62d522b0a7c2886cce3afaff6872 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 14 May 2000 14:05:10 +0000 Subject: vastly improved awk based code generator now handles recursive function definitions, unions etc it is sufficient for some basic types like UNISTR2 and BUFFER5 to be defined in the *.struct file and used successfully this generator uses templates (in *.tpl files) for all code generation, allowing easy replacement of the backend functions (This used to be commit 14ded82dc92ae6eff7639351f391a33b9cc31c0d) --- source3/aparser/templates/fn_end.tpl | 33 ++++++++++++++++++++++++++ source3/aparser/templates/fn_start.tpl | 9 +++++++ source3/aparser/templates/harness_start.tpl | 7 ++++++ source3/aparser/templates/ifptr_end.tpl | 1 + source3/aparser/templates/ifptr_start.tpl | 1 + source3/aparser/templates/module_end.tpl | 3 +++ source3/aparser/templates/module_start.tpl | 5 ++++ source3/aparser/templates/prs_.align.tpl | 1 + source3/aparser/templates/prs_array.tpl | 7 ++++++ source3/aparser/templates/prs_case.tpl | 1 + source3/aparser/templates/prs_case_end.tpl | 1 + source3/aparser/templates/prs_pointer.tpl | 1 + source3/aparser/templates/prs_struct.tpl | 1 + source3/aparser/templates/prs_struct_alloc.tpl | 1 + source3/aparser/templates/prs_uint16.tpl | 1 + source3/aparser/templates/prs_uint32.tpl | 1 + source3/aparser/templates/union_end.tpl | 5 ++++ source3/aparser/templates/union_start.tpl | 1 + 18 files changed, 80 insertions(+) create mode 100644 source3/aparser/templates/fn_end.tpl create mode 100644 source3/aparser/templates/fn_start.tpl create mode 100644 source3/aparser/templates/harness_start.tpl create mode 100644 source3/aparser/templates/ifptr_end.tpl create mode 100644 source3/aparser/templates/ifptr_start.tpl create mode 100644 source3/aparser/templates/module_end.tpl create mode 100644 source3/aparser/templates/module_start.tpl create mode 100644 source3/aparser/templates/prs_.align.tpl create mode 100644 source3/aparser/templates/prs_array.tpl create mode 100644 source3/aparser/templates/prs_case.tpl create mode 100644 source3/aparser/templates/prs_case_end.tpl create mode 100644 source3/aparser/templates/prs_pointer.tpl create mode 100644 source3/aparser/templates/prs_struct.tpl create mode 100644 source3/aparser/templates/prs_struct_alloc.tpl create mode 100644 source3/aparser/templates/prs_uint16.tpl create mode 100644 source3/aparser/templates/prs_uint32.tpl create mode 100644 source3/aparser/templates/union_end.tpl create mode 100644 source3/aparser/templates/union_start.tpl (limited to 'source3/aparser/templates') diff --git a/source3/aparser/templates/fn_end.tpl b/source3/aparser/templates/fn_end.tpl new file mode 100644 index 0000000000..b5c36fff35 --- /dev/null +++ b/source3/aparser/templates/fn_end.tpl @@ -0,0 +1,33 @@ + + return True; + +fail: + ZERO_STRUCTP(il); + return False; +} /* @FUNCNAME@ */ + +/******************************************************************* +parse a @STRUCTNAME@ structure +********************************************************************/ +BOOL @FUNCNAME@_alloc(char *desc, @STRUCTNAME@ **q_u, + prs_struct *ps, int depth) +{ + @STRUCTNAME@ *il; + BOOL ret; + + if (!UNMARSHALLING(ps)) return False; + + il=(@STRUCTNAME@ *)malloc(sizeof(@STRUCTNAME@)); + if (il == NULL) return False; + ZERO_STRUCTP(il); + + ret = @FUNCNAME@(desc, il, ps, depth); + if (!ret) { + free(il); + return False; + } + *q_u = il; + return True; +} + + diff --git a/source3/aparser/templates/fn_start.tpl b/source3/aparser/templates/fn_start.tpl new file mode 100644 index 0000000000..deecc670e3 --- /dev/null +++ b/source3/aparser/templates/fn_start.tpl @@ -0,0 +1,9 @@ +/******************************************************************* +parse a @STRUCTNAME@ structure +********************************************************************/ +BOOL @FUNCNAME@(char *desc, @STRUCTNAME@ *il, + prs_struct *ps, int depth) +{ + prs_debug(ps, depth, desc, "@FUNCNAME@"); + depth++; + diff --git a/source3/aparser/templates/harness_start.tpl b/source3/aparser/templates/harness_start.tpl new file mode 100644 index 0000000000..375b110536 --- /dev/null +++ b/source3/aparser/templates/harness_start.tpl @@ -0,0 +1,7 @@ +#define TEST_STRUCT @STRUCTNAME@ +#define TEST_NAME "@TEST@" +#define TEST_FUNC @FUNCNAME@_alloc + + +#include "prs_@MODULE@.h" +#include "prs_@MODULE@.c" diff --git a/source3/aparser/templates/ifptr_end.tpl b/source3/aparser/templates/ifptr_end.tpl new file mode 100644 index 0000000000..990635cf45 --- /dev/null +++ b/source3/aparser/templates/ifptr_end.tpl @@ -0,0 +1 @@ + } diff --git a/source3/aparser/templates/ifptr_start.tpl b/source3/aparser/templates/ifptr_start.tpl new file mode 100644 index 0000000000..ffffe49e91 --- /dev/null +++ b/source3/aparser/templates/ifptr_start.tpl @@ -0,0 +1 @@ + if (il->@ELEM@) { diff --git a/source3/aparser/templates/module_end.tpl b/source3/aparser/templates/module_end.tpl new file mode 100644 index 0000000000..661f7edb95 --- /dev/null +++ b/source3/aparser/templates/module_end.tpl @@ -0,0 +1,3 @@ + + +/* end auto-generated structure parsers for @MODULE@ */ diff --git a/source3/aparser/templates/module_start.tpl b/source3/aparser/templates/module_start.tpl new file mode 100644 index 0000000000..fef9d296ff --- /dev/null +++ b/source3/aparser/templates/module_start.tpl @@ -0,0 +1,5 @@ +/* auto-generated structure parsers for @MODULE@ + generated by aparser +*/ + + diff --git a/source3/aparser/templates/prs_.align.tpl b/source3/aparser/templates/prs_.align.tpl new file mode 100644 index 0000000000..d5b2ceb082 --- /dev/null +++ b/source3/aparser/templates/prs_.align.tpl @@ -0,0 +1 @@ + if(!prs_align(ps)) goto fail; diff --git a/source3/aparser/templates/prs_array.tpl b/source3/aparser/templates/prs_array.tpl new file mode 100644 index 0000000000..ca707148db --- /dev/null +++ b/source3/aparser/templates/prs_array.tpl @@ -0,0 +1,7 @@ + if (il->@ARRAYLEN@ > 0) { + il->@ELEM@ = (@TYPE@ *)malloc(sizeof(@TYPE@)*il->@ARRAYLEN@); + if (!il->@ELEM@) goto fail; + if (!prs_@TYPE@s(True, "@ELEM@", ps, depth+1, il->@ELEM@, il->@ARRAYLEN@)) goto fail; + } else { + il->@ELEM@ = NULL; + } diff --git a/source3/aparser/templates/prs_case.tpl b/source3/aparser/templates/prs_case.tpl new file mode 100644 index 0000000000..2f81c35828 --- /dev/null +++ b/source3/aparser/templates/prs_case.tpl @@ -0,0 +1 @@ + case @VALUE@: diff --git a/source3/aparser/templates/prs_case_end.tpl b/source3/aparser/templates/prs_case_end.tpl new file mode 100644 index 0000000000..eb540f7be8 --- /dev/null +++ b/source3/aparser/templates/prs_case_end.tpl @@ -0,0 +1 @@ + break; diff --git a/source3/aparser/templates/prs_pointer.tpl b/source3/aparser/templates/prs_pointer.tpl new file mode 100644 index 0000000000..f268c259bc --- /dev/null +++ b/source3/aparser/templates/prs_pointer.tpl @@ -0,0 +1 @@ + if (!prs_pointer("@ELEM@_ptr", ps, depth+1, (void **)&il->@ELEM@)) goto fail; diff --git a/source3/aparser/templates/prs_struct.tpl b/source3/aparser/templates/prs_struct.tpl new file mode 100644 index 0000000000..ab8246db8e --- /dev/null +++ b/source3/aparser/templates/prs_struct.tpl @@ -0,0 +1 @@ + if (!@MODULE@_io_@TYPE@("@ELEM@", &il->@ELEM@, ps, depth+1)) goto fail; diff --git a/source3/aparser/templates/prs_struct_alloc.tpl b/source3/aparser/templates/prs_struct_alloc.tpl new file mode 100644 index 0000000000..9eae5c92fc --- /dev/null +++ b/source3/aparser/templates/prs_struct_alloc.tpl @@ -0,0 +1 @@ + if (!@MODULE@_io_@TYPE@_alloc("@ELEM@", &il->@ELEM@, ps, depth+1)) goto fail; diff --git a/source3/aparser/templates/prs_uint16.tpl b/source3/aparser/templates/prs_uint16.tpl new file mode 100644 index 0000000000..36b8298fb2 --- /dev/null +++ b/source3/aparser/templates/prs_uint16.tpl @@ -0,0 +1 @@ + if (!prs_uint16("@ELEM@", ps, depth+1, &il->@ELEM@)) goto fail; diff --git a/source3/aparser/templates/prs_uint32.tpl b/source3/aparser/templates/prs_uint32.tpl new file mode 100644 index 0000000000..2e2fd638e4 --- /dev/null +++ b/source3/aparser/templates/prs_uint32.tpl @@ -0,0 +1 @@ + if (!prs_uint32("@ELEM@", ps, depth+1, &il->@ELEM@)) goto fail; diff --git a/source3/aparser/templates/union_end.tpl b/source3/aparser/templates/union_end.tpl new file mode 100644 index 0000000000..511adbcf60 --- /dev/null +++ b/source3/aparser/templates/union_end.tpl @@ -0,0 +1,5 @@ + default: + DEBUG(5,("No handler for case %d in @FUNCNAME@\n", + (int)il->@SWITCH@)); + goto fail; + } diff --git a/source3/aparser/templates/union_start.tpl b/source3/aparser/templates/union_start.tpl new file mode 100644 index 0000000000..aa052be697 --- /dev/null +++ b/source3/aparser/templates/union_start.tpl @@ -0,0 +1 @@ + switch (il->@SWITCH@) { -- cgit