]> granicus.if.org Git - graphviz/commit
avoid dynamic allocation of token buffer during style parsing
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 19 Jun 2022 16:54:29 +0000 (09:54 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sun, 19 Jun 2022 16:54:29 +0000 (09:54 -0700)
commit91a0afa14eb7a51a9b8ebd1e57b40cf190bb8c37
treeb423619492b6351e2ea8849ab68a352f6ba95872
parentc3747aed9ce6cac02e61f5d0c6d786b677d3c6b7
avoid dynamic allocation of token buffer during style parsing

The style parsing code repeatedly calls `style_token` to tokenize input. It was
extracting the token into a dynamic buffer, `xb`. However, this is unnecessary.
Instead we can yield tokens as base and offset into the original input string,
avoiding heap allocation altogether.

It is possible this approach could be pushed “outwards,” applying the same
optimization to construction of the style itself that is returned by
`parse_style`. This would remove what the leading comment describes as “one of
the worst internal designs in graphviz.” However, this would be an API break,
and a pretty subtle one. The style buffer of `'\0'` separated strings is
available to plugins and applications in the GVC `.rawstyle` field. Altering
how this field represents the style could lead to uncaught and confusing
downstream problems. If this kind of change is done in future, I would recommend
renaming the field entirely to make any external uses break loudly at
compilation time.
lib/common/emit.c