From bd5249fc6b25c026e9793b9b749e5dbd7d4f8856 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Deuc=D0=B5?= <shurd@sasktel.net>
Date: Tue, 2 Mar 2021 01:04:06 -0500
Subject: [PATCH] Add put() and reInit() support for object/object array types.

Apparently, I've never needed this before.
---
 exec/load/recordfile.js | 26 ++++++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

diff --git a/exec/load/recordfile.js b/exec/load/recordfile.js
index 5219526914..e9e4728c40 100644
--- a/exec/load/recordfile.js
+++ b/exec/load/recordfile.js
@@ -344,9 +344,27 @@ RecordFileRecord.prototype.put = function(keeplocked)
 			{}		// Forever
 	}
 
-	for(i=0; i<this.parent.fields.length; i += 1) {
-		this.parent.writeField(this[this.parent.fields[i].prop], this.parent.fields[i].type, eval(this.parent.fields[i].def.toSource()).valueOf());
+	function put_object(obj, def, rf) {
+		var i;
+		var j;
+
+		for (i = 0; i < def.length; i += 1) {
+			if (typeof def[i].type === 'object') {
+				if (typeof def[i].type.array !== undefined) {
+					for (j = 0; j < def[i].type.array; j++)
+						put_object(obj[def[i].prop][j], def[i].type.recordDef, rf);
+				}
+				else {
+					put_object(obj[def[i].prop], def[i].type.recordDef, rf);
+				}
+			}
+			else {
+				rf.writeField(obj[def[i].prop], def[i].type, eval(def[i].def.toSource()).valueOf());
+			}
+		}
 	}
+
+	put_object(this, this.parent.fields, this.parent);
 	this.parent.file.flush();
 
 	if (!keeplocked) {
@@ -370,8 +388,8 @@ RecordFileRecord.prototype.reInit = function()
 		for(i=0; i<def.length; i += 1) {
 			if (typeof def[i].type === 'object') {
 				if (def[i].type.array !== undefined) {
-					this[def[i].prop] = [];
-					for (j = 0; i < def[i].type.array; j++) {
+					obj[def[i].prop] = [];
+					for (j = 0; j < def[i].type.array; j++) {
 						obj[def[i].prop][j] = {};
 						doinit(obj[def[i].prop][j], def[i].type.recordDef);
 					}
-- 
GitLab