• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

polserver / polserver / 25873939716

14 May 2026 05:08PM UTC coverage: 60.903% (-0.005%) from 60.908%
25873939716

push

github

web-flow
Support vs2026 (#882)

* test vs26 image

* regenerate cached 3rd party libs

* update boost

* cppdap fix?

* update other caches

* disable simd for uuids? gcov build fails...

* switch back to default windows image

* updated actions

44601 of 73233 relevant lines covered (60.9%)

507811.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

17.65
/pol-core/bscript/tkn_strm.cpp
1
/** @file
2
 *
3
 * @par History
4
 */
5

6

7
#include <sstream>
8
#include <stddef.h>
9

10
#include "objmembers.h"
11
#include "objmethods.h"
12
#include "token.h"
13
#include "tokens.h"
14

15

16
namespace Pol::Bscript
17
{
18
void Token::printOn( std::ostream& os ) const
264✔
19
{
20
  switch ( id )
264✔
21
  {
22
  case TOK_LONG:
60✔
23
    os << lval << "L";
60✔
24
    break;
60✔
25
  case TOK_DOUBLE:
×
26
    os << dval << "LF";
×
27
    break;
×
28
  case TOK_BOOL:
×
29
    os << fmt::format( "{} (boolean)", static_cast<bool>( lval ) );
×
30
    break;
×
31
  case TOK_IDENT:
×
32
    os << token;
×
33
    break;
×
34
  case INS_ADDMEMBER2:
×
35
    os << "addmember(" << token << ")";
×
36
    break;
×
37
  case INS_ADDMEMBER_ASSIGN:
×
38
    os << "addmember-assign(" << token << ")";
×
39
    break;
×
40
  case TOK_STRING:
9✔
41
    os << '\"' << token << '\"';
9✔
42
    break;
9✔
43
  case TOK_LOCALVAR:
43✔
44
    os << "local #" << lval;
43✔
45
    if ( !token.empty() )
43✔
46
      os << " (" << token << ")";
×
47
    break;
43✔
48
  case TOK_GLOBALVAR:
12✔
49
    os << "global #" << lval;
12✔
50
    if ( !token.empty() )
12✔
51
      os << " (" << token << ")";
×
52
    break;
12✔
53

54
  case TOK_ERROR:
4✔
55
    os << "error";
4✔
56
    break;
4✔
57
  case TOK_DICTIONARY:
×
58
    os << "dictionary";
×
59
    break;
×
60

61
  case TOK_MULT:
×
62
    os << "*";
×
63
    break;
×
64
  case TOK_DIV:
×
65
    os << "/";
×
66
    break;
×
67
  case TOK_ADD:
×
68
    os << "+";
×
69
    break;
×
70

71
  case TOK_INSERTINTO:
×
72
    os << "init{}";
×
73
    break;
×
74
  case TOK_SUBTRACT:
×
75
    os << "-";
×
76
    break;
×
77
  case TOK_PLUSEQUAL:
×
78
    os << "+=";
×
79
    break;
×
80
  case TOK_MINUSEQUAL:
×
81
    os << "-=";
×
82
    break;
×
83
  case TOK_TIMESEQUAL:
×
84
    os << "*=";
×
85
    break;
×
86
  case TOK_DIVIDEEQUAL:
×
87
    os << "/=";
×
88
    break;
×
89
  case TOK_MODULUSEQUAL:
×
90
    os << "%=";
×
91
    break;
×
92

93
  case TOK_ASSIGN:
5✔
94
    os << ":=";
5✔
95
    break;
5✔
96
  case INS_ASSIGN_LOCALVAR:
3✔
97
    os << "local" << lval;
3✔
98
    if ( !token.empty() )
3✔
99
      os << " (" << token << ")";
×
100
    os << " := ";
3✔
101
    break;
3✔
102
  case INS_ASSIGN_GLOBALVAR:
×
103
    os << "global" << lval;
×
104
    if ( !token.empty() )
×
105
      os << " (" << token << ")";
×
106
    os << " := ";
×
107
    break;
×
108
  case INS_ASSIGN_CONSUME:
×
109
    os << ":= #";
×
110
    break;
×
111
  case INS_SUBSCRIPT_ASSIGN_CONSUME:
×
112
    os << "[] := (" << lval << ") #";
×
113
    break;
×
114
  case INS_SUBSCRIPT_ASSIGN:
×
115
    os << "[] := (" << lval << ")";
×
116
    break;
×
117
  case TOK_LESSTHAN:
×
118
    os << "<";
×
119
    break;
×
120
  case TOK_LESSEQ:
×
121
    os << "<=";
×
122
    break;
×
123
  case TOK_GRTHAN:
8✔
124
    os << ">";
8✔
125
    break;
8✔
126
  case TOK_GREQ:
×
127
    os << ">=";
×
128
    break;
×
129
  case TOK_EQUAL1:
×
130
    os << "=";
×
131
    break;
×
132
  case TOK_EQUAL:
4✔
133
    os << "==";
4✔
134
    break;
4✔
135
  case TOK_NEQ:
7✔
136
    os << "<>";
7✔
137
    break;
7✔
138
  case TOK_AND:
7✔
139
    os << "&&";
7✔
140
    break;
7✔
141
  case TOK_OR:
×
142
    os << "||";
×
143
    break;
×
144
  case TOK_ARRAY_SUBSCRIPT:
×
145
    os << "[] " << lval;
×
146
    break;
×
147
  case INS_MULTISUBSCRIPT:
9✔
148
    os << "[";
9✔
149
    for ( int i = 1; i < lval; ++i )
18✔
150
      os << ",";
9✔
151
    os << "]";
9✔
152
    break;
9✔
153
  case INS_MULTISUBSCRIPT_ASSIGN:
×
154
    os << "[";
×
155
    for ( int i = 1; i < lval; ++i )
×
156
      os << ",";
×
157
    os << "] :=";
×
158
    break;
×
159
  case TOK_ADDMEMBER:
×
160
    os << ".+";
×
161
    break;
×
162
  case TOK_DELMEMBER:
×
163
    os << ".-";
×
164
    break;
×
165
  case TOK_CHKMEMBER:
×
166
    os << ".?";
×
167
    break;
×
168
  case TOK_MEMBER:
×
169
    os << ".";
×
170
    break;
×
171
  case INS_GET_MEMBER:
×
172
    os << "get member '" << token << "'";
×
173
    break;
×
174
  case INS_SET_MEMBER:
×
175
    os << "set member '" << token << "'";
×
176
    break;
×
177
  case INS_SET_MEMBER_CONSUME:
×
178
    os << "set member '" << token << "' #";
×
179
    break;
×
180
  case INS_GET_MEMBER_ID:
14✔
181
    os << "get member id '" << getObjMember( lval )->code << "' (" << lval << ")";
14✔
182
    break;
14✔
183
  case INS_SET_MEMBER_ID:
×
184
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")";
×
185
    break;
×
186
  case INS_SET_MEMBER_ID_CONSUME:
×
187
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ") #";
×
188
    break;
×
189
  case INS_SET_MEMBER_ID_CONSUME_PLUSEQUAL:
×
190
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")  += #";
×
191
    break;
×
192
  case INS_SET_MEMBER_ID_CONSUME_MINUSEQUAL:
×
193
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")  -= #";
×
194
    break;
×
195
  case INS_SET_MEMBER_ID_CONSUME_TIMESEQUAL:
×
196
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")  *= #";
×
197
    break;
×
198
  case INS_SET_MEMBER_ID_CONSUME_DIVIDEEQUAL:
×
199
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")  /= #";
×
200
    break;
×
201
  case INS_SET_MEMBER_ID_CONSUME_MODULUSEQUAL:
×
202
    os << "set member id '" << getObjMember( lval )->code << "' (" << lval << ")  %= #";
×
203
    break;
×
204

205
  case INS_CALL_METHOD_ID:
14✔
206
    os << "Call Method id " << getObjMethod( lval )->code << " (#" << lval << ", "
14✔
207
       << static_cast<int>( type ) << " params)";
14✔
208
    break;
14✔
209
  case TOK_IN:
×
210
    os << "in";
×
211
    break;
×
212
  case INS_DICTIONARY_ADDMEMBER:
×
213
    os << "add dictionary member";
×
214
    break;
×
215

216
  case TOK_UNPLUS:
×
217
    os << "unary +";
×
218
    break;
×
219
  case TOK_UNMINUS:
×
220
    os << "unary -";
×
221
    break;
×
222
  case TOK_LOG_NOT:
×
223
    os << "!";
×
224
    break;
×
225
  case TOK_CONSUMER:
16✔
226
    os << "#";
16✔
227
    break;
16✔
228
  case TOK_REFTO:
×
229
    os << "refto";
×
230
    break;
×
231
  case TOK_UNUSED:
×
232
    os << "unused";
×
233
    break;
×
234
  case TOK_BITAND:
×
235
    os << "&";
×
236
    break;
×
237
  case TOK_BITOR:
×
238
    os << "|";
×
239
    break;
×
240
  case TOK_BSRIGHT:
×
241
    os << ">>";
×
242
    break;
×
243
  case TOK_BSLEFT:
×
244
    os << "<<";
×
245
    break;
×
246
  case TOK_BITXOR:
×
247
    os << "^";
×
248
    break;
×
249
  case TOK_BITWISE_NOT:
×
250
    os << "~";
×
251
    break;
×
252
  case TOK_MODULUS:
×
253
    os << "%";
×
254
    break;
×
255

256
  case INS_INITFOREACH:
6✔
257
    os << "initforeach @" << lval;
6✔
258
    break;
6✔
259
  case INS_STEPFOREACH:
3✔
260
    os << "stepforeach @" << lval;
3✔
261
    break;
3✔
262
  case INS_CASEJMP:
×
263
    os << "casejmp";
×
264
    break;
×
265
  case INS_INITFOR:
4✔
266
    os << "initfor @" << lval;
4✔
267
    break;
4✔
268
  case INS_NEXTFOR:
2✔
269
    os << "nextfor @" << lval;
2✔
270
    break;
2✔
271

272
  case TOK_TERM:
×
273
    os << "Terminator";
×
274
    break;
×
275

276
  case TOK_LPAREN:
×
277
    os << "(";
×
278
    break;
×
279
  case TOK_RPAREN:
×
280
    os << ")";
×
281
    break;
×
282
  case TOK_LBRACKET:
×
283
    os << "[";
×
284
    break;
×
285
  case TOK_RBRACKET:
×
286
    os << "]";
×
287
    break;
×
288
  case TOK_LBRACE:
×
289
    os << "{";
×
290
    break;
×
291
  case TOK_RBRACE:
×
292
    os << "}";
×
293
    break;
×
294

295
  case RSV_JMPIFTRUE:
×
296
    os << "if true goto " << lval;
×
297
    break;
×
298
  case RSV_JMPIFFALSE:
8✔
299
    os << "if false goto " << lval;
8✔
300

301
    break;
8✔
302
  case RSV_ST_IF:
×
303
    os << "if";
×
304
    break;
×
305
  case RSV_GOTO:
6✔
306
    os << "goto " << lval;
6✔
307
    break;
6✔
308
  case RSV_GOSUB:
×
309
    os << "gosub" << lval;
×
310
    break;
×
311
  case RSV_EXIT:
×
312
    os << "exit";
×
313
    break;
×
314
  case RSV_RETURN:
×
315
    os << "return";
×
316
    break;
×
317
  case RSV_LOCAL:
5✔
318
    os << "decl local #" << lval;
5✔
319
    break;
5✔
320
  case RSV_GLOBAL:
×
321
    os << "decl global #" << lval;
×
322
    break;
×
323
  case RSV_VAR:
×
324
    os << "var";
×
325
    break;
×
326
  case RSV_CONST:
×
327
    os << "const";
×
328
    break;
×
329
  case RSV_FUNCTION:
×
330
    os << "function";
×
331
    break;
×
332
  case RSV_ENDFUNCTION:
×
333
    os << "endfunction";
×
334
    break;
×
335
  case RSV_DO:
×
336
    os << "do";
×
337
    break;
×
338
  case RSV_DOWHILE:
×
339
    os << "dowhile";
×
340
    break;
×
341
  case RSV_WHILE:
×
342
    os << "while";
×
343
    break;
×
344
  case RSV_ENDWHILE:
×
345
    os << "endwhile";
×
346
    break;
×
347
  case RSV_REPEAT:
×
348
    os << "repeat";
×
349
    break;
×
350
  case RSV_UNTIL:
×
351
    os << "until";
×
352
    break;
×
353
  case RSV_FOR:
×
354
    os << "for";
×
355
    break;
×
356
  case RSV_ENDFOR:
×
357
    os << "endfor";
×
358
    break;
×
359
  case RSV_FOREACH:
×
360
    os << "foreach";
×
361
    break;
×
362
  case RSV_ENDFOREACH:
×
363
    os << "endforeach";
×
364
    break;
×
365
  case INS_DECLARE_ARRAY:
×
366
    os << "declare array";
×
367
    break;
×
368
  case TOK_ARRAY:
×
369
    os << "array";
×
370
    break;
×
371
  case TOK_STRUCT:
×
372
    os << "struct";
×
373
    break;
×
374
  case TOK_CLASSINST:
×
375
    os << "class instance #" << lval;
×
376
    break;
×
377
  case INS_UNINIT:
×
378
    os << "uninit";
×
379
    break;
×
380
  case RSV_USE_MODULE:
×
381
    os << "use module";
×
382
    break;
×
383
  case RSV_INCLUDE_FILE:
×
384
    os << "include file";
×
385
    break;
×
386

387
  case CTRL_LABEL:
×
388
    os << token << ":";
×
389
    break;
×
390

391
  case TOK_COMMA:
×
392
    os << "','";
×
393
    break;
×
394
  case TOK_SEMICOLON:
×
395
    os << "';'";
×
396
    break;
×
397

398
  case CTRL_STATEMENTBEGIN:
×
399
    os << "[" << ( !token.empty() ? token : "--source not available--" ) << "]";
×
400
    break;
×
401
  case CTRL_PROGEND:
×
402
    os << "progend";
×
403
    break;
×
404
  case CTRL_MAKELOCAL:
×
405
    os << "makelocal";
×
406
    break;
×
407
  case CTRL_JSR_USERFUNC:
×
408
    os << "jmp userfunc @" << lval;
×
409
    break;
×
410
  case INS_CHECK_MRO:
×
411
    os << "check mro (this at offset " << lval << ")";
×
412
    break;
×
413
  case INS_POP_PARAM_BYREF:
×
414
    os << "pop param byref '" << token << "'";
×
415
    break;
×
416
  case INS_POP_PARAM:
×
417
    os << "pop param '" << token << "'";
×
418
    break;
×
419
  case INS_GET_ARG:
×
420
    os << "get arg '" << token << "'";
×
421
    break;
×
422
  case CTRL_LEAVE_BLOCK:
7✔
423
    os << "leave block(" << lval << ")";
7✔
424
    break;
7✔
425

426
  case INS_CALL_METHOD:
×
427
    os << "Call Method " << token << " (" << lval << " params)";
×
428
    break;
×
429
  case TOK_USERFUNC:
×
430
    os << "User Function " << ( !token.empty() ? token : "--function name not available--" );
×
431
    break;
×
432
  case TOK_FUNCREF:
×
433
    os << "Function Ref " << ( !token.empty() ? token : "--function name not available--" ) << "@"
×
434
       << lval;
×
435
    break;
×
436
  case TOK_UNPLUSPLUS:
×
437
    os << "unary ++";
×
438
    break;
×
439
  case TOK_UNMINUSMINUS:
×
440
    os << "unary --";
×
441
    break;
×
442
  case TOK_UNPLUSPLUS_POST:
×
443
    os << "unary ++ post";
×
444
    break;
×
445
  case TOK_UNMINUSMINUS_POST:
×
446
    os << "unary -- post";
×
447
    break;
×
448
  case INS_SET_MEMBER_ID_UNPLUSPLUS:
×
449
    os << "set member id '" << getObjMember( lval )->code << "' unary ++";
×
450
    break;
×
451
  case INS_SET_MEMBER_ID_UNMINUSMINUS:
×
452
    os << "set member id '" << getObjMember( lval )->code << "' unary --";
×
453
    break;
×
454
  case INS_SET_MEMBER_ID_UNPLUSPLUS_POST:
×
455
    os << "set member id '" << getObjMember( lval )->code << "' unary ++ post";
×
456
    break;
×
457
  case INS_SET_MEMBER_ID_UNMINUSMINUS_POST:
×
458
    os << "set member id '" << getObjMember( lval )->code << "' unary -- post";
×
459
    break;
×
460
  case INS_SKIPIFTRUE_ELSE_CONSUME:
×
461
    os << "peek at top of stack; skip " << lval << " instructions if true, otherwise consume it";
×
462
    break;
×
463
  case RSV_COLON:
×
464
    os << "':'";
×
465
    break;
×
466
  case RSV_PROGRAM:
×
467
    os << "program";
×
468
    break;
×
469
  case RSV_ENDPROGRAM:
×
470
    os << "endprogram";
×
471
    break;
×
472
  case RSV_ENUM:
×
473
    os << "enum";
×
474
    break;
×
475
  case RSV_ENDENUM:
×
476
    os << "endenum";
×
477
    break;
×
478
  case RSV_ELVIS:
×
479
    os << "?: (elvis)";
×
480
    break;
×
481
  case TOK_INTERPOLATE_STRING:
×
482
    os << "interpolate string " << "(" << lval << "parts)";
×
483
    break;
×
484
  case TOK_FORMAT_EXPRESSION:
×
485
    os << "format expression";
×
486
    break;
×
487

488
  case INS_UNPACK_SEQUENCE:
×
489
  {
490
    int rest_index = lval > 0x7F ? ( ( lval >> 7 ) & 0x7F ) : -1;
×
491
    os << fmt::format( "unpack sequence ({} elements, rest index {})", lval & 0x7F, rest_index );
×
492
    break;
×
493
  }
494
  case INS_UNPACK_INDICES:
×
495
  {
496
    int rest_index = lval > 0x7F ? ( ( lval >> 7 ) & 0x7F ) : -1;
×
497
    os << fmt::format( "unpack indices ({} elements, rest index {})", lval & 0x7F, rest_index );
×
498
    break;
×
499
  }
500
  case INS_TAKE_GLOBAL:
×
501
    os << "take global #" << lval;
×
502
    break;
×
503
  case INS_TAKE_LOCAL:
×
504
    os << "take local #" << lval;
×
505
    break;
×
506

507
  case TOK_FUNC:
8✔
508
  {
509
    os << "Func(" << (int)module << "," << lval << "): ";
8✔
510
    if ( !token.empty() )
8✔
511
      os << token;
8✔
512
    else
513
      os << "<unknown>";
×
514
    return;
8✔
515
  }
516

517
  case TOK_SPREAD:
×
518
    os << ( lval ? "spread-into" : "create-spread" );
×
519
    break;
×
520

521
  case INS_LOGICAL_JUMP:
×
522
    os << fmt::format( "logical jump if {} to {}", type != TYP_LOGICAL_JUMP_FALSE, lval );
×
523
    break;
×
524
  case INS_LOGICAL_CONVERT:
×
525
    os << "logical convert";
×
526
    break;
×
527

528
  case TOK_REGEXP:
×
529
    os << "create-regular-expression";
×
530
    break;
×
531

532
  default:
×
533
    os << "Unknown Token: (" << int( id ) << "," << int( type );
×
534
    if ( !token.empty() )
×
535
      os << ",'" << token << "'";
×
536
    os << ")";
×
537
    break;
×
538
  }
539
}
540

541
std::ostream& operator<<( std::ostream& os, const Token& tok )
264✔
542
{
543
  tok.printOn( os );
264✔
544
  return os;
264✔
545
}
546
}  // namespace Pol::Bscript
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc