pacc 6.7.2 → 6.7.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/tokens.mjs +36 -38
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pacc",
3
- "version": "6.7.2",
3
+ "version": "6.7.3",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
package/src/tokens.mjs CHANGED
@@ -56,6 +56,20 @@ export /** @type {Token} */ const DOUBLE_BAR = createToken("||", 30, "infixr");
56
56
  export /** @type {Token} */ const IDENTIFIER = createToken("IDENTIFIER", 0);
57
57
  export /** @type {Token} */ const EOF = createToken("EOF", -1, "eof");
58
58
 
59
+ const keywords = {
60
+ true: [true],
61
+ false: [false]
62
+ };
63
+
64
+ const esc = {
65
+ b: "\b",
66
+ f: "\f",
67
+ n: "\n",
68
+ r: "\r",
69
+ t: "\t",
70
+ v: "\v"
71
+ };
72
+
59
73
  /**
60
74
  * Split property path into tokens
61
75
  * @generator
@@ -65,16 +79,12 @@ export /** @type {Token} */ const EOF = createToken("EOF", -1, "eof");
65
79
  export function* tokens(string) {
66
80
  let state, value, hex, divider, quote;
67
81
 
68
- function maybeKeyword() {
69
- switch (value) {
70
- case "true":
71
- return [true];
72
- case "false":
73
- return [false];
74
- default:
75
- return [IDENTIFIER, value];
76
- }
77
- }
82
+ const keywordOrIdentifier = () => keywords[value] || [IDENTIFIER, value];
83
+ const startString = c => {
84
+ value = "";
85
+ state = "string";
86
+ quote = c;
87
+ };
78
88
 
79
89
  for (const c of string) {
80
90
  switch (state) {
@@ -92,13 +102,6 @@ export function* tokens(string) {
92
102
  state = "string-escaping-hex";
93
103
  hex = "";
94
104
  } else {
95
- const esc = {
96
- b: "\b",
97
- f: "\f",
98
- n: "\n",
99
- r: "\r",
100
- t: "\t"
101
- };
102
105
  value += esc[c] || c;
103
106
  state = "string";
104
107
  }
@@ -109,6 +112,7 @@ export function* tokens(string) {
109
112
  case "\n":
110
113
  case "\r":
111
114
  case "\t":
115
+ case "\v":
112
116
  case " ":
113
117
  switch (state) {
114
118
  case "number":
@@ -121,7 +125,7 @@ export function* tokens(string) {
121
125
  value += c;
122
126
  break;
123
127
  case "identifier":
124
- yield maybeKeyword();
128
+ yield keywordOrIdentifier();
125
129
  value = undefined;
126
130
  state = undefined;
127
131
  break;
@@ -145,9 +149,7 @@ export function* tokens(string) {
145
149
  case "number-fraction":
146
150
  yield [value];
147
151
  case undefined:
148
- value = "";
149
- state = "string";
150
- quote = c;
152
+ startString(c);
151
153
  break;
152
154
  case "string":
153
155
  if (c === quote) {
@@ -158,16 +160,12 @@ export function* tokens(string) {
158
160
  }
159
161
  break;
160
162
  case "identifier":
161
- yield maybeKeyword();
162
- value = "";
163
- state = "string";
164
- quote = c;
163
+ yield keywordOrIdentifier();
164
+ startString(c);
165
165
  break;
166
166
  default:
167
167
  yield lookup[state];
168
- value = "";
169
- state = "string";
170
- quote = c;
168
+ startString(c);
171
169
  }
172
170
  break;
173
171
  case "!":
@@ -197,7 +195,7 @@ export function* tokens(string) {
197
195
  value += c;
198
196
  break;
199
197
  case "identifier":
200
- yield maybeKeyword();
198
+ yield keywordOrIdentifier();
201
199
  state = c;
202
200
  break;
203
201
  default:
@@ -214,13 +212,13 @@ export function* tokens(string) {
214
212
  case undefined:
215
213
  state = c;
216
214
  break;
217
- case "string":
218
- value += c;
219
- break;
220
215
  case "identifier":
221
- yield maybeKeyword();
216
+ yield keywordOrIdentifier();
222
217
  state = c;
223
218
  break;
219
+ case "string":
220
+ value += c;
221
+ break;
224
222
  default:
225
223
  state += c;
226
224
  }
@@ -251,13 +249,13 @@ export function* tokens(string) {
251
249
  case undefined:
252
250
  state = c;
253
251
  break;
254
- case "string":
255
- value += c;
256
- break;
257
252
  case "identifier":
258
- yield maybeKeyword();
253
+ yield keywordOrIdentifier();
259
254
  state = c;
260
255
  break;
256
+ case "string":
257
+ value += c;
258
+ break;
261
259
  default:
262
260
  yield lookup[state];
263
261
  state = c;
@@ -330,7 +328,7 @@ export function* tokens(string) {
330
328
  yield [value];
331
329
  break;
332
330
  case "identifier":
333
- yield maybeKeyword();
331
+ yield keywordOrIdentifier();
334
332
  break;
335
333
  default:
336
334
  yield lookup[state];