def _with_meta(gen_node):
@wraps(gen_node)<EOL>def with_meta(<EOL>ctx: ParserContext,<EOL>form: Union[llist.List, lmap.Map, ISeq, lset.Set, vec.Vector],<EOL>) -> Node:<EOL><INDENT>assert not ctx.is_quoted, "<STR_LIT>"<EOL>descriptor = gen_node(ctx, form)<EOL>if isinstance(form, IMeta):<EOL><INDENT>assert isinstance(form.meta, (lmap.Map, type(None)))<EOL>form_meta = _clean_meta(form.meta)<EOL>if form_meta is not None:<EOL><INDENT>meta_ast = _parse_ast(ctx, form_meta)<EOL>assert isinstance(meta_ast, MapNode) or (<EOL>isinstance(meta_ast, Const) and meta_ast.type == ConstType.MAP<EOL>)<EOL>return WithMeta(<EOL>form=form, meta=meta_ast, expr=descriptor, env=ctx.get_node_env()<EOL>)<EOL><DEDENT><DEDENT>return descriptor<EOL><DEDENT>return with_meta<EOL>
Wraps the node generated by gen_node in a :with-meta AST node if the
    original form has meta.

    :with-meta AST nodes are used for non-quoted collection literals and for
    function expressions.