UNPKG

2.92 kBJavaScriptView Raw
1// read-token.js
2
3var token = exports.token = new Array(256);
4
5var format = require("./read-format").format;
6
7init();
8
9function init() {
10 var i;
11
12 // positive fixint -- 0x00 - 0x7f
13 for (i = 0x00; i <= 0x7f; i++) {
14 token[i] = constant(i);
15 }
16
17 // fixmap -- 0x80 - 0x8f
18 for (i = 0x80; i <= 0x8f; i++) {
19 token[i] = fix(i - 0x80, format.map);
20 }
21
22 // fixarray -- 0x90 - 0x9f
23 for (i = 0x90; i <= 0x9f; i++) {
24 token[i] = fix(i - 0x90, format.array);
25 }
26
27 // fixstr -- 0xa0 - 0xbf
28 for (i = 0xa0; i <= 0xbf; i++) {
29 token[i] = fix(i - 0xa0, format.str);
30 }
31
32 // nil -- 0xc0
33 token[0xc0] = constant(null);
34
35 // (never used) -- 0xc1
36 token[0xc1] = null;
37
38 // false -- 0xc2
39 // true -- 0xc3
40 token[0xc2] = constant(false);
41 token[0xc3] = constant(true);
42
43 // bin 8 -- 0xc4
44 // bin 16 -- 0xc5
45 // bin 32 -- 0xc6
46 token[0xc4] = flex(format.uint8, format.bin);
47 token[0xc5] = flex(format.uint16, format.bin);
48 token[0xc6] = flex(format.uint32, format.bin);
49
50 // ext 8 -- 0xc7
51 // ext 16 -- 0xc8
52 // ext 32 -- 0xc9
53 token[0xc7] = flex(format.uint8, format.ext);
54 token[0xc8] = flex(format.uint16, format.ext);
55 token[0xc9] = flex(format.uint32, format.ext);
56
57 // float 32 -- 0xca
58 // float 64 -- 0xcb
59 token[0xca] = format.float32;
60 token[0xcb] = format.float64;
61
62 // uint 8 -- 0xcc
63 // uint 16 -- 0xcd
64 // uint 32 -- 0xce
65 // uint 64 -- 0xcf
66 token[0xcc] = format.uint8;
67 token[0xcd] = format.uint16;
68 token[0xce] = format.uint32;
69 token[0xcf] = format.uint64;
70
71 // int 8 -- 0xd0
72 // int 16 -- 0xd1
73 // int 32 -- 0xd2
74 // int 64 -- 0xd3
75 token[0xd0] = format.int8;
76 token[0xd1] = format.int16;
77 token[0xd2] = format.int32;
78 token[0xd3] = format.int64;
79
80 // fixext 1 -- 0xd4
81 // fixext 2 -- 0xd5
82 // fixext 4 -- 0xd6
83 // fixext 8 -- 0xd7
84 // fixext 16 -- 0xd8
85 token[0xd4] = fix(1, format.ext);
86 token[0xd5] = fix(2, format.ext);
87 token[0xd6] = fix(4, format.ext);
88 token[0xd7] = fix(8, format.ext);
89 token[0xd8] = fix(16, format.ext);
90
91 // str 8 -- 0xd9
92 // str 16 -- 0xda
93 // str 32 -- 0xdb
94 token[0xd9] = flex(format.uint8, format.str);
95 token[0xda] = flex(format.uint16, format.str);
96 token[0xdb] = flex(format.uint32, format.str);
97
98 // array 16 -- 0xdc
99 // array 32 -- 0xdd
100 token[0xdc] = flex(format.uint16, format.array);
101 token[0xdd] = flex(format.uint32, format.array);
102
103 // map 16 -- 0xde
104 // map 32 -- 0xdf
105 token[0xde] = flex(format.uint16, format.map);
106 token[0xdf] = flex(format.uint32, format.map);
107
108 // negative fixint -- 0xe0 - 0xff
109 for (i = 0xe0; i <= 0xff; i++) {
110 token[i] = constant(i - 0x100);
111 }
112}
113
114function constant(value) {
115 return function() {
116 return value;
117 };
118}
119
120function flex(lenFunc, decodeFunc) {
121 return function(decoder) {
122 var len = lenFunc(decoder);
123 return decodeFunc(decoder, len);
124 };
125}
126
127function fix(len, method) {
128 return function(decoder) {
129 return method(decoder, len);
130 };
131}