36 tok.type_ = tokenType::BOOL;
37 tok.data_.labelVal = on;
46 tok.type_ = tokenType::FLAG;
47 tok.data_.flagVal = bitmask;
59 case token::END_STATEMENT :
60 case token::BEGIN_LIST :
61 case token::END_LIST :
62 case token::BEGIN_SQR :
64 case token::BEGIN_BLOCK :
65 case token::END_BLOCK :
71 case token::MULTIPLY :
87 inline void Foam::token::setUndefined() noexcept
89 type_ = tokenType::UNDEFINED;
116 case tokenType::WORD:
117 case tokenType::DIRECTIVE:
119 data_.wordPtr =
new word(*tok.data_.wordPtr);
123 case tokenType::STRING:
124 case tokenType::EXPRESSION:
125 case tokenType::VARIABLE:
126 case tokenType::VERBATIM:
128 data_.stringPtr =
new string(*tok.data_.stringPtr);
132 case tokenType::COMPOUND:
135 data_.compoundPtr = tok.data_.compoundPtr;
136 data_.compoundPtr->refCount::operator++();
160 type_(tokenType::PUNCTUATION),
163 data_.punctuationVal =
p;
170 type_(tokenType::LABEL),
173 data_.labelVal = val;
180 type_(tokenType::FLOAT),
183 data_.floatVal = val;
190 type_(tokenType::DOUBLE),
193 data_.doubleVal = val;
203 data_.wordPtr =
new word(w);
213 data_.stringPtr =
new string(str);
223 data_.wordPtr =
new word(std::move(w));
233 data_.stringPtr =
new string(std::move(str));
243 data_.compoundPtr = ptr;
261 case tokenType::WORD:
262 case tokenType::DIRECTIVE:
264 delete data_.wordPtr;
268 case tokenType::STRING:
269 case tokenType::EXPRESSION:
270 case tokenType::VARIABLE:
271 case tokenType::VERBATIM:
273 delete data_.stringPtr;
277 case tokenType::COMPOUND:
279 if (data_.compoundPtr->unique())
281 delete data_.compoundPtr;
285 data_.compoundPtr->refCount::operator--();
305 std::swap(data_, tok.data_);
306 std::swap(type_, tok.type_);
307 std::swap(line_, tok.line_);
319 if (type_ == tokType)
327 case tokenType::BOOL:
328 case tokenType::LABEL:
332 case tokenType::BOOL:
333 case tokenType::LABEL:
344 case tokenType::WORD:
345 case tokenType::DIRECTIVE:
349 case tokenType::WORD:
350 case tokenType::DIRECTIVE:
361 case tokenType::STRING:
362 case tokenType::EXPRESSION:
363 case tokenType::VARIABLE:
364 case tokenType::VERBATIM:
369 case tokenType::STRING:
370 case tokenType::EXPRESSION:
371 case tokenType::VARIABLE:
372 case tokenType::VERBATIM:
407 return (type_ != tokenType::UNDEFINED && type_ != tokenType::ERROR);
413 return (type_ == tokenType::UNDEFINED);
419 return (type_ == tokenType::ERROR);
425 return (type_ == tokenType::BOOL);
431 if (type_ == tokenType::BOOL || type_ == tokenType::LABEL)
433 return data_.labelVal;
443 return (type_ == tokenType::FLAG);
449 if (type_ == tokenType::FLAG)
451 return data_.flagVal;
454 parseError(
"flag bitmask");
461 return (type_ == tokenType::PUNCTUATION);
469 type_ == tokenType::PUNCTUATION
470 && data_.punctuationVal ==
p
479 type_ == tokenType::PUNCTUATION
480 && isseparator(data_.punctuationVal)
487 if (type_ == tokenType::PUNCTUATION)
489 return data_.punctuationVal;
492 parseError(
"punctuation character");
493 return punctuationToken::NULL_TOKEN;
499 return (type_ == tokenType::LABEL);
507 type_ == tokenType::LABEL
508 && data_.labelVal == val
515 if (type_ == tokenType::LABEL)
517 return data_.labelVal;
527 return (type_ == tokenType::FLOAT);
533 if (type_ == tokenType::FLOAT)
535 return data_.floatVal;
545 return (type_ == tokenType::DOUBLE);
551 if (type_ == tokenType::DOUBLE)
553 return data_.doubleVal;
556 parseError(
"double");
565 type_ == tokenType::FLOAT
566 || type_ == tokenType::DOUBLE
573 if (type_ == tokenType::FLOAT)
575 return data_.floatVal;
577 else if (type_ == tokenType::DOUBLE)
579 return data_.doubleVal;
582 parseError(
"scalar");
589 return (type_ == tokenType::LABEL || isScalar());
601 return scalarToken();
604 parseError(
"number (label or scalar)");
613 type_ == tokenType::WORD
614 || type_ == tokenType::DIRECTIVE
621 return (isWord() &&
s == *data_.wordPtr);
627 return (type_ == tokenType::DIRECTIVE);
635 type_ == tokenType::WORD
636 || type_ == tokenType::DIRECTIVE
639 return *data_.wordPtr;
649 return (type_ == tokenType::STRING);
657 type_ == tokenType::STRING
658 || type_ == tokenType::EXPRESSION
659 || type_ == tokenType::VARIABLE
660 || type_ == tokenType::VERBATIM
667 return (type_ == tokenType::EXPRESSION);
673 return (type_ == tokenType::VARIABLE);
679 return (type_ == tokenType::VERBATIM);
685 return (isWord() || isString());
693 type_ == tokenType::STRING
694 || type_ == tokenType::EXPRESSION
695 || type_ == tokenType::VARIABLE
696 || type_ == tokenType::VERBATIM
699 return *data_.stringPtr;
703 type_ == tokenType::WORD
704 || type_ == tokenType::DIRECTIVE
708 return *data_.wordPtr;
711 parseError(
"string");
718 return (type_ == tokenType::COMPOUND);
724 if (type_ == tokenType::COMPOUND)
726 return *data_.compoundPtr;
729 parseError(
"compound");
730 return *data_.compoundPtr;
737 type_ = tokenType::ERROR;
761 case tokenType::WORD:
762 case tokenType::DIRECTIVE:
764 data_.wordPtr =
new word(*tok.data_.wordPtr);
768 case tokenType::STRING:
769 case tokenType::EXPRESSION:
770 case tokenType::VARIABLE:
771 case tokenType::VERBATIM:
773 data_.stringPtr =
new string(*tok.data_.stringPtr);
777 case tokenType::COMPOUND:
780 data_.compoundPtr = tok.data_.compoundPtr;
781 data_.compoundPtr->refCount::operator++();
807 type_ = tokenType::PUNCTUATION;
808 data_.punctuationVal =
p;
815 type_ = tokenType::LABEL;
816 data_.labelVal = val;
823 type_ = tokenType::FLOAT;
824 data_.floatVal = val;
831 type_ = tokenType::DOUBLE;
832 data_.doubleVal = val;
839 type_ = tokenType::WORD;
840 data_.wordPtr =
new word(w);
847 type_ = tokenType::STRING;
848 data_.stringPtr =
new string(str);
855 type_ = tokenType::WORD;
856 data_.wordPtr =
new word(std::move(w));
863 type_ = tokenType::STRING;
864 data_.stringPtr =
new string(std::move(
s));
871 type_ = tokenType::COMPOUND;
872 data_.compoundPtr = ptr;
879 type_ = tokenType::COMPOUND;
880 data_.compoundPtr = ptr.release();
886 if (type_ != tok.type_)
893 case tokenType::UNDEFINED:
896 case tokenType::BOOL:
897 return data_.labelVal == tok.data_.labelVal;
899 case tokenType::FLAG:
900 return data_.flagVal == tok.data_.flagVal;
902 case tokenType::PUNCTUATION:
903 return data_.punctuationVal == tok.data_.punctuationVal;
905 case tokenType::LABEL:
906 return data_.labelVal == tok.data_.labelVal;
908 case tokenType::FLOAT:
909 return equal(data_.floatVal, tok.data_.floatVal);
911 case tokenType::DOUBLE:
912 return equal(data_.doubleVal, tok.data_.doubleVal);
914 case tokenType::WORD:
915 case tokenType::DIRECTIVE:
916 return *data_.wordPtr == *tok.data_.wordPtr;
918 case tokenType::STRING:
919 case tokenType::EXPRESSION:
920 case tokenType::VARIABLE:
921 case tokenType::VERBATIM:
922 return *data_.stringPtr == *tok.data_.stringPtr;
924 case tokenType::COMPOUND:
925 return data_.compoundPtr == tok.data_.compoundPtr;
927 case tokenType::ERROR:
937 return isPunctuation(
p);
946 ?
s == *data_.wordPtr
947 : isString() &&
s == *data_.stringPtr
962 type_ == tokenType::FLOAT
963 &&
equal(data_.floatVal, val)
972 type_ == tokenType::DOUBLE
973 &&
equal(data_.doubleVal, val)
986 return !isPunctuation(
p);