Skip to content
  • Mark OLESEN's avatar
    ENH: improve stream handling of expansions (#2095) · 44a243a9
    Mark OLESEN authored
    * removed internal upper limit on word/string length for parsed input.
      - Although it has not caused many problems, no reason to retain
        these limits.
      - simplify some of the internal logic for reading string-like items.
      - localize parsers for better separation from the header
      - expose new function seekCommentEnd_Cstyle(), as useful
        handler of C-style comments
    * exclude imbalanced closing ')' from word/variable
      - previously included this into the word/variable, but makes more
        sense to leave on the parser for the following token.
        Prevents content like 'vector (10 20 $zmax);' from being parsed
        as '$zmax)' instead of as '$zmax' followed by a ')'.
        No conceivable reason that the former would actually be desirable,
        but can still be obtained with brace notation: Eg, '${zmax)}'
    * consistent handling of ${{ ... }} expressions
      - within a dictionary content, the following construct was
        incorrectly processed:
            value ${{2*sqrt(0.5)}};
        Complains about no dictionary/env variable "{2*sqrt(0.5)}"
        Now trap expressions directly and assign their own token type
        while reading. Later expansion can then be properly passed to
        the exprDriver (evalEntry) instead of incorrectly trying
        variable expansion.
        Does not alter the use of expressions embedded within other
        expansions. Eg, "file${{10*2}}"
    * improve #eval { ... } brace slurping
      - the initial implementation of this was rudimentary and simply
        grabbed everything until the next '}'.  Now continue to grab
        content until braces are properly balanced
        Eg, the content:   value #eval{${radius}*2};
        would have previously terminated prematurely with "${radius" for
        the expression!
        both the ${{ expr }} parsed input and the #eval { ... } input
        discard C/C++ comments during reading to reduce intermediate
        overhead for content that will be discarded before evaluation
    * tighten recognition of verbatim strings and expressions.
      - parser was previously sloppy and would have accepted content such
        as "# { ..." (for example) as an verbatim string introducer.
        Now only accept parse if there are no intermediate characters