Skip to content

Commit d650148

Browse files
committed
converting to Effect.Uncurried, using exception catching, naming
anonymous foreign functions for stack traces
1 parent 97a49c6 commit d650148

File tree

2 files changed

+79
-84
lines changed

2 files changed

+79
-84
lines changed

src/Data/ArrayBuffer/DataView.js

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,31 @@
33
// module Data.ArrayBuffer.DataView
44

55

6-
exports.whole = function(b) {
7-
return new DataView(b);
8-
}
9-
10-
exports.sliceImpl = function(just, nothing, s, l, b) {
11-
return ((s + l)>>>0) <= b.byteLength ? just(new DataView(b, s, l)) : nothing;
12-
}
13-
14-
exports.buffer = function(v) {
15-
return v.buffer;
16-
}
17-
18-
exports.byteOffset = function(v) {
19-
return v.byteOffset;
20-
}
21-
22-
exports.byteLength = function(v) {
23-
return v.byteLength;
24-
}
25-
26-
exports.getterImpl = function(just, nothing, s, l, e, v, o) {
27-
return function() {
28-
return ((o + l)>>>0) <= v.byteLength? just(v[s].call(v,o,e)) : nothing;
29-
};
30-
}
31-
32-
exports.setter = function(s) {
33-
return function(e) {
34-
return function(v) {
35-
var f = v[s];
36-
return function(n) {
37-
return function(o) {
38-
return function() {
39-
f.call(v,o,n,e);
40-
};
41-
};
42-
};
43-
};
44-
};
45-
}
6+
exports.whole = function whole (b) {
7+
return new DataView(b);
8+
};
9+
10+
exports.partImpl = function partImpl (b,i,j) {
11+
return new DataView(b,i,j);
12+
};
13+
14+
exports.buffer = function buffer (v) {
15+
return v.buffer;
16+
};
17+
18+
exports.byteOffset = function byteOffset (v) {
19+
return v.byteOffset;
20+
};
21+
22+
exports.byteLength = function byteLength (v) {
23+
return v.byteLength;
24+
};
25+
26+
exports.getterImpl = function getterImpl (s, l, e, v, o) {
27+
return v[s].call(v,o,e);
28+
};
29+
30+
exports.setterImpl = function setterImpl (s,e,v,n,o) {
31+
var f = v[s];
32+
f.call(v,o,n,e);
33+
};

src/Data/ArrayBuffer/DataView.purs

Lines changed: 51 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,47 @@
1-
module Data.ArrayBuffer.DataView( whole
2-
, slice
3-
, buffer
4-
, byteOffset
5-
, byteLength
6-
, Getter()
7-
, getInt8
8-
, getInt16be
9-
, getInt32be
10-
, getUint8
11-
, getUint16be
12-
, getUint32be
13-
, getFloat32be
14-
, getFloat64be
15-
, getInt16le
16-
, getInt32le
17-
, getUint16le
18-
, getUint32le
19-
, getFloat32le
20-
, getFloat64le
21-
, Setter()
22-
, setInt8
23-
, setInt16be
24-
, setInt32be
25-
, setUint8
26-
, setUint16be
27-
, setUint32be
28-
, setFloat32be
29-
, setFloat64be
30-
, setInt16le
31-
, setInt32le
32-
, setUint16le
33-
, setUint32le
34-
, setFloat32le
35-
, setFloat64le
36-
) where
1+
module Data.ArrayBuffer.DataView
2+
( whole
3+
, part
4+
, buffer
5+
, byteOffset
6+
, byteLength
7+
, Getter()
8+
, getInt8
9+
, getInt16be
10+
, getInt32be
11+
, getUint8
12+
, getUint16be
13+
, getUint32be
14+
, getFloat32be
15+
, getFloat64be
16+
, getInt16le
17+
, getInt32le
18+
, getUint16le
19+
, getUint32le
20+
, getFloat32le
21+
, getFloat64le
22+
, Setter()
23+
, setInt8
24+
, setInt16be
25+
, setInt32be
26+
, setUint8
27+
, setUint16be
28+
, setUint32be
29+
, setFloat32be
30+
, setFloat64be
31+
, setInt16le
32+
, setInt32le
33+
, setUint16le
34+
, setUint32le
35+
, setFloat32le
36+
, setFloat64le
37+
) where
3738

3839
import Prelude
3940
import Data.ArrayBuffer.Types (ByteOffset, DataView, ByteLength, ArrayBuffer)
40-
import Data.Function.Uncurried (Fn5, Fn7, runFn5, runFn7)
4141
import Data.Maybe (Maybe(..))
4242
import Effect (Effect)
43+
import Effect.Exception (catchException)
44+
import Effect.Uncurried (EffectFn5, EffectFn3, runEffectFn5, runEffectFn3)
4345
import Data.UInt (UInt)
4446

4547
-- | Type for all fetching functions.
@@ -51,11 +53,11 @@ type Setter r = DataView -> r -> ByteOffset -> Effect Unit
5153
-- | View mapping the whole `ArrayBuffer`.
5254
foreign import whole :: ArrayBuffer -> DataView
5355

54-
foreign import sliceImpl :: Fn5 (DataView -> Maybe DataView) (Maybe DataView) ByteOffset ByteLength ArrayBuffer (Maybe DataView)
56+
foreign import partImpl :: EffectFn3 ArrayBuffer ByteOffset ByteLength DataView
5557

5658
-- | View mapping a region of the `ArrayBuffer`.
57-
slice :: ByteOffset -> ByteLength -> ArrayBuffer -> (Maybe DataView)
58-
slice = runFn5 sliceImpl Just Nothing
59+
part :: ArrayBuffer -> ByteOffset -> ByteLength -> Effect DataView
60+
part = runEffectFn3 partImpl
5961

6062
-- | `ArrayBuffer` being mapped by the view.
6163
foreign import buffer :: DataView -> ArrayBuffer
@@ -69,13 +71,18 @@ foreign import byteLength :: DataView -> ByteLength
6971

7072
type Endianness = Boolean
7173

72-
foreign import getterImpl :: forall r. Fn7 (r -> Maybe r) (Maybe r) String ByteLength Endianness DataView ByteOffset (Effect (Maybe r))
74+
foreign import getterImpl :: forall r. EffectFn5 String ByteLength Endianness DataView ByteOffset r
7375

74-
getter :: forall r. String -> ByteLength -> Endianness -> DataView -> ByteOffset -> Effect (Maybe r)
75-
getter = runFn7 getterImpl Just Nothing
76+
getter :: forall r. String -> ByteLength -> Endianness -> Getter r
77+
getter p l e d o =
78+
let x = runEffectFn5 getterImpl p l e d o
79+
in catchException (const (pure Nothing)) (Just <$> x)
7680

81+
foreign import setterImpl :: forall r. EffectFn5 String Endianness DataView r ByteOffset Unit
7782

78-
foreign import setter :: forall r. String -> Endianness -> DataView -> r -> ByteOffset -> Effect Unit
83+
setter :: forall r. String -> Endianness -> Setter r
84+
setter p e d x o =
85+
runEffectFn5 setterImpl p e d x o
7986

8087

8188
-- | Fetch int8 value at a certain index in a `DataView`.

0 commit comments

Comments
 (0)