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