[A68-RECUTILS][COMMITTED] hash field names

Jose E. Marchesi jemarch@gnu.org
Sun Apr 6 11:50:53 GMT 2025


---
 src/Makefile.am    | 1 +
 src/rec-field.a68  | 6 ++++--
 src/rec-parser.a68 | 7 ++++---
 src/rec-writer.a68 | 4 ++--
 src/rec.a68        | 1 +
 5 files changed, 12 insertions(+), 7 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index b9ed737..ffe99d4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -16,5 +16,6 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 EXTRA_DIST = rec.a68 rec-comment.a68 rec-db.a68 rec-field.a68 \
+             rec-field-name.a68 \
              rec-loc.a68 rec-mset.a68 rec-record.a68 rec-rset.a68 \
              rec-writer.a68 rec-parser.a68 utils.a68
diff --git a/src/rec-field.a68 b/src/rec-field.a68
index 4c4a760..1ff4c17 100644
--- a/src/rec-field.a68
+++ b/src/rec-field.a68
@@ -17,7 +17,9 @@
   <http://www.gnu.org/licenses/>.
 #
 
-MODE REC_FIELD = STRUCT (REC_LOC loc, STRING name, value);
+MODE REC_FIELD = STRUCT (REC_LOC loc,
+                         REF REC_FIELD_NAME name,
+                         STRING value);
 
 # Nihils.  #
 
@@ -26,7 +28,7 @@ REF REC_RSET rec no field = NIL;
 # Create and return a new field, with default location and the given
   name and value.  #
 
-PROC rec field new = (STRING n, v) REF REC_FIELD:
+PROC rec field new = (REF REC_FIELD_NAME n, STRING v) REF REC_FIELD:
    HEAP REC_FIELD := (rec loc unknown, n, v);
 
 # Determine whether the given string is a correct field name.
diff --git a/src/rec-parser.a68 b/src/rec-parser.a68
index a0b42be..a80428e 100644
--- a/src/rec-parser.a68
+++ b/src/rec-parser.a68
@@ -350,7 +350,8 @@ BEGIN STRING str;
       char OF loc := char pos OF parser;
 
       # Parse the field name and field value.  #
-      REF STRING field name, field value;
+      REF REC_FIELD_NAME field name;
+      REF STRING field value;
       res := rec parse field name (parser, field name);
       IF res
       THEN res := rec parse field value (parser, field value);
@@ -378,7 +379,7 @@ END;
 #
 
 PROC rec parse field name = (REF REC_PARSER parser,
-                             REF REF STRING field name) BOOL:
+                             REF REF REC_FIELD_NAME field name) BOOL:
 BEGIN STRING str;
       CHAR c := rec parser getc (parser);
       BOOL res := TRUE;
@@ -418,7 +419,7 @@ BEGIN STRING str;
                done)
       FI;
 
-      field name := HEAP STRING := str;
+      field name := rec get field name (str);
 done:
       res
 END;
diff --git a/src/rec-writer.a68 b/src/rec-writer.a68
index 28f38fe..08df482 100644
--- a/src/rec-writer.a68
+++ b/src/rec-writer.a68
@@ -146,10 +146,10 @@ BEGIN
       PROC write field = (REC_FIELD field) VOID:
          IF mode OF writer = rec writer sexp
          THEN out ("(field " + itoa (char OF loc OF field) + " "
-                   + """" + name OF field + """" + " "
+                   + """" + name OF name OF field + """" + " "
                    + """" + value OF field + """" + ")")
          ELSE IF NOT skip field names OF writer
-              THEN out (name OF field + ": ") FI;
+              THEN out (name OF name OF field + ": ") FI;
               out with line breaks (value OF field, "+ ")
          FI;
 
diff --git a/src/rec.a68 b/src/rec.a68
index 8c2a5fc..87c3e49 100644
--- a/src/rec.a68
+++ b/src/rec.a68
@@ -21,6 +21,7 @@ PR include "rec-db.a68" PR
 PR include "rec-rset.a68" PR
 PR include "rec-record.a68" PR
 PR include "rec-field.a68" PR
+PR include "rec-field-name.a68" PR
 PR include "rec-comment.a68" PR
 PR include "rec-loc.a68" PR
 PR include "rec-mset.a68" PR
-- 
2.30.2



More information about the Algol68 mailing list