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 }