provides an abstraction for code scopes, which are delimited by curly braces { }


Scope := type {
	<Maybe<Scope>> parent;
	<Array<Scope>> children;
	<SourceCode> sourceCode;
	<Array<Constant>> constants;
	<Array<Assertion>> assertions;
	<Array<Statement>> statements;
	<Array<Variable>> variables; //includes captures
	<ExecutionContext> instantiator;
	<Bool> isPure;
	<Bool> isAtomic;
	<Bool> isReentrant; //this scope may be the target of a long jump
	<FunctionModel> model;
	<SideEffectSet> sideEffects;
	<Scope → Bool> is_descendent_of;
	<<Void → Void> → Bool> can_execute; //based on symbol binding

copyright © Brent Lewis 2017