@@ -30,7 +30,7 @@ uint16_t* lastReexportEnd;
30
30
// -> source
31
31
// -> analysis starts after source
32
32
uint32_t parse_error ;
33
- bool has_error = false ;
33
+ uint32_t error = 0 ;
34
34
uint32_t sourceLen ;
35
35
36
36
uint16_t templateStack_ [STACK_DEPTH ];
@@ -45,7 +45,7 @@ void (*addUnsafeGetter)(const uint16_t*, const uint16_t*);
45
45
void (* clearReexports )();
46
46
47
47
// Note: parsing is based on the _assumption_ that the source is already valid
48
- bool parseCJS (uint16_t * _source , uint32_t _sourceLen , void (* _addExport )(const uint16_t * , const uint16_t * ), void (* _addReexport )(const uint16_t * , const uint16_t * ), void (* _addUnsafeGetter )(const uint16_t * , const uint16_t * ), void (* _clearReexports )()) {
48
+ uint32_t parseCJS (uint16_t * _source , uint32_t _sourceLen , void (* _addExport )(const uint16_t * , const uint16_t * ), void (* _addReexport )(const uint16_t * , const uint16_t * ), void (* _addUnsafeGetter )(const uint16_t * , const uint16_t * ), void (* _clearReexports )()) {
49
49
source = _source ;
50
50
sourceLen = _sourceLen ;
51
51
if (_addExport )
@@ -61,7 +61,7 @@ bool parseCJS (uint16_t* _source, uint32_t _sourceLen, void (*_addExport)(const
61
61
lastTokenPos = (uint16_t * )EMPTY_CHAR ;
62
62
lastSlashWasDivision = false;
63
63
parse_error = 0 ;
64
- has_error = false ;
64
+ error = 0 ;
65
65
templateStack = & templateStack_ [0 ];
66
66
openTokenPosStack = & openTokenPosStack_ [0 ];
67
67
starExportStack = & starExportStack_ [0 ];
@@ -74,7 +74,7 @@ bool parseCJS (uint16_t* _source, uint32_t _sourceLen, void (*_addExport)(const
74
74
// Handle #!
75
75
if (* source == '#' && * (source + 1 ) == '!' ) {
76
76
if (sourceLen == 2 )
77
- return true ;
77
+ return 0 ;
78
78
pos += 2 ;
79
79
while (pos ++ < end ) {
80
80
ch = * pos ;
@@ -155,7 +155,7 @@ bool parseCJS (uint16_t* _source, uint32_t _sourceLen, void (*_addExport)(const
155
155
break ;
156
156
case ')' :
157
157
if (openTokenDepth == 0 )
158
- return syntaxError (), false ;
158
+ return syntaxError (8 ), error ;
159
159
openTokenDepth -- ;
160
160
break ;
161
161
case '{' :
@@ -165,14 +165,14 @@ bool parseCJS (uint16_t* _source, uint32_t _sourceLen, void (*_addExport)(const
165
165
break ;
166
166
case '}' :
167
167
if (openTokenDepth == 0 )
168
- return syntaxError (), false;
168
+ return syntaxError (2 ), false;
169
169
if (openTokenDepth -- == templateDepth ) {
170
170
templateDepth = templateStack [-- templateStackDepth ];
171
171
templateString ();
172
172
}
173
173
else {
174
174
if (templateDepth != UINT16_MAX && openTokenDepth < templateDepth )
175
- return syntaxError (), false ;
175
+ return syntaxError (3 ), error ;
176
176
}
177
177
break ;
178
178
case '<' :
@@ -219,18 +219,18 @@ bool parseCJS (uint16_t* _source, uint32_t _sourceLen, void (*_addExport)(const
219
219
}
220
220
case '`' :
221
221
if (templateDepth == UINT16_MAX - 1 )
222
- return syntaxError (), false ;
222
+ return syntaxError (4 ), error ;
223
223
templateString ();
224
224
break ;
225
225
}
226
226
lastTokenPos = pos ;
227
227
}
228
228
229
- if (templateDepth != UINT16_MAX || openTokenDepth || has_error )
230
- return false ;
229
+ if (templateDepth != UINT16_MAX || openTokenDepth || error )
230
+ return error ;
231
231
232
232
// success
233
- return true ;
233
+ return 0 ;
234
234
}
235
235
236
236
void tryBacktrackAddStarExportBinding (uint16_t * bPos ) {
@@ -1154,7 +1154,7 @@ void throwIfImportStatement () {
1154
1154
return ;
1155
1155
// import.meta
1156
1156
case '.' :
1157
- syntaxError ();
1157
+ syntaxError (5 );
1158
1158
return ;
1159
1159
1160
1160
default :
@@ -1171,7 +1171,7 @@ void throwIfImportStatement () {
1171
1171
return ;
1172
1172
}
1173
1173
// import statements are a syntax error in CommonJS
1174
- syntaxError ();
1174
+ syntaxError (6 );
1175
1175
}
1176
1176
}
1177
1177
@@ -1181,7 +1181,7 @@ void throwIfExportStatement () {
1181
1181
uint16_t ch = commentWhitespace ();
1182
1182
if (pos == curPos && !isPunctuator (ch ))
1183
1183
return ;
1184
- syntaxError ();
1184
+ syntaxError (7 );
1185
1185
}
1186
1186
1187
1187
uint16_t commentWhitespace () {
@@ -1218,7 +1218,7 @@ void templateString () {
1218
1218
if (ch == '\\' )
1219
1219
pos ++ ;
1220
1220
}
1221
- syntaxError ();
1221
+ syntaxError (8 );
1222
1222
}
1223
1223
1224
1224
void blockComment () {
@@ -1253,7 +1253,7 @@ void stringLiteral (uint16_t quote) {
1253
1253
else if (isBr (ch ))
1254
1254
break ;
1255
1255
}
1256
- syntaxError ();
1256
+ syntaxError (9 );
1257
1257
}
1258
1258
1259
1259
uint16_t regexCharacterClass () {
@@ -1266,7 +1266,7 @@ uint16_t regexCharacterClass () {
1266
1266
else if (ch == '\n' || ch == '\r' )
1267
1267
break ;
1268
1268
}
1269
- syntaxError ();
1269
+ syntaxError (10 );
1270
1270
return '\0' ;
1271
1271
}
1272
1272
@@ -1282,7 +1282,7 @@ void regularExpression () {
1282
1282
else if (ch == '\n' || ch == '\r' )
1283
1283
break ;
1284
1284
}
1285
- syntaxError ();
1285
+ syntaxError (11 );
1286
1286
}
1287
1287
1288
1288
uint16_t readToWsOrPunctuator (uint16_t ch ) {
@@ -1503,14 +1503,14 @@ bool isExpressionTerminator (uint16_t* curPos) {
1503
1503
return false;
1504
1504
}
1505
1505
1506
- void bail (uint32_t error ) {
1507
- has_error = true ;
1508
- parse_error = error ;
1506
+ void bail (uint32_t err ) {
1507
+ error = 1 ;
1508
+ parse_error = err ;
1509
1509
pos = end + 1 ;
1510
1510
}
1511
1511
1512
- void syntaxError () {
1513
- has_error = true ;
1512
+ void syntaxError (uint32_t code ) {
1513
+ if ( error == 0 ) error = code ;
1514
1514
parse_error = pos - source ;
1515
1515
pos = end + 1 ;
1516
1516
}
0 commit comments