Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Side by Side Diff: packages/petitparser/lib/src/lisp/environment.dart

Issue 1400473008: Roll Observatory packages and add a roll script (Closed) Base URL: git@github.com:dart-lang/observatory_pub_packages.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 part of lisp; 1 part of petitparser.lisp;
2 2
3 /** 3 /// Environment of bindings.
4 * Environment of bindings.
5 */
6 class Environment { 4 class Environment {
7 5
8 /** The owning environment. */ 6 /// The owning environment.
9 final Environment _owner; 7 final Environment _owner;
10 8
11 /** The internal environment bindings. */ 9 /// The internal environment bindings.
12 final Map<Name, dynamic> _bindings; 10 final Map<Name, dynamic> _bindings;
13 11
14 /** Constructor for the nested environment. */ 12 /// Constructor for the nested environment.
15 Environment([this._owner]) : _bindings = new Map(); 13 Environment([this._owner]) : _bindings = new Map();
16 14
17 /** Constructor for a nested environment. */ 15 /// Constructor for a nested environment.
18 Environment create() => new Environment(this); 16 Environment create() => new Environment(this);
19 17
20 /** Return the binding for [key]. */ 18 /// Return the binding for [key].
21 operator [](Name key) { 19 operator [](Name key) {
22 if (_bindings.containsKey(key)) { 20 if (_bindings.containsKey(key)) {
23 return _bindings[key]; 21 return _bindings[key];
24 } else if (_owner != null) { 22 } else if (_owner != null) {
25 return _owner[key]; 23 return _owner[key];
26 } else { 24 } else {
27 return _invalidBinding(key); 25 return _invalidBinding(key);
28 } 26 }
29 } 27 }
30 28
31 /** Updates the binding for [key] with a [value]. */ 29 /// Updates the binding for [key] with a [value].
32 void operator []=(Name key, value) { 30 void operator []=(Name key, value) {
33 if (_bindings.containsKey(key)) { 31 if (_bindings.containsKey(key)) {
34 _bindings[key] = value; 32 _bindings[key] = value;
35 } else if (_owner != null) { 33 } else if (_owner != null) {
36 _owner[key] = value; 34 _owner[key] = value;
37 } else { 35 } else {
38 _invalidBinding(key); 36 _invalidBinding(key);
39 } 37 }
40 } 38 }
41 39
42 /** Defines a new binding from [key] to [value]. */ 40 /// Defines a new binding from [key] to [value].
43 define(Name key, value) { 41 define(Name key, value) {
44 return _bindings[key] = value; 42 return _bindings[key] = value;
45 } 43 }
46 44
47 /** Returns the keys of the bindings. */ 45 /// Returns the keys of the bindings.
48 Iterable<Name> get keys => _bindings.keys; 46 Iterable<Name> get keys => _bindings.keys;
49 47
50 /** Returns the parent of the bindings. */ 48 /// Returns the parent of the bindings.
51 Environment get owner => _owner; 49 Environment get owner => _owner;
52 50
53 /** Called when a missing binding is accessed. */ 51 /// Called when a missing binding is accessed.
54 _invalidBinding(Name key) { 52 _invalidBinding(Name key) {
55 throw new ArgumentError('Unknown binding for $key'); 53 throw new ArgumentError('Unknown binding for $key');
56 } 54 }
57 } 55 }
OLDNEW
« no previous file with comments | « packages/petitparser/lib/src/lisp/cons.dart ('k') | packages/petitparser/lib/src/lisp/grammar.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698