simple-squiggle

A restricted subset of Squiggle
Log | Files | Refs | README

scope.js (880B)


      1 import { createEmptyMap, assign } from './map.js';
      2 /**
      3  * Create a new scope which can access the parent scope,
      4  * but does not affect it when written. This is suitable for variable definitions
      5  * within a block node, or function definition.
      6  *
      7  * If parent scope has a createSubScope method, it delegates to that. Otherwise,
      8  * creates an empty map, and copies the parent scope to it, adding in
      9  * the remaining `args`.
     10  *
     11  * @param {Map} parentScope
     12  * @param  {...any} args
     13  * @returns {Map}
     14  */
     15 
     16 export function createSubScope(parentScope) {
     17   for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
     18     args[_key - 1] = arguments[_key];
     19   }
     20 
     21   if (typeof parentScope.createSubScope === 'function') {
     22     return assign(parentScope.createSubScope(), ...args);
     23   }
     24 
     25   return assign(createEmptyMap(), parentScope, ...args);
     26 }