4
4
"use strict" ;
5
5
6
6
var EMPTY = { } ;
7
- var NO_EFFECT = function ( ) { } ;
8
7
9
8
function MutableQueue ( ) {
10
9
this . head = null ;
@@ -115,24 +114,22 @@ function deleteCell (cell) {
115
114
cell . prev = null ;
116
115
}
117
116
118
- function AVar ( ) {
117
+ function AVar ( value ) {
119
118
this . draining = false ;
120
119
this . error = null ;
121
- this . value = EMPTY ;
120
+ this . value = value ;
122
121
this . takes = new MutableQueue ( ) ;
123
122
this . reads = new MutableQueue ( ) ;
124
123
this . puts = new MutableQueue ( ) ;
125
124
}
126
125
127
126
exports . makeEmptyVar = function ( ) {
128
- return new AVar ( ) ;
127
+ return new AVar ( EMPTY ) ;
129
128
} ;
130
129
131
130
exports . makeVar = function ( value ) {
132
131
return function ( ) {
133
- var avar = new AVar ( ) ;
134
- avar . value = value ;
135
- return avar ;
132
+ return new AVar ( value ) ;
136
133
} ;
137
134
} ;
138
135
@@ -148,10 +145,6 @@ exports._killVar = function (left, right, avar, error) {
148
145
149
146
exports . _putVar = function ( left , right , avar , value , cb ) {
150
147
return function ( ) {
151
- if ( avar . error !== null ) {
152
- runEff ( cb ( left ( avar . error ) ) ) ;
153
- return NO_EFFECT ;
154
- }
155
148
var cell = putLast ( avar . puts , { cb : cb , value : value } ) ;
156
149
drainVar ( left , right , avar ) ;
157
150
return function ( ) {
@@ -162,10 +155,6 @@ exports._putVar = function (left, right, avar, value, cb) {
162
155
163
156
exports . _takeVar = function ( left , right , avar , cb ) {
164
157
return function ( ) {
165
- if ( avar . error !== null ) {
166
- runEff ( cb ( left ( avar . error ) ) ) ;
167
- return NO_EFFECT ;
168
- }
169
158
var cell = putLast ( avar . takes , cb ) ;
170
159
drainVar ( left , right , avar ) ;
171
160
return function ( ) {
@@ -176,10 +165,6 @@ exports._takeVar = function (left, right, avar, cb) {
176
165
177
166
exports . _readVar = function ( left , right , avar , cb ) {
178
167
return function ( ) {
179
- if ( avar . error !== null ) {
180
- runEff ( cb ( left ( avar . error ) ) ) ;
181
- return NO_EFFECT ;
182
- }
183
168
var cell = putLast ( avar . reads , cb ) ;
184
169
drainVar ( left , right , avar ) ;
185
170
return function ( ) {
0 commit comments