forked from alibaba/lowcode-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScope.ts
More file actions
28 lines (24 loc) · 818 Bytes
/
Scope.ts
File metadata and controls
28 lines (24 loc) · 818 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import { IScope } from '../types/core';
import { IScopeBindings, ScopeBindings } from './ScopeBindings';
export class Scope implements IScope {
/**
* 创建根部 Scope,根据需要被上溯的作用域链决定是否开启新的
*/
static createRootScope(): IScope {
return new Scope();
}
bindings?: IScopeBindings;
constructor(public readonly parent: IScope | null = null) {
this.bindings = undefined;
}
createSubScope(ownIdentifiers: string[]): IScope {
const originalScopeBindings = this.bindings;
const newScopeBindings = new ScopeBindings(originalScopeBindings);
ownIdentifiers.forEach((identifier) => {
newScopeBindings.addBinding(identifier);
});
const newScope = new Scope(this);
newScope.bindings = newScopeBindings;
return newScope;
}
}