# Access syntax object of defined procedure?

**URL:** <https://racket.discourse.group/t/access-syntax-object-of-defined-procedure/1301>\
**Category:** Questions & Answers\
**Created:** [September 14, 2022, 6:19pm UTC](https://racket.discourse.group/t/access-syntax-object-of-defined-procedure/1301 "2022-09-14T18:19:54Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![wenzeljakob](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/wenzeljakob/32/725_2.png) [@wenzeljakob](https://racket.discourse.group/u/wenzeljakob)\
**Post date:** [September 14, 2022, 6:19pm UTC](https://racket.discourse.group/t/access-syntax-object-of-defined-procedure/1301/1 "2022-09-14T18:19:54Z")

</div>

Dear all,

I am looking into Racket with an interest in meta-programming/program transformations. Racket's macros & support for pattern-matching the AST are very powerful but appear somewhat static to me. They can be used to encode a one-time transformation of a given piece of code.

I am wondering: is there any way to _continue_ inspecting or transforming procedures once they have already been defined? For example, in Racket BC, it was possible to disassemble bytecode to peek into the underlying representation/S-expressions, but in Racket CS this has been replaced by machine code.

Basically I am looking for a hypothetical `(get-syntax-object-of-procedure f)` where `f` is a defined procedure following macro expansion.

Many thanks!  
Wenzel

---

<div class="post-metadata">

**Author:** ![sorawee](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@sorawee](https://racket.discourse.group/u/sorawee)\
**Post date:** [September 14, 2022, 7:12pm UTC](https://racket.discourse.group/t/access-syntax-object-of-defined-procedure/1301/2 "2022-09-14T19:12:19Z")

</div>

Not by default. But you can create a macro `define/stx` that defines a structure that pretends to be a procedure. The structure would then hold both the actual procedure and the syntax object.

See also: [https://stackoverflow.com/a/60016344/718349](https://stackoverflow.com/a/60016344/718349)

---

<div class="post-metadata">

**Author:** ![wenzeljakob](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/wenzeljakob/32/725_2.png) [@wenzeljakob](https://racket.discourse.group/u/wenzeljakob)\
**Post date:** [September 15, 2022, 2:52pm UTC](https://racket.discourse.group/t/access-syntax-object-of-defined-procedure/1301/3 "2022-09-15T14:52:51Z")

</div>

That's a great trick, many thanks!
