def _read_meta(ctx: ReaderContext) -> IMeta:
start = ctx.reader.advance()<EOL>assert start == "<STR_LIT>"<EOL>meta = _read_next_consuming_comment(ctx)<EOL>meta_map: Optional[lmap.Map[LispForm, LispForm]] = None<EOL>if isinstance(meta, symbol.Symbol):<EOL><INDENT>meta_map = lmap.map({keyword.keyword("<STR_LIT>"): meta})<EOL><DEDENT>elif isinstance(meta, keyword.Keyword):<EOL><INDENT>meta_map = lmap.map({meta: True})<EOL><DEDENT>elif isinstance(meta, lmap.Map):<EOL><INDENT>meta_map = meta<EOL><DEDENT>else:<EOL><INDENT>raise SyntaxError(<EOL>f"<STR_LIT>"<EOL>)<EOL><DEDENT>obj_with_meta = _read_next_consuming_comment(ctx)<EOL>try:<EOL><INDENT>return obj_with_meta.with_meta(meta_map)  <EOL><DEDENT>except AttributeError:<EOL><INDENT>raise SyntaxError(<EOL>f"<STR_LIT>"<EOL>)<EOL><DEDENT>
Read metadata and apply that to the next object in the
    input stream.