[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