Environment class
Environment of bindings.
class Environment {
/** The owning environemnt. */
final Environment _owner;
/** The internal environment bindings. */
final Map<Name, dynamic> _bindings;
/** Constructor for the nested environment. */
Environment([this._owner]) : _bindings = new Map();
/** Constructor for a nested environment. */
Environment create() => new Environment(this);
/** Return the binding for [key]. */
dynamic operator [](Name key) {
if (_bindings.containsKey(key)) {
return _bindings[key];
} else if (_owner != null) {
return _owner[key];
} else {
return _invalidBinding(key);
}
}
/** Updates the binding for [key] with a [value]. */
void operator []=(Name key, dynamic value) {
if (_bindings.containsKey(key)) {
_bindings[key] = value;
} else if (_owner != null) {
_owner[key] = value;
} else {
_invalidBinding(key);
}
}
/** Defines a new binding from [key] to [value]. */
dynamic define(Name key, dynamic value) {
return _bindings[key] = value;
}
/** Returns the keys of the bindings. */
Iterable<Name> get keys => _bindings.keys;
/** Returns the parent of the bindings. */
Environment get owner => _owner;
/** Called when a missing binding is accessed. */
dynamic _invalidBinding(Name key) {
throw new ArgumentError('Unknown binding for $key');
}
}
Constructors
new Environment([Environment _owner]) #
Constructor for the nested environment.
Environment([this._owner]) : _bindings = new Map();
Properties
final Iterable<Name> keys #
Returns the keys of the bindings.
Iterable<Name> get keys => _bindings.keys;
final Environment owner #
Returns the parent of the bindings.
Environment get owner => _owner;
Operators
Methods
Environment create() #
Constructor for a nested environment.
Environment create() => new Environment(this);