Coverage Report

Created: 2026-08-14 10:22

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libreoffice/include/formula/opcode.hxx
Line
Count
Source
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
 * This file is part of the LibreOffice project.
4
 *
5
 * This Source Code Form is subject to the terms of the Mozilla Public
6
 * License, v. 2.0. If a copy of the MPL was not distributed with this
7
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
 *
9
 * This file incorporates work covered by the following license notice:
10
 *
11
 *   Licensed to the Apache Software Foundation (ASF) under one or more
12
 *   contributor license agreements. See the NOTICE file distributed
13
 *   with this work for additional information regarding copyright
14
 *   ownership. The ASF licenses this file to you under the Apache
15
 *   License, Version 2.0 (the "License"); you may not use this file
16
 *   except in compliance with the License. You may obtain a copy of
17
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
 */
19
20
#pragma once
21
22
#include <cassert>
23
#include <sstream>
24
25
#include <sal/types.h>
26
27
/* Central definition of OpCodes for spreadsheet functions */
28
29
enum OpCode : sal_uInt16
30
{
31
    // Special commands
32
        ocPush              = 0,
33
        // 1 used to be ocCall, which is now a binary operator
34
        ocStop              = 2,
35
        ocExternal          = 3,
36
        ocName              = 4,
37
        // 5 used to be SC_OPCODE_EXTERNAL_REF
38
    // Jump commands
39
        ocIf                = 6,
40
        ocIfError           = 7,
41
        ocIfNA              = 8,
42
        ocChoose            = 9,
43
        ocLet               = 10,
44
        ocLambda            = 11,
45
    // Parentheses and separators
46
        ocOpen              = 12,
47
        ocClose             = 13,
48
        ocSep               = 14,
49
    // Special OpCodes
50
        ocMissing           = 15,
51
        ocBad               = 16,
52
        ocStringXML         = 17,
53
        ocSpaces            = 18,
54
        ocWhitespace        = 19,
55
        ocMatRef            = 20,
56
    // Access commands
57
    /* additional access operators */
58
        ocDBArea            = 21,
59
        ocTableRef          = 22,
60
        ocMacro             = 23,
61
        ocColRowName        = 24,
62
        ocColRowNameAuto    = 25,
63
    // Percent operator _follows_ value
64
        ocPercentSign       = 26,
65
        ocArrayOpen         = 27,
66
        ocArrayClose        = 28,
67
        ocArrayRowSep       = 29,
68
        ocArrayColSep       = 30, /* some convs use sep != col_sep */
69
        ocTableRefOpen      = 31,
70
        ocTableRefClose     = 32,
71
        ocTableRefItemAll     = 33,
72
        ocTableRefItemHeaders = 34,
73
        ocTableRefItemData    = 35,
74
        ocTableRefItemTotals  = 36,
75
        ocTableRefItemThisRow = 37,
76
        ocStopDiv           = 38,
77
        ocSkip              = 39, /* used to skip raw tokens during string compilation */
78
        ocStringName        = 40, /* special OpCode for locally bound names (LET) */
79
        ocDPFieldName       = 41,
80
    // Error constants
81
        ocStartErrors       = 42,
82
        ocErrNull           = 42,
83
        ocErrDivZero        = 43,
84
        ocErrValue          = 44,
85
        ocErrRef            = 45,
86
        ocErrName           = 46,
87
        ocErrNum            = 47,
88
        ocErrNA             = 48,
89
        ocErrSpill          = 49,
90
        ocStopErrors        = 50,
91
    // Binary operators
92
        ocStartBinaryOperators = 51,
93
        ocAdd               = 51,
94
        ocSub               = 52,
95
        ocMul               = 53,
96
        ocDiv               = 54,
97
        ocAmpersand         = 55,
98
        ocPow               = 56,
99
        ocEqual             = 57,
100
        ocNotEqual          = 58,
101
        ocLess              = 59,
102
        ocGreater           = 60,
103
        ocLessEqual         = 61,
104
        ocGreaterEqual      = 62,
105
        ocAnd               = 63,
106
        ocOr                = 64,
107
        ocIntersect         = 65,
108
        ocUnion             = 66,
109
        ocRange             = 67,
110
        ocCall              = 68,
111
        ocStopBinaryOperators = 69,
112
113
    /* NOTE: binary and unary operators must be in sequence for compiler! */
114
115
    // Unary operators
116
        ocStartUnaryOperators = 70,
117
        ocNegSub            = 70,
118
        // The @ single-value prefix operator (implicit intersection).
119
        ocSingleValue       = 71,
120
        // The # postfix spilled-range operator: A1# expands to the
121
        // spill range of the dynamic-array formula at A1.
122
        ocSpill             = 72,
123
        ocStopUnaryOperators = 73,
124
125
        ocStartFunction     = 75,
126
127
    // Functions with no parameters
128
        ocStartNoParameters = 75,
129
        ocPi                = 75,
130
        ocRandom            = 76,
131
        ocTrue              = 77,
132
        ocFalse             = 78,
133
        ocGetActDate        = 79,
134
        ocGetActTime        = 80,
135
        ocNotAvail          = 81,
136
        ocCurrent           = 82,
137
        ocRandomNV          = 83,
138
        ocStopNoParameters  = 84,
139
    // Functions with one parameter
140
        ocStartOneParameter = 90,
141
        ocDeg               = 90,  /* trigonometric */
142
        ocRad               = 91,
143
        ocSin               = 92,
144
        ocCos               = 93,
145
        ocTan               = 94,
146
        ocCot               = 95,
147
        ocArcSin            = 96,
148
        ocArcCos            = 97,
149
        ocArcTan            = 98,
150
        ocArcCot            = 99,
151
        ocSinHyp            = 100,
152
        ocCosHyp            = 101,
153
        ocTanHyp            = 102,
154
        ocCotHyp            = 103,
155
        ocArcSinHyp         = 104, /* transcendent */
156
        ocArcCosHyp         = 105,
157
        ocArcTanHyp         = 106,
158
        ocArcCotHyp         = 107,
159
        ocCosecant          = 108,
160
        ocSecant            = 109,
161
        ocCosecantHyp       = 110,
162
        ocSecantHyp         = 111,
163
        ocExp               = 112,
164
        ocLn                = 113,
165
        ocSqrt              = 114,
166
        ocFact              = 115,
167
        ocGetYear           = 116, /* date and time */
168
        ocGetMonth          = 117,
169
        ocGetDay            = 118,
170
        ocGetHour           = 119,
171
        ocGetMin            = 120,
172
        ocGetSec            = 121,
173
        ocPlusMinus         = 122, /* miscellaneous */
174
        ocAbs               = 123,
175
        ocInt               = 124,
176
        ocPhi               = 125,
177
        ocGauss             = 126,
178
        ocIsEmpty           = 127, /* obtain type */
179
        ocIsString          = 128,
180
        ocIsNonString       = 129,
181
        ocIsLogical         = 130,
182
        ocType              = 131,
183
        ocIsRef             = 132,
184
        ocIsValue           = 133,
185
        ocIsFormula         = 134,
186
        ocIsNA              = 135,
187
        ocIsErr             = 136,
188
        ocIsError           = 137,
189
        ocIsEven            = 138,
190
        ocIsOdd             = 139,
191
        ocN                 = 140,
192
        ocIsOmitted         = 141,
193
    // String functions
194
        ocGetDateValue      = 142,
195
        ocGetTimeValue      = 143,
196
        ocCode              = 144,
197
        ocTrim              = 145,
198
        ocUpper             = 146,
199
        ocProper            = 147,
200
        ocLower             = 148,
201
        ocLen               = 149,
202
        ocT                 = 150, /* miscellaneous, part 21 */
203
        ocValue             = 151,
204
        ocClean             = 152,
205
        ocChar              = 153,
206
        ocLog10             = 154,
207
        ocEven              = 155,
208
        ocOdd               = 156,
209
        ocStdNormDist       = 157,
210
        ocFisher            = 158,
211
        ocFisherInv         = 159,
212
        ocSNormInv          = 160,
213
        ocGammaLn           = 161,
214
        ocErrorType         = 162,
215
        // 163 was ???
216
        ocFormula           = 164,
217
        ocArabic            = 165,
218
        ocInfo              = 166,
219
        ocBahtText          = 167,
220
        ocJis               = 168,
221
        ocAsc               = 169,
222
        ocUnicode           = 170,
223
        ocUnichar           = 171,
224
        ocGamma             = 172,
225
        ocGammaLn_MS        = 173,
226
        ocErf_MS            = 174,
227
        ocErfc_MS           = 175,
228
        ocErrorType_ODF     = 176,
229
        ocEncodeURL         = 177,
230
        ocIsoWeeknum        = 178,
231
        ocNot               = 179,
232
        ocNeg               = 180,
233
        ocStopOneParameter  = 181,
234
235
    // Functions with more than one parameter
236
        ocStartTwoParameters = 201,
237
        ocArcTan2           = 201,
238
        ocCeil              = 202,
239
        ocFloor             = 203,
240
        ocRound             = 204,
241
        ocRoundUp           = 205,
242
        ocRoundDown         = 206,
243
        ocTrunc             = 207,
244
        ocLog               = 208,
245
        ocPower             = 209,
246
        ocGCD               = 210,
247
        ocLCM               = 211,
248
        ocMod               = 212,
249
        ocSumProduct        = 213,
250
        ocSumSQ             = 214,
251
        ocSumX2MY2          = 215,
252
        ocSumX2DY2          = 216,
253
        ocSumXMY2           = 217,
254
        ocGetDate           = 218,
255
        ocGetTime           = 219,
256
        ocGetDiffDate       = 220,
257
        ocGetDiffDate360    = 221,
258
        ocMin               = 222,
259
        ocMax               = 223,
260
        ocSum               = 224,
261
        ocProduct           = 225,
262
        ocAverage           = 226,
263
        ocCount             = 227,
264
        ocCount2            = 228,
265
        ocNPV               = 229,
266
        ocIRR               = 230,
267
        ocVar               = 231,
268
        ocVarP              = 232,
269
        ocStDev             = 233,
270
        ocStDevP            = 234,
271
        ocB                 = 235,
272
        ocNormDist          = 236,
273
        ocExpDist           = 237,
274
        ocBinomDist         = 238,
275
        ocPoissonDist       = 239,
276
        ocCombin            = 240,
277
        ocCombinA           = 241,
278
        ocPermut            = 242,
279
        ocPermutationA      = 243,
280
        ocPV                = 244,
281
        ocSYD               = 245,
282
        ocDDB               = 246,
283
        ocDB                = 247,
284
        ocVBD               = 248,
285
        ocPDuration         = 249,
286
        ocSLN               = 250,
287
        ocPMT               = 251,
288
        ocColumns           = 252,
289
        ocRows              = 253,
290
        ocColumn            = 254,
291
        ocRow               = 255,
292
        ocRRI               = 256,
293
        ocFV                = 257,
294
        ocNper              = 258,
295
        ocRate              = 259,
296
        ocIpmt              = 260,
297
        ocPpmt              = 261,
298
        ocCumIpmt           = 262,
299
        ocCumPrinc          = 263,
300
        ocEffect            = 264,
301
        ocNominal           = 265,
302
        ocSubTotal          = 266,
303
    // Database functions
304
        ocDBSum             = 267,
305
        ocDBCount           = 268,
306
        ocDBCount2          = 269,
307
        ocDBAverage         = 270,
308
        ocDBGet             = 271,
309
        ocDBMax             = 272,
310
        ocDBMin             = 273,
311
        ocDBProduct         = 274,
312
        ocDBStdDev          = 275,
313
        ocDBStdDevP         = 276,
314
        ocDBVar             = 277,
315
        ocDBVarP            = 278,
316
    // Management functions
317
        ocIndirect          = 279,
318
        ocAddress           = 280,
319
        ocMatch             = 281,
320
        ocCountEmptyCells   = 282,
321
        ocCountIf           = 283,
322
        ocSumIf             = 284,
323
        ocLookup            = 285,
324
        ocVLookup           = 286,
325
        ocHLookup           = 287,
326
        ocMultiArea         = 288,
327
        ocOffset            = 289,
328
        ocIndex             = 290,
329
        ocAreas             = 291,
330
    // String functions
331
        ocCurrency          = 292,
332
        ocReplace           = 293,
333
        ocFixed             = 294,
334
        ocFind              = 295,
335
        ocExact             = 296,
336
        ocLeft              = 297,
337
        ocRight             = 298,
338
        ocSearch            = 299,
339
        ocMid               = 300,
340
        ocText              = 301,
341
        ocSubstitute        = 302,
342
        ocRept              = 303,
343
        ocConcat            = 304,
344
    // Matrix functions
345
        ocMatValue          = 305,
346
        ocMatDet            = 306,
347
        ocMatInv            = 307,
348
        ocMatMult           = 308,
349
        ocMatTrans          = 309,
350
        ocMatrixUnit        = 310,
351
    // BackSolver
352
        ocBackSolver        = 311,
353
    // Statistical functions
354
        ocHypGeomDist       = 312,
355
        ocLogNormDist       = 313,
356
        ocTDist             = 314,
357
        ocFDist             = 315,
358
        ocChiDist           = 316,
359
        ocWeibull           = 317,
360
        ocNegBinomVert      = 318,
361
        ocCritBinom         = 319,
362
        ocKurt              = 320,
363
        ocHarMean           = 321,
364
        ocGeoMean           = 322,
365
        ocStandard          = 323,
366
        ocAveDev            = 324,
367
        ocSkew              = 325,
368
        ocDevSq             = 326,
369
        ocMedian            = 327,
370
        ocModalValue        = 328,
371
        ocZTest             = 329,
372
        ocTTest             = 330,
373
        ocRank              = 331,
374
        ocPercentile        = 332,
375
        ocPercentrank       = 333,
376
        ocLarge             = 334,
377
        ocSmall             = 335,
378
        ocFrequency         = 336,
379
        ocQuartile          = 337,
380
        ocNormInv           = 338,
381
        ocConfidence        = 339,
382
        ocFTest             = 340,
383
        ocTrimMean          = 341,
384
        ocProb              = 342,
385
        ocCorrel            = 343,
386
        ocCovar             = 344,
387
        ocPearson           = 345,
388
        ocRSQ               = 346,
389
        ocSTEYX             = 347,
390
        ocSlope             = 348,
391
        ocIntercept         = 349,
392
        ocTrend             = 350,
393
        ocGrowth            = 351,
394
        ocLinest            = 352,
395
        ocLogest            = 353,
396
        ocForecast          = 354,
397
        ocChiInv            = 355,
398
        ocGammaDist         = 356,
399
        ocGammaInv          = 357,
400
        ocTInv              = 358,
401
        ocFInv              = 359,
402
        ocChiTest           = 360,
403
        ocLogInv            = 361,
404
        ocTableOp           = 362,
405
        ocBetaDist          = 363,
406
        ocBetaInv           = 364,
407
    // miscellaneous
408
        ocWeek              = 365,
409
        ocGetDayOfWeek      = 366,
410
        ocNoName            = 367,
411
        ocStyle             = 368,
412
        ocDde               = 369,
413
        ocBase              = 370,
414
        ocSheet             = 371,
415
        ocSheets            = 372,
416
        ocMinA              = 373,
417
        ocMaxA              = 374,
418
        ocAverageA          = 375,
419
        ocStDevA            = 376,
420
        ocStDevPA           = 377,
421
        ocVarA              = 378,
422
        ocVarPA             = 379,
423
        ocEasterSunday      = 380,
424
        ocDecimal           = 381,
425
        ocConvertOOo        = 382,
426
        ocRoman             = 383,
427
        ocMIRR              = 384,
428
        ocCell              = 385,
429
        ocISPMT             = 386,
430
        ocHyperLink         = 387,
431
        ocXLookup           = 388,
432
        ocXMatch            = 389,
433
        ocGetPivotData      = 390,
434
        ocEuroConvert       = 391,
435
        ocNumberValue       = 392,
436
        ocChiSqDist         = 393,
437
        ocChiSqInv          = 394,
438
    // Bit functions
439
        ocBitAnd            = 395,
440
        ocBitOr             = 396,
441
        ocBitXor            = 397,
442
        ocBitRshift         = 398,
443
        ocBitLshift         = 399,
444
        ocGetDateDif        = 400,
445
        ocXor               = 401,
446
        ocAverageIf         = 402,
447
        ocSumIfs            = 403,
448
        ocAverageIfs        = 404,
449
        ocCountIfs          = 405,
450
        ocSkewp             = 406,
451
        ocLenB              = 407,
452
        ocRightB            = 408,
453
        ocLeftB             = 409,
454
        ocMidB              = 410,
455
        ocFilterXML         = 411,
456
        ocWebservice        = 412,
457
        ocCovarianceS       = 413,
458
        ocCovarianceP       = 414,
459
        ocStDevP_MS         = 415,
460
        ocStDevS            = 416,
461
        ocVarP_MS           = 417,
462
        ocVarS              = 418,
463
        ocBetaDist_MS       = 419,
464
        ocBetaInv_MS        = 420,
465
        ocBinomDist_MS      = 421,
466
        ocBinomInv          = 422,
467
        ocChiDist_MS        = 423,
468
        ocChiInv_MS         = 424,
469
        ocChiTest_MS        = 425,
470
        ocChiSqDist_MS      = 426,
471
        ocChiSqInv_MS       = 427,
472
        ocConfidence_N      = 428,
473
        ocConfidence_T      = 429,
474
        ocFDist_LT          = 430,
475
        ocFDist_RT          = 431,
476
        ocFInv_LT           = 432,
477
        ocFInv_RT           = 433,
478
        ocFTest_MS          = 434,
479
        ocExpDist_MS        = 435,
480
        ocHypGeomDist_MS    = 436,
481
        ocPoissonDist_MS    = 437,
482
        ocWeibull_MS        = 438,
483
        ocGammaDist_MS      = 439,
484
        ocGammaInv_MS       = 440,
485
        ocLogNormDist_MS    = 441,
486
        ocLogInv_MS         = 442,
487
        ocNormDist_MS       = 443,
488
        ocNormInv_MS        = 444,
489
        ocStdNormDist_MS    = 445,
490
        ocSNormInv_MS       = 446,
491
        ocTDist_MS          = 447,
492
        ocTDist_RT          = 448,
493
        ocTDist_2T          = 449,
494
        ocTInv_2T           = 450,
495
        ocTInv_MS           = 451,
496
        ocTTest_MS          = 452,
497
        ocPercentile_Inc    = 453,
498
        ocPercentrank_Inc   = 454,
499
        ocQuartile_Inc      = 455,
500
        ocRank_Eq           = 456,
501
        ocPercentile_Exc    = 457,
502
        ocPercentrank_Exc   = 458,
503
        ocQuartile_Exc      = 459,
504
        ocRank_Avg          = 460,
505
        ocModalValue_MS     = 461,
506
        ocModalValue_Multi  = 462,
507
        ocNegBinomDist_MS   = 463,
508
        ocZTest_MS          = 464,
509
        ocCeil_MS           = 465,
510
        ocCeil_ISO          = 466,
511
        ocFloor_MS          = 467,
512
        ocNetWorkdays_MS    = 468,
513
        ocWorkday_MS        = 469,
514
        ocAggregate         = 470,
515
        ocColor             = 471,
516
        ocCeil_Math         = 472,
517
        ocCeil_Precise      = 473,
518
        ocNetWorkdays       = 474,
519
        ocFloor_Math        = 475,
520
        ocFloor_Precise     = 476,
521
        ocRawSubtract       = 477,
522
        ocWeeknumOOo        = 478,
523
        ocForecast_ETS_ADD  = 479,
524
        ocForecast_ETS_SEA  = 480,
525
        ocForecast_ETS_MUL  = 481,
526
        ocForecast_ETS_PIA  = 482,
527
        ocForecast_ETS_PIM  = 483,
528
        ocForecast_ETS_STA  = 484,
529
        ocForecast_ETS_STM  = 485,
530
        ocForecast_LIN      = 486,
531
        ocConcat_MS         = 487,
532
        ocTextJoin_MS       = 488,
533
        ocIfs_MS            = 489,
534
        ocSwitch_MS         = 490,
535
        ocMinIfs_MS         = 491,
536
        ocMaxIfs_MS         = 492,
537
        ocRoundSig          = 493,
538
        ocReplaceB          = 494,
539
        ocFindB             = 495,
540
        ocSearchB           = 496,
541
        ocRegex             = 497,
542
        ocFourier           = 498,
543
        ocRandbetweenNV     = 499,
544
        ocFilter            = 500,
545
        ocSort              = 501,
546
        ocSortBy            = 502,
547
        ocMatSequence       = 503,
548
        ocRandArray         = 504,
549
        ocChooseCols        = 505,
550
        ocChooseRows        = 506,
551
        ocDrop              = 507,
552
        ocExpand            = 508,
553
        ocHStack            = 509,
554
        ocVStack            = 510,
555
        ocTake              = 511,
556
        ocTextAfter         = 512,
557
        ocTextBefore        = 513,
558
        ocTextSplit         = 514,
559
        ocToCol             = 515,
560
        ocToRow             = 516,
561
        ocUnique            = 517,
562
        ocWrapCols          = 518,
563
        ocWrapRows          = 519,
564
        ocUDExternal        = 520, /* User-defined external function */
565
        ocByCol             = 521,
566
        ocByRow             = 522,
567
        ocMakeArray         = 523,
568
        ocMap               = 524,
569
        ocReduce            = 525,
570
        ocScan              = 526,
571
        ocArrayToText       = 527,
572
        ocStopTwoParameters = 528, /* last function with two or more parameters' OpCode + 1 */
573
574
        ocStopFunction      = ocStopTwoParameters,  /* last function's OpCode + 1 */
575
        ocLastOpcodeId      = ocStopFunction - 1, /* last OpCode */
576
577
    // internal stuff
578
        ocInternalBegin     = 9999,
579
        ocTTT               = 9999,
580
        ocDebugVar          = 10000,
581
        ocInternalEnd       = 10000,
582
    // from here on ExtraData
583
        ocDataToken1        = 10001,
584
    // no OpCode
585
        ocNone              = 0xFFFF
586
};
587
588
// Only to be used for debugging output. No guarantee of stability of the
589
// return value.
590
591
// Turn this into an operator<< when OpCode becomes a scoped enum
592
593
inline std::string OpCodeEnumToString(OpCode eCode)
594
0
{
595
0
    switch (eCode)
596
0
    {
597
0
    case ocPush: return "Push";
598
0
    case ocStop: return "Stop";
599
0
    case ocExternal: return "External";
600
0
    case ocUDExternal: return "UDExternal";
601
0
    case ocName: return "Name";
602
0
    case ocIf: return "If";
603
0
    case ocIfError: return "IfError";
604
0
    case ocIfNA: return "IfNA";
605
0
    case ocChoose: return "Choose";
606
0
    case ocLet: return "Let";
607
0
    case ocOpen: return "Open";
608
0
    case ocClose: return "Close";
609
0
    case ocTableRefOpen: return "TableRefOpen";
610
0
    case ocTableRefClose: return "TableRefClose";
611
0
    case ocSep: return "Sep";
612
0
    case ocArrayOpen: return "ArrayOpen";
613
0
    case ocArrayClose: return "ArrayClose";
614
0
    case ocArrayRowSep: return "ArrayRowSep";
615
0
    case ocArrayColSep: return "ArrayColSep";
616
0
    case ocMissing: return "Missing";
617
0
    case ocBad: return "Bad";
618
0
    case ocStringXML: return "StringXML";
619
0
    case ocStringName: return "StringName";
620
0
    case ocSpaces: return "Spaces";
621
0
    case ocWhitespace: return "Whitespace";
622
0
    case ocMatRef: return "MatRef";
623
0
    case ocTableRefItemAll: return "TableRefItemAll";
624
0
    case ocTableRefItemHeaders: return "TableRefItemHeaders";
625
0
    case ocTableRefItemData: return "TableRefItemData";
626
0
    case ocTableRefItemTotals: return "TableRefItemTotals";
627
0
    case ocTableRefItemThisRow: return "TableRefItemThisRow";
628
0
    case ocSkip: return "Skip";
629
0
    case ocDBArea: return "DBArea";
630
0
    case ocTableRef: return "TableRef";
631
0
    case ocMacro: return "Macro";
632
0
    case ocColRowName: return "ColRowName";
633
0
    case ocColRowNameAuto: return "ColRowNameAuto";
634
0
    case ocDPFieldName: return "DPFieldName";
635
0
    case ocPercentSign: return "PercentSign";
636
0
    case ocErrNull: return "ErrNull";
637
0
    case ocErrDivZero: return "ErrDivZero";
638
0
    case ocErrValue: return "ErrValue";
639
0
    case ocErrRef: return "ErrRef";
640
0
    case ocErrName: return "ErrName";
641
0
    case ocErrNum: return "ErrNum";
642
0
    case ocErrNA: return "ErrNA";
643
0
    case ocErrSpill: return "ErrSpill";
644
0
    case ocAdd: return "Add";
645
0
    case ocSub: return "Sub";
646
0
    case ocMul: return "Mul";
647
0
    case ocDiv: return "Div";
648
0
    case ocAmpersand: return "Ampersand";
649
0
    case ocPow: return "Pow";
650
0
    case ocEqual: return "Equal";
651
0
    case ocNotEqual: return "NotEqual";
652
0
    case ocLess: return "Less";
653
0
    case ocGreater: return "Greater";
654
0
    case ocLessEqual: return "LessEqual";
655
0
    case ocGreaterEqual: return "GreaterEqual";
656
0
    case ocAnd: return "And";
657
0
    case ocOr: return "Or";
658
0
    case ocXor: return "Xor";
659
0
    case ocIntersect: return "Intersect";
660
0
    case ocUnion: return "Union";
661
0
    case ocRange: return "Range";
662
0
    case ocCall: return "Call";
663
0
    case ocSpill: return "SpilledRange";
664
0
    case ocNot: return "Not";
665
0
    case ocNeg: return "Neg";
666
0
    case ocNegSub: return "NegSub";
667
0
    case ocSingleValue: return "SingleValue";
668
0
    case ocPi: return "Pi";
669
0
    case ocRandom: return "Random";
670
0
    case ocRandomNV: return "RandomNV";
671
0
    case ocTrue: return "True";
672
0
    case ocFalse: return "False";
673
0
    case ocGetActDate: return "GetActDate";
674
0
    case ocGetActTime: return "GetActTime";
675
0
    case ocNotAvail: return "NotAvail";
676
0
    case ocCurrent: return "Current";
677
0
    case ocDeg: return "Deg";
678
0
    case ocRad: return "Rad";
679
0
    case ocSin: return "Sin";
680
0
    case ocCos: return "Cos";
681
0
    case ocTan: return "Tan";
682
0
    case ocCot: return "Cot";
683
0
    case ocArcSin: return "ArcSin";
684
0
    case ocArcCos: return "ArcCos";
685
0
    case ocArcTan: return "ArcTan";
686
0
    case ocArcCot: return "ArcCot";
687
0
    case ocSinHyp: return "SinHyp";
688
0
    case ocCosHyp: return "CosHyp";
689
0
    case ocTanHyp: return "TanHyp";
690
0
    case ocCotHyp: return "CotHyp";
691
0
    case ocArcSinHyp: return "ArcSinHyp";
692
0
    case ocArcCosHyp: return "ArcCosHyp";
693
0
    case ocArcTanHyp: return "ArcTanHyp";
694
0
    case ocArcCotHyp: return "ArcCotHyp";
695
0
    case ocCosecant: return "Cosecant";
696
0
    case ocSecant: return "Secant";
697
0
    case ocCosecantHyp: return "CosecantHyp";
698
0
    case ocSecantHyp: return "SecantHyp";
699
0
    case ocExp: return "Exp";
700
0
    case ocLn: return "Ln";
701
0
    case ocSqrt: return "Sqrt";
702
0
    case ocFact: return "Fact";
703
0
    case ocGetYear: return "GetYear";
704
0
    case ocGetMonth: return "GetMonth";
705
0
    case ocGetDay: return "GetDay";
706
0
    case ocGetHour: return "GetHour";
707
0
    case ocGetMin: return "GetMin";
708
0
    case ocGetSec: return "GetSec";
709
0
    case ocPlusMinus: return "PlusMinus";
710
0
    case ocAbs: return "Abs";
711
0
    case ocInt: return "Int";
712
0
    case ocPhi: return "Phi";
713
0
    case ocGauss: return "Gauss";
714
0
    case ocIsEmpty: return "IsEmpty";
715
0
    case ocIsString: return "IsString";
716
0
    case ocIsNonString: return "IsNonString";
717
0
    case ocIsLogical: return "IsLogical";
718
0
    case ocType: return "Type";
719
0
    case ocCell: return "Cell";
720
0
    case ocIsRef: return "IsRef";
721
0
    case ocIsValue: return "IsValue";
722
0
    case ocIsFormula: return "IsFormula";
723
0
    case ocIsNA: return "IsNA";
724
0
    case ocIsErr: return "IsErr";
725
0
    case ocIsError: return "IsError";
726
0
    case ocIsEven: return "IsEven";
727
0
    case ocIsOdd: return "IsOdd";
728
0
    case ocN: return "N";
729
0
    case ocGetDateValue: return "GetDateValue";
730
0
    case ocGetTimeValue: return "GetTimeValue";
731
0
    case ocCode: return "Code";
732
0
    case ocTrim: return "Trim";
733
0
    case ocUpper: return "Upper";
734
0
    case ocProper: return "Proper";
735
0
    case ocLower: return "Lower";
736
0
    case ocLen: return "Len";
737
0
    case ocT: return "T";
738
0
    case ocValue: return "Value";
739
0
    case ocClean: return "Clean";
740
0
    case ocChar: return "Char";
741
0
    case ocLog10: return "Log10";
742
0
    case ocEven: return "Even";
743
0
    case ocOdd: return "Odd";
744
0
    case ocStdNormDist: return "StdNormDist";
745
0
    case ocStdNormDist_MS: return "StdNormDist_MS";
746
0
    case ocFisher: return "Fisher";
747
0
    case ocFisherInv: return "FisherInv";
748
0
    case ocSNormInv: return "SNormInv";
749
0
    case ocSNormInv_MS: return "SNormInv_MS";
750
0
    case ocGammaLn: return "GammaLn";
751
0
    case ocGammaLn_MS: return "GammaLn_MS";
752
0
    case ocGamma: return "Gamma";
753
0
    case ocErrorType: return "ErrorType";
754
0
    case ocErrorType_ODF: return "ErrorType_ODF";
755
0
    case ocFormula: return "Formula";
756
0
    case ocArabic: return "Arabic";
757
0
    case ocInfo: return "Info";
758
0
    case ocBahtText: return "BahtText";
759
0
    case ocJis: return "Jis";
760
0
    case ocAsc: return "Asc";
761
0
    case ocUnicode: return "Unicode";
762
0
    case ocUnichar: return "Unichar";
763
0
    case ocArcTan2: return "ArcTan2";
764
0
    case ocCeil: return "Ceil";
765
0
    case ocCeil_MS: return "Ceil_MS";
766
0
    case ocCeil_Precise: return "Ceil_Precise";
767
0
    case ocCeil_ISO: return "Ceil_ISO";
768
0
    case ocCeil_Math: return "Ceil_Math";
769
0
    case ocFloor: return "Floor";
770
0
    case ocFloor_MS: return "Floor_MS";
771
0
    case ocFloor_Math: return "Floor_Math";
772
0
    case ocFloor_Precise: return "Floor_Precise";
773
0
    case ocRound: return "Round";
774
0
    case ocRoundUp: return "RoundUp";
775
0
    case ocRoundDown: return "RoundDown";
776
0
    case ocTrunc: return "Trunc";
777
0
    case ocLog: return "Log";
778
0
    case ocPower: return "Power";
779
0
    case ocGCD: return "GCD";
780
0
    case ocLCM: return "LCM";
781
0
    case ocMod: return "Mod";
782
0
    case ocSumProduct: return "SumProduct";
783
0
    case ocSumSQ: return "SumSQ";
784
0
    case ocSumX2MY2: return "SumX2MY2";
785
0
    case ocSumX2DY2: return "SumX2DY2";
786
0
    case ocSumXMY2: return "SumXMY2";
787
0
    case ocGetDate: return "GetDate";
788
0
    case ocGetTime: return "GetTime";
789
0
    case ocGetDiffDate: return "GetDiffDate";
790
0
    case ocGetDiffDate360: return "GetDiffDate360";
791
0
    case ocGetDateDif: return "GetDateDif";
792
0
    case ocMin: return "Min";
793
0
    case ocMax: return "Max";
794
0
    case ocSum: return "Sum";
795
0
    case ocProduct: return "Product";
796
0
    case ocAverage: return "Average";
797
0
    case ocCount: return "Count";
798
0
    case ocCount2: return "Count2";
799
0
    case ocNPV: return "NPV";
800
0
    case ocIRR: return "IRR";
801
0
    case ocMIRR: return "MIRR";
802
0
    case ocISPMT: return "ISPMT";
803
0
    case ocVar: return "Var";
804
0
    case ocVarP: return "VarP";
805
0
    case ocVarP_MS: return "VarP_MS";
806
0
    case ocVarS: return "VarS";
807
0
    case ocStDev: return "StDev";
808
0
    case ocStDevP: return "StDevP";
809
0
    case ocStDevP_MS: return "StDevP_MS";
810
0
    case ocStDevS: return "StDevS";
811
0
    case ocB: return "B";
812
0
    case ocNormDist: return "NormDist";
813
0
    case ocNormDist_MS: return "NormDist_MS";
814
0
    case ocExpDist: return "ExpDist";
815
0
    case ocExpDist_MS: return "ExpDist_MS";
816
0
    case ocBinomDist: return "BinomDist";
817
0
    case ocBinomDist_MS: return "BinomDist_MS";
818
0
    case ocBinomInv: return "BinomInv";
819
0
    case ocPoissonDist: return "PoissonDist";
820
0
    case ocPoissonDist_MS: return "PoissonDist_MS";
821
0
    case ocCombin: return "Combin";
822
0
    case ocCombinA: return "CombinA";
823
0
    case ocPermut: return "Permut";
824
0
    case ocPermutationA: return "PermutationA";
825
0
    case ocPV: return "PV";
826
0
    case ocSYD: return "SYD";
827
0
    case ocDDB: return "DDB";
828
0
    case ocDB: return "DB";
829
0
    case ocVBD: return "VBD";
830
0
    case ocPDuration: return "PDuration";
831
0
    case ocSLN: return "SLN";
832
0
    case ocPMT: return "PMT";
833
0
    case ocColumns: return "Columns";
834
0
    case ocRows: return "Rows";
835
0
    case ocColumn: return "Column";
836
0
    case ocRow: return "Row";
837
0
    case ocRRI: return "RRI";
838
0
    case ocFV: return "FV";
839
0
    case ocNper: return "Nper";
840
0
    case ocRate: return "Rate";
841
0
    case ocIpmt: return "Ipmt";
842
0
    case ocPpmt: return "Ppmt";
843
0
    case ocCumIpmt: return "CumIpmt";
844
0
    case ocCumPrinc: return "CumPrinc";
845
0
    case ocEffect: return "Effect";
846
0
    case ocNominal: return "Nominal";
847
0
    case ocSubTotal: return "SubTotal";
848
0
    case ocRawSubtract: return "RawSubtract";
849
0
    case ocIfs_MS: return "Ifs_MS";
850
0
    case ocSwitch_MS: return "Switch_MS";
851
0
    case ocMinIfs_MS: return "MinIfs_MS";
852
0
    case ocMaxIfs_MS: return "MaxIfs_MS";
853
0
    case ocRoundSig: return "RoundSig";
854
0
    case ocDBSum: return "DBSum";
855
0
    case ocDBCount: return "DBCount";
856
0
    case ocDBCount2: return "DBCount2";
857
0
    case ocDBAverage: return "DBAverage";
858
0
    case ocDBGet: return "DBGet";
859
0
    case ocDBMax: return "DBMax";
860
0
    case ocDBMin: return "DBMin";
861
0
    case ocDBProduct: return "DBProduct";
862
0
    case ocDBStdDev: return "DBStdDev";
863
0
    case ocDBStdDevP: return "DBStdDevP";
864
0
    case ocDBVar: return "DBVar";
865
0
    case ocDBVarP: return "DBVarP";
866
0
    case ocIndirect: return "Indirect";
867
0
    case ocAddress: return "Address";
868
0
    case ocMatch: return "Match";
869
0
    case ocXMatch: return "XMatch";
870
0
    case ocCountEmptyCells: return "CountEmptyCells";
871
0
    case ocCountIf: return "CountIf";
872
0
    case ocSumIf: return "SumIf";
873
0
    case ocAverageIf: return "AverageIf";
874
0
    case ocSumIfs: return "SumIfs";
875
0
    case ocAverageIfs: return "AverageIfs";
876
0
    case ocCountIfs: return "CountIfs";
877
0
    case ocLookup: return "Lookup";
878
0
    case ocVLookup: return "VLookup";
879
0
    case ocXLookup: return "XLookup";
880
0
    case ocHLookup: return "HLookup";
881
0
    case ocMultiArea: return "MultiArea";
882
0
    case ocOffset: return "Offset";
883
0
    case ocIndex: return "Index";
884
0
    case ocAreas: return "Areas";
885
0
    case ocCurrency: return "Currency";
886
0
    case ocReplace: return "Replace";
887
0
    case ocFixed: return "Fixed";
888
0
    case ocFind: return "Find";
889
0
    case ocExact: return "Exact";
890
0
    case ocLeft: return "Left";
891
0
    case ocRight: return "Right";
892
0
    case ocSearch: return "Search";
893
0
    case ocMid: return "Mid";
894
0
    case ocText: return "Text";
895
0
    case ocSubstitute: return "Substitute";
896
0
    case ocRept: return "Rept";
897
0
    case ocRegex: return "Regex";
898
0
    case ocConcat: return "Concat";
899
0
    case ocConcat_MS: return "Concat_MS";
900
0
    case ocTextJoin_MS: return "TextJoin_MS";
901
0
    case ocLenB: return "LenB";
902
0
    case ocRightB: return "RightB";
903
0
    case ocLeftB: return "LeftB";
904
0
    case ocMidB: return "MidB";
905
0
    case ocReplaceB: return "ReplaceB";
906
0
    case ocFindB: return "FindB";
907
0
    case ocSearchB: return "SearchB";
908
0
    case ocNumberValue: return "NumberValue";
909
0
    case ocMatValue: return "MatValue";
910
0
    case ocMatDet: return "MatDet";
911
0
    case ocMatInv: return "MatInv";
912
0
    case ocMatMult: return "MatMult";
913
0
    case ocMatSequence: return "MatSequence";
914
0
    case ocMatTrans: return "MatTrans";
915
0
    case ocMatrixUnit: return "MatrixUnit";
916
0
    case ocBackSolver: return "BackSolver";
917
0
    case ocHypGeomDist: return "HypGeomDist";
918
0
    case ocHypGeomDist_MS: return "HypGeomDist_MS";
919
0
    case ocLogNormDist: return "LogNormDist";
920
0
    case ocLogNormDist_MS: return "LogNormDist_MS";
921
0
    case ocTDist: return "TDist";
922
0
    case ocTDist_MS: return "TDist_MS";
923
0
    case ocTDist_RT: return "TDist_RT";
924
0
    case ocTDist_2T: return "TDist_2T";
925
0
    case ocFDist: return "FDist";
926
0
    case ocFDist_LT: return "FDist_LT";
927
0
    case ocFDist_RT: return "FDist_RT";
928
0
    case ocChiDist: return "ChiDist";
929
0
    case ocChiDist_MS: return "ChiDist_MS";
930
0
    case ocChiSqDist: return "ChiSqDist";
931
0
    case ocChiSqDist_MS: return "ChiSqDist_MS";
932
0
    case ocChiSqInv: return "ChiSqInv";
933
0
    case ocChiSqInv_MS: return "ChiSqInv_MS";
934
0
    case ocWeibull: return "Weibull";
935
0
    case ocWeibull_MS: return "Weibull_MS";
936
0
    case ocNegBinomVert: return "NegBinomVert";
937
0
    case ocNegBinomDist_MS: return "NegBinomDist_MS";
938
0
    case ocCritBinom: return "CritBinom";
939
0
    case ocKurt: return "Kurt";
940
0
    case ocHarMean: return "HarMean";
941
0
    case ocGeoMean: return "GeoMean";
942
0
    case ocStandard: return "Standard";
943
0
    case ocAveDev: return "AveDev";
944
0
    case ocSkew: return "Skew";
945
0
    case ocSkewp: return "Skewp";
946
0
    case ocDevSq: return "DevSq";
947
0
    case ocMedian: return "Median";
948
0
    case ocModalValue: return "ModalValue";
949
0
    case ocModalValue_MS: return "ModalValue_MS";
950
0
    case ocModalValue_Multi: return "ModalValue_Multi";
951
0
    case ocZTest: return "ZTest";
952
0
    case ocZTest_MS: return "ZTest_MS";
953
0
    case ocAggregate: return "Aggregate";
954
0
    case ocTTest: return "TTest";
955
0
    case ocTTest_MS: return "TTest_MS";
956
0
    case ocRank: return "Rank";
957
0
    case ocPercentile: return "Percentile";
958
0
    case ocPercentrank: return "Percentrank";
959
0
    case ocPercentile_Inc: return "Percentile_Inc";
960
0
    case ocPercentrank_Inc: return "Percentrank_Inc";
961
0
    case ocQuartile_Inc: return "Quartile_Inc";
962
0
    case ocRank_Eq: return "Rank_Eq";
963
0
    case ocPercentile_Exc: return "Percentile_Exc";
964
0
    case ocPercentrank_Exc: return "Percentrank_Exc";
965
0
    case ocQuartile_Exc: return "Quartile_Exc";
966
0
    case ocRank_Avg: return "Rank_Avg";
967
0
    case ocLarge: return "Large";
968
0
    case ocSmall: return "Small";
969
0
    case ocFrequency: return "Frequency";
970
0
    case ocQuartile: return "Quartile";
971
0
    case ocNormInv: return "NormInv";
972
0
    case ocNormInv_MS: return "NormInv_MS";
973
0
    case ocConfidence: return "Confidence";
974
0
    case ocConfidence_N: return "Confidence_N";
975
0
    case ocConfidence_T: return "Confidence_T";
976
0
    case ocFTest: return "FTest";
977
0
    case ocFTest_MS: return "FTest_MS";
978
0
    case ocTrimMean: return "TrimMean";
979
0
    case ocProb: return "Prob";
980
0
    case ocCorrel: return "Correl";
981
0
    case ocCovar: return "Covar";
982
0
    case ocCovarianceP: return "CovarianceP";
983
0
    case ocCovarianceS: return "CovarianceS";
984
0
    case ocPearson: return "Pearson";
985
0
    case ocRSQ: return "RSQ";
986
0
    case ocSTEYX: return "STEYX";
987
0
    case ocSlope: return "Slope";
988
0
    case ocIntercept: return "Intercept";
989
0
    case ocTrend: return "Trend";
990
0
    case ocGrowth: return "Growth";
991
0
    case ocLinest: return "Linest";
992
0
    case ocLogest: return "Logest";
993
0
    case ocForecast: return "Forecast";
994
0
    case ocForecast_ETS_ADD: return "Forecast_ETS_ADD";
995
0
    case ocForecast_ETS_SEA: return "Forecast_ETS_SEA";
996
0
    case ocForecast_ETS_MUL: return "Forecast_ETS_MUL";
997
0
    case ocForecast_ETS_PIA: return "Forecast_ETS_PIA";
998
0
    case ocForecast_ETS_PIM: return "Forecast_ETS_PIM";
999
0
    case ocForecast_ETS_STA: return "Forecast_ETS_STA";
1000
0
    case ocForecast_ETS_STM: return "Forecast_ETS_STM";
1001
0
    case ocForecast_LIN: return "Forecast_LIN";
1002
0
    case ocChiInv: return "ChiInv";
1003
0
    case ocChiInv_MS: return "ChiInv_MS";
1004
0
    case ocGammaDist: return "GammaDist";
1005
0
    case ocGammaDist_MS: return "GammaDist_MS";
1006
0
    case ocGammaInv: return "GammaInv";
1007
0
    case ocGammaInv_MS: return "GammaInv_MS";
1008
0
    case ocTInv: return "TInv";
1009
0
    case ocTInv_2T: return "TInv_2T";
1010
0
    case ocTInv_MS: return "TInv_MS";
1011
0
    case ocFInv: return "FInv";
1012
0
    case ocFInv_LT: return "FInv_LT";
1013
0
    case ocFInv_RT: return "FInv_RT";
1014
0
    case ocChiTest: return "ChiTest";
1015
0
    case ocChiTest_MS: return "ChiTest_MS";
1016
0
    case ocLogInv: return "LogInv";
1017
0
    case ocLogInv_MS: return "LogInv_MS";
1018
0
    case ocTableOp: return "TableOp";
1019
0
    case ocBetaDist: return "BetaDist";
1020
0
    case ocBetaInv: return "BetaInv";
1021
0
    case ocBetaDist_MS: return "BetaDist_MS";
1022
0
    case ocBetaInv_MS: return "BetaInv_MS";
1023
0
    case ocBitAnd: return "BitAnd";
1024
0
    case ocBitOr: return "BitOr";
1025
0
    case ocBitXor: return "BitXor";
1026
0
    case ocBitRshift: return "BitRshift";
1027
0
    case ocBitLshift: return "BitLshift";
1028
0
    case ocWeek: return "Week";
1029
0
    case ocIsoWeeknum: return "IsoWeeknum";
1030
0
    case ocWeeknumOOo: return "WeeknumOOo";
1031
0
    case ocGetDayOfWeek: return "GetDayOfWeek";
1032
0
    case ocNetWorkdays: return "NetWorkdays";
1033
0
    case ocNetWorkdays_MS: return "NetWorkdays_MS";
1034
0
    case ocWorkday_MS: return "Workday_MS";
1035
0
    case ocNoName: return "NoName";
1036
0
    case ocStyle: return "Style";
1037
0
    case ocDde: return "Dde";
1038
0
    case ocBase: return "Base";
1039
0
    case ocSheet: return "Sheet";
1040
0
    case ocSheets: return "Sheets";
1041
0
    case ocMinA: return "MinA";
1042
0
    case ocMaxA: return "MaxA";
1043
0
    case ocAverageA: return "AverageA";
1044
0
    case ocStDevA: return "StDevA";
1045
0
    case ocStDevPA: return "StDevPA";
1046
0
    case ocVarA: return "VarA";
1047
0
    case ocVarPA: return "VarPA";
1048
0
    case ocEasterSunday: return "EasterSunday";
1049
0
    case ocDecimal: return "Decimal";
1050
0
    case ocConvertOOo: return "ConvertOOo";
1051
0
    case ocRoman: return "Roman";
1052
0
    case ocHyperLink: return "HyperLink";
1053
0
    case ocGetPivotData: return "GetPivotData";
1054
0
    case ocEuroConvert: return "EuroConvert";
1055
0
    case ocFilterXML: return "FilterXML";
1056
0
    case ocWebservice: return "Webservice";
1057
0
    case ocColor: return "Color";
1058
0
    case ocErf_MS: return "Erf_MS";
1059
0
    case ocErfc_MS: return "Erfc_MS";
1060
0
    case ocEncodeURL: return "EncodeURL";
1061
0
    case ocFourier: return "Fourier";
1062
0
    case ocRandbetweenNV: return "RandbetweenNV";
1063
0
    case ocRandArray: return "RandArray";
1064
0
    case ocFilter: return "Filter";
1065
0
    case ocSort: return "Sort";
1066
0
    case ocSortBy: return "SortBy";
1067
0
    case ocChooseCols: return "ChooseCols";
1068
0
    case ocChooseRows: return "ChooseRows";
1069
0
    case ocDrop: return "Drop";
1070
0
    case ocExpand: return "Expand";
1071
0
    case ocHStack: return "HStack";
1072
0
    case ocVStack: return "VStack";
1073
0
    case ocTake: return "Take";
1074
0
    case ocTextAfter: return "TextAfter";
1075
0
    case ocTextBefore: return "TextBefore";
1076
0
    case ocTextSplit: return "TextSplit";
1077
0
    case ocToCol: return "ToCol";
1078
0
    case ocToRow: return "ToRow";
1079
0
    case ocUnique: return "Unique";
1080
0
    case ocWrapCols: return "WrapCols";
1081
0
    case ocWrapRows: return "WrapRows";
1082
0
    case ocLambda: return "Lambda";
1083
0
    case ocIsOmitted: return "IsOmitted";
1084
0
    case ocByCol: return "ByCol";
1085
0
    case ocByRow: return "ByRow";
1086
0
    case ocMakeArray: return "MakeArray";
1087
0
    case ocMap: return "Map";
1088
0
    case ocReduce: return "Reduce";
1089
0
    case ocScan: return "Scan";
1090
0
    case ocArrayToText: return "ArrayToText";
1091
0
    case ocTTT: return "TTT";
1092
0
    case ocDebugVar: return "DebugVar";
1093
0
    case ocDataToken1: return "DataToken1";
1094
0
    case ocNone: return "None";
1095
0
    default: assert(false); return "???";
1096
0
    }
1097
0
    std::ostringstream os;
1098
0
    os << static_cast<int>(eCode);
1099
0
    return os.str();
1100
0
}
1101
1102
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */