From d3dea512c9b5d77e1e977b5d12a65f37602777f9 Mon Sep 17 00:00:00 2001 From: Ian Price Date: Wed, 16 Aug 2017 21:30:28 +0100 Subject: [PATCH] Separate public / private module lookups * module/language/js-il/runtime.js: (scm_public_variable, scm_module_public_interface, module_public_interface_var, scm_post_boot_init_modules): Implement Public Variable Lookup (scm_private_lookup, scm_private_variable): Implement Private Lookup --- module/language/js-il/runtime.js | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/module/language/js-il/runtime.js b/module/language/js-il/runtime.js index aa38b0a70..299a0d3fb 100644 --- a/module/language/js-il/runtime.js +++ b/module/language/js-il/runtime.js @@ -445,18 +445,34 @@ function scm_public_variable(module_name, name) { // scm_misc_error ("public-lookup", "Module named ~s does not exist", // scm_list_1 (module_name)); - // iface = scm_module_public_interface (mod); + var iface = scm_module_public_interface (mod); // if (scm_is_false (iface)) // scm_misc_error ("public-lookup", "Module ~s has no public interface", // scm_list_1 (mod)); - return scm_module_variable (mod, name); + return scm_module_variable (iface, name); +} + +var module_public_interface_var; + +function scm_module_public_interface (module) { + return scheme.call(module_public_interface_var.x, module); } function scm_private_lookup(module_name, sym) { // FIXME: scm_private_variable + miscerror if not bound - return scm_public_lookup(module_name, sym); + return scm_private_variable(module_name, sym); +} + +function scm_private_variable (module_name, name) { + var mod = scheme.call(resolve_module_var.x, module_name, k_ensure, scheme.FALSE); + + // if (scm_is_false (mod)) + // scm_misc_error ("private-lookup", "Module named ~s does not exist", + // scm_list_1 (module_name)); + + return scm_module_variable (mod, name); } scheme.primitives["current-module"] = scm_current_module; @@ -1335,6 +1351,7 @@ function scm_post_boot_init_modules() { the_root_module = scm_lookup (new scheme.Symbol("the-root-module")); k_ensure = new scheme.Keyword("ensure"); resolve_module_var = scm_lookup (new scheme.Symbol("resolve-module")); + module_public_interface_var = scm_lookup (new scheme.Symbol("module-public-interface")); } // Stubs