This commit is contained in:
36
node_modules/@mapbox/mapbox-gl-style-spec/expression/scope.js
generated
vendored
Normal file
36
node_modules/@mapbox/mapbox-gl-style-spec/expression/scope.js
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
// @flow
|
||||
|
||||
import type {Expression} from './expression.js';
|
||||
|
||||
/**
|
||||
* Tracks `let` bindings during expression parsing.
|
||||
* @private
|
||||
*/
|
||||
class Scope {
|
||||
parent: ?Scope;
|
||||
bindings: {[_: string]: Expression};
|
||||
constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {
|
||||
this.parent = parent;
|
||||
this.bindings = {};
|
||||
for (const [name, expression] of bindings) {
|
||||
this.bindings[name] = expression;
|
||||
}
|
||||
}
|
||||
|
||||
concat(bindings: Array<[string, Expression]>): Scope {
|
||||
return new Scope(this, bindings);
|
||||
}
|
||||
|
||||
get(name: string): Expression {
|
||||
if (this.bindings[name]) { return this.bindings[name]; }
|
||||
if (this.parent) { return this.parent.get(name); }
|
||||
throw new Error(`${name} not found in scope.`);
|
||||
}
|
||||
|
||||
has(name: string): boolean {
|
||||
if (this.bindings[name]) return true;
|
||||
return this.parent ? this.parent.has(name) : false;
|
||||
}
|
||||
}
|
||||
|
||||
export default Scope;
|
||||
Reference in New Issue
Block a user