From 70c25b1290cc1bf5f07fe432272e7b550f205201 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Thu, 3 Aug 2017 00:22:03 +0100 Subject: [PATCH] Make child structs applicable. * module/language/js-il/runtime.js (scheme.Struct): When certain flags are set, child structs should be marked as applicable. --- module/language/js-il/runtime.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module/language/js-il/runtime.js b/module/language/js-il/runtime.js index 72e0a0a3b..8e0480eda 100644 --- a/module/language/js-il/runtime.js +++ b/module/language/js-il/runtime.js @@ -439,6 +439,22 @@ scheme.Struct = function (vtable, nfields) { this.vtable = vtable; this.fields = []; + if (this.vtable && this.vtable.hasOwnProperty('children_applicable_vtables')) { + this.is_vtable = true; + this.children_applicable = true; + } + + if (this.vtable && this.vtable.hasOwnProperty('children_applicable')) { + this.is_applicable = true; + this.fun = function (self, cont) { + var scm_applicable_struct_index_procedure = 0; + var clos = self.fields[scm_applicable_struct_index_procedure]; + return clos.fun(clos, cont); + }; + } else { + this.fun = function () { throw "not applicable"; }; + } + // FIXME: worth doing? for(var i = 0; i < nfields; i++){ this.fields[i]=scheme.UNDEFINED;