[INFO] cloning repository https://github.com/the-wendell/margin_calculator [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/the-wendell/margin_calculator" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fthe-wendell%2Fmargin_calculator", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fthe-wendell%2Fmargin_calculator'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 5d698d65292c77340375c66975732c6c2faa784d [INFO] checking the-wendell/margin_calculator against try#f47dd4da3ae8c32c9e65d307bfe640b143e674df for pr-77526 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fthe-wendell%2Fmargin_calculator" "/workspace/builds/worker-2/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-2/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/the-wendell/margin_calculator on toolchain f47dd4da3ae8c32c9e65d307bfe640b143e674df [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+f47dd4da3ae8c32c9e65d307bfe640b143e674df" "read-manifest" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/the-wendell/margin_calculator [INFO] finished tweaking git repo https://github.com/the-wendell/margin_calculator [INFO] tweaked toml for git repo https://github.com/the-wendell/margin_calculator written to /workspace/builds/worker-2/source/Cargo.toml [INFO] crate git repo https://github.com/the-wendell/margin_calculator already has a lockfile, it will not be regenerated [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+f47dd4da3ae8c32c9e65d307bfe640b143e674df" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded cstr-macro v0.1.0 [INFO] [stderr] Downloaded libcruby-sys v0.7.5 [INFO] [stderr] Downloaded helix v0.7.5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:d92eaeed33fa75130ca1ee6c8a01d1ffb62bac859dfdfb3450e3e5d1c0146529" "/opt/rustwide/cargo-home/bin/cargo" "+f47dd4da3ae8c32c9e65d307bfe640b143e674df" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 8c994168b6ee9b0463f273e7c363d9ca7b904d0c8d21233e7dbf24fed0f73042 [INFO] running `Command { std: "docker" "start" "-a" "8c994168b6ee9b0463f273e7c363d9ca7b904d0c8d21233e7dbf24fed0f73042", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "8c994168b6ee9b0463f273e7c363d9ca7b904d0c8d21233e7dbf24fed0f73042", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "8c994168b6ee9b0463f273e7c363d9ca7b904d0c8d21233e7dbf24fed0f73042", kill_on_drop: false }` [INFO] [stdout] 8c994168b6ee9b0463f273e7c363d9ca7b904d0c8d21233e7dbf24fed0f73042 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-2/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:d92eaeed33fa75130ca1ee6c8a01d1ffb62bac859dfdfb3450e3e5d1c0146529" "/opt/rustwide/cargo-home/bin/cargo" "+f47dd4da3ae8c32c9e65d307bfe640b143e674df" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 3c7fceb3aaceda8729a1dbbf86c7bfa6c42b9aae9ee05824d3276bb394e99be0 [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "3c7fceb3aaceda8729a1dbbf86c7bfa6c42b9aae9ee05824d3276bb394e99be0", kill_on_drop: false }` [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Compiling libcruby-sys v0.7.5 [INFO] [stderr] Checking libc v0.2.42 [INFO] [stderr] Checking cstr-macro v0.1.0 [INFO] [stderr] Checking helix v0.7.5 [INFO] [stderr] Checking margin_calculator v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] {"reason":"compiler-message","package_id":"margin_calculator 0.1.0 (path+file:///opt/rustwide/workdir)","target":{"kind":["cdylib"],"crate_types":["cdylib"],"name":"margin_calculator","src_path":"/opt/rustwide/workdir/src/lib.rs","edition":"2015","doctest":false,"test":true},"message":{"message":"use of deprecated macro `try`: use the `?` operator instead","code":{"code":"deprecated","explanation":null},"level":"warning","spans":[{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":2976,"byte_end":2979,"line_start":112,"line_end":112,"column_start":28,"column_end":31,"is_primary":true,"text":[{"text":" let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":28,"highlight_end":31}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":735,"byte_end":780,"line_start":30,"line_end":30,"column_start":13,"column_end":58,"is_primary":false,"text":[{"text":" codegen_define_method!(def, $class, $method);","highlight_start":13,"highlight_end":58}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":245,"byte_end":284,"line_start":10,"line_end":10,"column_start":17,"column_end":56,"is_primary":false,"text":[{"text":" codegen_class_binding!($class, $class);","highlight_start":17,"highlight_end":56}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/codegen.rs","byte_start":187,"byte_end":217,"line_start":10,"line_end":10,"column_start":9,"column_end":39,"is_primary":false,"text":[{"text":" codegen_init! { [ $($ast)* ] }","highlight_start":9,"highlight_end":39}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1604,"byte_end":1621,"line_start":80,"line_end":80,"column_start":9,"column_end":26,"is_primary":false,"text":[{"text":" codegen! { $ast }","highlight_start":9,"highlight_end":26}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":13142,"byte_end":13711,"line_start":541,"line_end":559,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":18046,"byte_end":18807,"line_start":718,"line_end":741,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8683,"byte_end":9263,"line_start":376,"line_end":394,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7625,"byte_end":7861,"line_start":332,"line_end":340,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5224,"byte_end":5671,"line_start":234,"line_end":248,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":7003,"byte_end":7157,"line_start":308,"line_end":314,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":15760,"byte_end":16233,"line_start":638,"line_end":653,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":15760,"byte_end":16233,"line_start":638,"line_end":653,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":15760,"byte_end":16233,"line_start":638,"line_end":653,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":20178,"byte_end":20608,"line_start":796,"line_end":810,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":16858,"byte_end":17304,"line_start":676,"line_end":691,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":15760,"byte_end":16233,"line_start":638,"line_end":653,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":8104,"byte_end":8376,"line_start":352,"line_end":361,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":6465,"byte_end":6697,"line_start":286,"line_end":294,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":5787,"byte_end":5894,"line_start":256,"line_end":260,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":4193,"byte_end":4661,"line_start":197,"line_end":212,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":3706,"byte_end":3915,"line_start":176,"line_end":183,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1743,"byte_end":1985,"line_start":88,"line_end":97,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/mod.rs","byte_start":201,"byte_end":315,"line_start":19,"line_end":23,"column_start":9,"column_end":10,"is_primary":false,"text":[{"text":" parse! {","highlight_start":9,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: { ast: [] }","highlight_start":1,"highlight_end":31},{"text":" }","highlight_start":1,"highlight_end":10}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":{"span":{"file_name":"src/lib.rs","byte_start":3370,"byte_end":5928,"line_start":87,"line_end":165,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"ruby! {","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class Calculator {","highlight_start":1,"highlight_end":23},{"text":" def cm0(values: Cm0Values) -> MarginCalculation {","highlight_start":1,"highlight_end":58},{"text":" calculate_cm0(values)","highlight_start":1,"highlight_end":34},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def cm1(values: Cm1Values) -> MarginCalculation {","highlight_start":1,"highlight_end":58},{"text":" calculate_cm1(values)","highlight_start":1,"highlight_end":34},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def cm2(values: Cm2Values) -> MarginCalculation {","highlight_start":1,"highlight_end":58},{"text":" calculate_cm2(values)","highlight_start":1,"highlight_end":34},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def lowest_possible_price(values: Cm2Values, target_margin: f64, margin_category: String) -> f64 {","highlight_start":1,"highlight_end":107},{"text":" calculate_lowest_possible_price(values, target_margin, margin_category)","highlight_start":1,"highlight_end":84},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class MarginCalculation {","highlight_start":1,"highlight_end":30},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" absolute: f64,","highlight_start":1,"highlight_end":27},{"text":" relative: f64","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def initialize(helix, absolute: f64, relative: f64) {","highlight_start":1,"highlight_end":62},{"text":" MarginCalculation { helix, absolute, relative }","highlight_start":1,"highlight_end":60},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def absolute(&self) -> f64 {","highlight_start":1,"highlight_end":37},{"text":" self.absolute","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def relative(&self) -> f64 {","highlight_start":1,"highlight_end":37},{"text":" self.relative","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class Cm0Values {","highlight_start":1,"highlight_end":22},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" shipping_revenue: f64,","highlight_start":1,"highlight_end":35},{"text":" net_retail: f64,","highlight_start":1,"highlight_end":29},{"text":" wholesale_price: f64","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" def initialize(helix, shipping_revenue: f64, net_retail: f64, wholesale_price: f64) {","highlight_start":1,"highlight_end":94},{"text":" Cm0Values { helix, shipping_revenue, net_retail, wholesale_price }","highlight_start":1,"highlight_end":79},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class Cm1Values {","highlight_start":1,"highlight_end":22},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" cm0values: Cm0Values,","highlight_start":1,"highlight_end":34},{"text":" return_rate: f64,","highlight_start":1,"highlight_end":30},{"text":" return_shipping: f64,","highlight_start":1,"highlight_end":34},{"text":" return_fulfillment: f64,","highlight_start":1,"highlight_end":37},{"text":" cancellation_rate: f64,","highlight_start":1,"highlight_end":36},{"text":" depreciation: f64","highlight_start":1,"highlight_end":30},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def initialize(helix, cm0values: Cm0Values, return_rate: f64, return_shipping: f64,","highlight_start":1,"highlight_end":92},{"text":" return_fulfillment: f64, cancellation_rate: f64, depreciation: f64) {","highlight_start":1,"highlight_end":82},{"text":" Cm1Values { helix, cm0values, return_rate, return_shipping, return_fulfillment,","highlight_start":1,"highlight_end":96},{"text":" cancellation_rate, depreciation }","highlight_start":1,"highlight_end":54},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class Cm2Values {","highlight_start":1,"highlight_end":22},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" cm1values: Cm1Values,","highlight_start":1,"highlight_end":34},{"text":" outbound_shipping: f64,","highlight_start":1,"highlight_end":36},{"text":" inbound_shipping: f64,","highlight_start":1,"highlight_end":35},{"text":" packaging: f64,","highlight_start":1,"highlight_end":28},{"text":" fulfillment: f64,","highlight_start":1,"highlight_end":30},{"text":" payment_cost: f64,","highlight_start":1,"highlight_end":31},{"text":" refunds: f64,","highlight_start":1,"highlight_end":26},{"text":" retail_price: f64","highlight_start":1,"highlight_end":30},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def initialize(helix, cm1values: Cm1Values, outbound_shipping: f64, inbound_shipping: f64,","highlight_start":1,"highlight_end":99},{"text":" packaging: f64, fulfillment: f64, payment_cost: f64, refunds: f64, retail_price: f64 ) {","highlight_start":1,"highlight_end":101},{"text":" Cm2Values { helix, cm1values, outbound_shipping, inbound_shipping,","highlight_start":1,"highlight_end":83},{"text":" refunds, packaging, fulfillment, payment_cost, retail_price }","highlight_start":1,"highlight_end":82},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null},"macro_decl_name":"ruby!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/mod.rs","byte_start":147,"byte_end":323,"line_start":17,"line_end":25,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! ruby {","highlight_start":1,"highlight_end":1},{"text":" { $($rest:tt)* } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: top_level,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: { ast: [] }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":1},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: top_level,","highlight_start":1,"highlight_end":1},{"text":" buffer: {},","highlight_start":1,"highlight_end":1},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: top_level,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" pub: false,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" pub: false,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":1},{"text":" pub: false,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" pub: false,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" pub: true,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":1},{"text":" reopen: false,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" pub: $pub,","highlight_start":1,"highlight_end":1},{"text":" reopen: true,","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_class,","highlight_start":1,"highlight_end":1},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":1},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":" struct: (),","highlight_start":1,"highlight_end":1},{"text":" methods: []","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":1},{"text":" struct: (),","highlight_start":1,"highlight_end":1},{"text":" methods: []","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":1},{"text":" methods: []","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":" stack: $stack","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: {},","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":1},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":1},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: top_level,","highlight_start":1,"highlight_end":1},{"text":" buffer: $program,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":1},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" class: $class,","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: initializer,","highlight_start":1,"highlight_end":1},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { },","highlight_start":1,"highlight_end":1},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: initializer,","highlight_start":1,"highlight_end":1},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { },","highlight_start":1,"highlight_end":1},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { & },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { & },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: instance_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: {","highlight_start":1,"highlight_end":1},{"text":" ownership: { },","highlight_start":1,"highlight_end":1},{"text":" name: $self_arg","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" args: [ ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: class_method,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: (),","highlight_start":1,"highlight_end":1},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: finish_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: $type,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: $self,","highlight_start":1,"highlight_end":1},{"text":" args: $args,","highlight_start":1,"highlight_end":1},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":1},{"text":" body: $body","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: initializer,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":1},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":1},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":1},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: finish_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: initializer,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":1},{"text":" self: $self,","highlight_start":1,"highlight_end":1},{"text":" args: $args,","highlight_start":1,"highlight_end":1},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":1},{"text":" body: $body","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":1},{"text":" meta: $meta,","highlight_start":1,"highlight_end":1},{"text":" struct: $struct,","highlight_start":1,"highlight_end":1},{"text":" methods: $methods","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":1},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":1},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":1},{"text":" body: uninitialized","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: finish_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: {","highlight_start":1,"highlight_end":1},{"text":" type: $type,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" self: $self,","highlight_start":1,"highlight_end":1},{"text":" args: $args,","highlight_start":1,"highlight_end":1},{"text":" ret: { () },","highlight_start":1,"highlight_end":1},{"text":" body: $body","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" state: finish_method,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":1},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":1},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":1},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":1},{"text":" stack: {","highlight_start":1,"highlight_end":1},{"text":" class: {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" meta: $meta,","highlight_start":1,"highlight_end":1},{"text":" struct: $struct,","highlight_start":1,"highlight_end":1},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":1},{"text":" },","highlight_start":1,"highlight_end":1},{"text":" $($stack)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":1},{"text":" parse_error!(","highlight_start":1,"highlight_end":1},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":1},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":1},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":1},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":1},{"text":" );","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"parse!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/parser.rs","byte_start":1455,"byte_end":20920,"line_start":72,"line_end":823,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! parse {","highlight_start":1,"highlight_end":21},{"text":" // STATE: top_level","highlight_start":1,"highlight_end":24},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: { ast: $ast:tt }","highlight_start":1,"highlight_end":32},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" codegen! { $ast }","highlight_start":1,"highlight_end":26},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: top_level,","highlight_start":1,"highlight_end":26},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: { $($stack: tt)* }","highlight_start":1,"highlight_end":34},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":42},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_class","highlight_start":1,"highlight_end":26},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { #[ruby_name = $ruby_name:tt] $($rest:tt)* },","highlight_start":1,"highlight_end":63},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" pub: false,","highlight_start":1,"highlight_end":28},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { pub $($rest:tt)* },","highlight_start":1,"highlight_end":38},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: false,","highlight_start":1,"highlight_end":24},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: true,","highlight_start":1,"highlight_end":27},{"text":" reopen: false,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { reopen $($rest:tt)* },","highlight_start":1,"highlight_end":41},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: false,","highlight_start":1,"highlight_end":27},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" pub: $pub,","highlight_start":1,"highlight_end":27},{"text":" reopen: true,","highlight_start":1,"highlight_end":30},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: uninitialized,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_class,","highlight_start":1,"highlight_end":32},{"text":" buffer: { class $name $($rest)* },","highlight_start":1,"highlight_end":47},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_class,","highlight_start":1,"highlight_end":28},{"text":" buffer: { class $name:tt { $($body:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":66},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" pub: $pub:tt,","highlight_start":1,"highlight_end":26},{"text":" reopen: $reopen:tt,","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($body)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: (),","highlight_start":1,"highlight_end":32},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" program: { $($rest)* },","highlight_start":1,"highlight_end":40},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_struct","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: { struct { $($struct:tt)* } $($rest:tt)* },","highlight_start":1,"highlight_end":60},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":60},{"text":" struct: (),","highlight_start":1,"highlight_end":28},{"text":" methods: []","highlight_start":1,"highlight_end":28},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!({ reopen: $reopen }, \"Cannot define a struct in `reopen class`\");","highlight_start":1,"highlight_end":93},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":58},{"text":" struct: { $($struct)* },","highlight_start":1,"highlight_end":45},{"text":" methods: []","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_struct,","highlight_start":1,"highlight_end":29},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: $stack:tt","highlight_start":1,"highlight_end":25},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: $stack","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_methods","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { #[ruby_name = $ruby_name:tt] def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":76},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $ruby_name },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: { def $name:tt $($rest:tt)* },","highlight_start":1,"highlight_end":47},{"text":" stack: { $($stack:tt)* }","highlight_start":1,"highlight_end":33},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_method,","highlight_start":1,"highlight_end":33},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $name,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { stringify!($name) },","highlight_start":1,"highlight_end":50},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":30},{"text":" buffer: {},","highlight_start":1,"highlight_end":20},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" program: $program:tt,","highlight_start":1,"highlight_end":34},{"text":" ast: [ $($ast:tt)* ]","highlight_start":1,"highlight_end":33},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_has_initialize!($class, \"Classes defining a struct must implement `initialize`\");","highlight_start":1,"highlight_end":97},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: top_level,","highlight_start":1,"highlight_end":30},{"text":" buffer: $program,","highlight_start":1,"highlight_end":30},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" ast: [ $($ast)* $class ]","highlight_start":1,"highlight_end":41},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_method","highlight_start":1,"highlight_end":27},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":35},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class: $class:tt,","highlight_start":1,"highlight_end":30},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_not_reopen!($class, \"Cannot define `initialize` in `reopen class`\");","highlight_start":1,"highlight_end":84},{"text":" assert_has_struct!($class, \"Cannot define `initialize` without a `struct`\");","highlight_start":1,"highlight_end":85},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":47},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" class: $class,","highlight_start":1,"highlight_end":31},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_method,","highlight_start":1,"highlight_end":29},{"text":" buffer: { ( $($args:tt)* ) $($rest:tt)* },","highlight_start":1,"highlight_end":51},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":36},{"text":" buffer: { $($args)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":39},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":39},{"text":" class_body: { $($rest)* },","highlight_start":1,"highlight_end":43},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments_initialize","highlight_start":1,"highlight_end":41},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":49},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments_initialize,","highlight_start":1,"highlight_end":43},{"text":" buffer: { $helix_arg:tt },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_helix_arg!($helix_arg);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: initialize,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: { \"initialize\" },","highlight_start":1,"highlight_end":49},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $helix_arg","highlight_start":1,"highlight_end":41},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_arguments","highlight_start":1,"highlight_end":30},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":53},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { &mut $self_arg:tt },","highlight_start":1,"highlight_end":39},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { &mut },","highlight_start":1,"highlight_end":45},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":50},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { & $self_arg:tt },","highlight_start":1,"highlight_end":36},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { & },","highlight_start":1,"highlight_end":42},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":"{","highlight_start":1,"highlight_end":2},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt, $($args:tt)+ },","highlight_start":1,"highlight_end":48},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $self_arg:tt },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_valid_self_arg!($self_arg);","highlight_start":1,"highlight_end":43},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: instance_method,","highlight_start":1,"highlight_end":43},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: {","highlight_start":1,"highlight_end":28},{"text":" ownership: { },","highlight_start":1,"highlight_end":40},{"text":" name: $self_arg","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":23},{"text":" args: [ ],","highlight_start":1,"highlight_end":31},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_arguments,","highlight_start":1,"highlight_end":32},{"text":" buffer: { $($args:tt)* },","highlight_start":1,"highlight_end":34},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" class_body: $class_body:tt,","highlight_start":1,"highlight_end":40},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":38},{"text":" buffer: $class_body,","highlight_start":1,"highlight_end":33},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: class_method,","highlight_start":1,"highlight_end":40},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: (),","highlight_start":1,"highlight_end":30},{"text":" args: [ $($args)* ],","highlight_start":1,"highlight_end":41},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":40},{"text":" body: uninitialized","highlight_start":1,"highlight_end":40},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: parse_return_type","highlight_start":1,"highlight_end":32},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { -> $ret:ty $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":57},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" assert_no_explict_return_for_initializer!({ type: $type }, \"`def initialize` cannot have an explicit return type\");","highlight_start":1,"highlight_end":124},{"text":"","highlight_start":1,"highlight_end":1},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $ret },","highlight_start":1,"highlight_end":35},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: initializer,","highlight_start":1,"highlight_end":35},{"text":" rust_name: $rust_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_method_name:tt,","highlight_start":1,"highlight_end":49},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_class_name:ident,","highlight_start":1,"highlight_end":51},{"text":" ruby_name: $ruby_class_name:tt,","highlight_start":1,"highlight_end":48},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: $methods:tt","highlight_start":1,"highlight_end":37},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: initializer,","highlight_start":1,"highlight_end":39},{"text":" rust_name: $rust_method_name,","highlight_start":1,"highlight_end":50},{"text":" ruby_name: $ruby_method_name,","highlight_start":1,"highlight_end":50},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { $rust_class_name },","highlight_start":1,"highlight_end":47},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_class_name,","highlight_start":1,"highlight_end":49},{"text":" ruby_name: $ruby_class_name,","highlight_start":1,"highlight_end":49},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: $methods","highlight_start":1,"highlight_end":38},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: parse_return_type,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $body:block $($rest:tt)* },","highlight_start":1,"highlight_end":46},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: {","highlight_start":1,"highlight_end":22},{"text":" type: $type:tt,","highlight_start":1,"highlight_end":32},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":42},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" self: $self:tt,","highlight_start":1,"highlight_end":32},{"text":" args: $args:tt,","highlight_start":1,"highlight_end":32},{"text":" ret: uninitialized,","highlight_start":1,"highlight_end":36},{"text":" body: uninitialized","highlight_start":1,"highlight_end":36},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: finish_method,","highlight_start":1,"highlight_end":34},{"text":" buffer: { $($rest)* },","highlight_start":1,"highlight_end":35},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" method: {","highlight_start":1,"highlight_end":26},{"text":" type: $type,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" self: $self,","highlight_start":1,"highlight_end":33},{"text":" args: $args,","highlight_start":1,"highlight_end":33},{"text":" ret: { () },","highlight_start":1,"highlight_end":33},{"text":" body: $body","highlight_start":1,"highlight_end":32},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // STATE: finish_method","highlight_start":1,"highlight_end":28},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":6},{"text":" state: finish_method,","highlight_start":1,"highlight_end":30},{"text":" buffer: $buffer:tt,","highlight_start":1,"highlight_end":28},{"text":" stack: {","highlight_start":1,"highlight_end":17},{"text":" method: $method:tt,","highlight_start":1,"highlight_end":32},{"text":" class: {","highlight_start":1,"highlight_end":21},{"text":" type: class,","highlight_start":1,"highlight_end":29},{"text":" rust_name: $rust_name:ident,","highlight_start":1,"highlight_end":45},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":42},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":32},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($methods:tt)* ]","highlight_start":1,"highlight_end":45},{"text":" },","highlight_start":1,"highlight_end":15},{"text":" $($stack:tt)*","highlight_start":1,"highlight_end":26},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" } => {","highlight_start":1,"highlight_end":11},{"text":" parse! {","highlight_start":1,"highlight_end":17},{"text":" state: parse_methods,","highlight_start":1,"highlight_end":34},{"text":" buffer: $buffer,","highlight_start":1,"highlight_end":29},{"text":" stack: {","highlight_start":1,"highlight_end":21},{"text":" class: {","highlight_start":1,"highlight_end":25},{"text":" type: class,","highlight_start":1,"highlight_end":33},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":43},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":43},{"text":" meta: $meta,","highlight_start":1,"highlight_end":33},{"text":" struct: $struct,","highlight_start":1,"highlight_end":37},{"text":" methods: [ $($methods)* $method ]","highlight_start":1,"highlight_end":54},{"text":" },","highlight_start":1,"highlight_end":19},{"text":" $($stack)*","highlight_start":1,"highlight_end":27},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"","highlight_start":1,"highlight_end":1},{"text":" // Catch all","highlight_start":1,"highlight_end":17},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $($state:tt)* } => {","highlight_start":1,"highlight_end":27},{"text":" parse_error!(","highlight_start":1,"highlight_end":22},{"text":" \"Unknown parser state. \",","highlight_start":1,"highlight_end":38},{"text":" \"This is possibly a bug in Helix itself, please file an issue \",","highlight_start":1,"highlight_end":77},{"text":" \"with the following debug information:\\n\\n\",","highlight_start":1,"highlight_end":57},{"text":" format_parser_state!($($state)*)","highlight_start":1,"highlight_end":45},{"text":" );","highlight_start":1,"highlight_end":11},{"text":" };","highlight_start":1,"highlight_end":7},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/codegen.rs","byte_start":16,"byte_end":1968,"line_start":2,"line_end":84,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen {","highlight_start":1,"highlight_end":1},{"text":" { [ $($ast:tt)* ] } => {","highlight_start":1,"highlight_end":1},{"text":" codegen! {","highlight_start":1,"highlight_end":1},{"text":" type: top,","highlight_start":1,"highlight_end":1},{"text":" classes: [],","highlight_start":1,"highlight_end":1},{"text":" buffer: [ $($ast)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" codegen_init! { [ $($ast)* ] }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" type: top,","highlight_start":1,"highlight_end":1},{"text":" classes: [ $($class:tt)* ],","highlight_start":1,"highlight_end":1},{"text":" buffer: []","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" codegen! {","highlight_start":1,"highlight_end":1},{"text":" type: done,","highlight_start":1,"highlight_end":1},{"text":" classes: [ $($class)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" type: top,","highlight_start":1,"highlight_end":1},{"text":" classes: [","highlight_start":1,"highlight_end":1},{"text":" $($class:tt)*","highlight_start":1,"highlight_end":1},{"text":" ],","highlight_start":1,"highlight_end":1},{"text":" buffer: [","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":1},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":1},{"text":" methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" $($rest:tt)*","highlight_start":1,"highlight_end":1},{"text":" ]","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" codegen! {","highlight_start":1,"highlight_end":1},{"text":" type: top,","highlight_start":1,"highlight_end":1},{"text":" classes: [","highlight_start":1,"highlight_end":1},{"text":" $($class)*","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" struct: { codegen_struct! { pub: $pub, rust_name: $rust_name, ruby_name: $ruby_name, struct: $struct } },","highlight_start":1,"highlight_end":1},{"text":" methods: [ $( codegen_method! { $method } )* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" ],","highlight_start":1,"highlight_end":1},{"text":" buffer: [ $($rest)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" codegen_extra_impls!({","highlight_start":1,"highlight_end":1},{"text":" type: class,","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name,","highlight_start":1,"highlight_end":1},{"text":" meta: { pub: $pub, reopen: $reopen },","highlight_start":1,"highlight_end":1},{"text":" struct: $struct,","highlight_start":1,"highlight_end":1},{"text":" methods: [ $($method)* ]","highlight_start":1,"highlight_end":1},{"text":" });","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" type: done,","highlight_start":1,"highlight_end":1},{"text":" classes: [ $(","highlight_start":1,"highlight_end":1},{"text":" {","highlight_start":1,"highlight_end":1},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":1},{"text":" ruby_name: $ruby_name:tt,","highlight_start":1,"highlight_end":1},{"text":" struct: { $($struct:tt)* },","highlight_start":1,"highlight_end":1},{"text":" methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" )* ]","highlight_start":1,"highlight_end":1},{"text":" } => {","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":1},{"text":" $($struct)*","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" impl $rust_name {","highlight_start":1,"highlight_end":1},{"text":" $($method)*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" )*","highlight_start":1,"highlight_end":1},{"text":" };","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_init!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":16,"byte_end":317,"line_start":2,"line_end":14,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_init {","highlight_start":1,"highlight_end":1},{"text":" { [ $($class:tt)* ] } => {","highlight_start":1,"highlight_end":1},{"text":" #[allow(non_snake_case)]","highlight_start":1,"highlight_end":1},{"text":" #[no_mangle]","highlight_start":1,"highlight_end":1},{"text":" pub extern \"C\" fn Init_native() {","highlight_start":1,"highlight_end":1},{"text":" $crate::sys::check_version();","highlight_start":1,"highlight_end":1},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":1},{"text":" codegen_class_binding!($class, $class);","highlight_start":1,"highlight_end":1},{"text":" )*","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":" }","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_class_binding!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":335,"byte_end":2003,"line_start":17,"line_end":77,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_class_binding {","highlight_start":1,"highlight_end":37},{"text":" { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: false },","highlight_start":1,"highlight_end":47},{"text":" struct: (),","highlight_start":1,"highlight_end":20},{"text":" methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":" } } => ({","highlight_start":1,"highlight_end":14},{"text":" use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":" let def = $crate::ClassDefinition::new(cstr!($($ruby_name)*));","highlight_start":1,"highlight_end":71},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":11},{"text":" codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":" )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":" unsafe { $rust_name = transmute(def.class) };","highlight_start":1,"highlight_end":54},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: true },","highlight_start":1,"highlight_end":46},{"text":" struct: (),","highlight_start":1,"highlight_end":20},{"text":" methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":" } } => ({","highlight_start":1,"highlight_end":14},{"text":" use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":" let def = $crate::ClassDefinition::reopen(cstr!($($ruby_name)*));","highlight_start":1,"highlight_end":74},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":11},{"text":" codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":" )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":" unsafe { $rust_name = transmute(def.class) };","highlight_start":1,"highlight_end":54},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":" { $class:tt, {","highlight_start":1,"highlight_end":19},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" meta: { pub: $pub:tt, reopen: $reopen:tt },","highlight_start":1,"highlight_end":52},{"text":" struct: { $($struct:tt)* },","highlight_start":1,"highlight_end":36},{"text":" methods: [ $($method:tt)* ]","highlight_start":1,"highlight_end":36},{"text":" } } => ({","highlight_start":1,"highlight_end":14},{"text":" use ::std::mem::transmute;","highlight_start":1,"highlight_end":35},{"text":"","highlight_start":1,"highlight_end":1},{"text":" extern \"C\" fn __alloc__(_klass: $crate::sys::VALUE) -> $crate::sys::VALUE {","highlight_start":1,"highlight_end":84},{"text":" $rust_name::__alloc_with__(None)","highlight_start":1,"highlight_end":45},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let def = $crate::ClassDefinition::wrapped(cstr!($($ruby_name)*), __alloc__);","highlight_start":1,"highlight_end":86},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":11},{"text":" codegen_define_method!(def, $class, $method);","highlight_start":1,"highlight_end":58},{"text":" )*","highlight_start":1,"highlight_end":11},{"text":"","highlight_start":1,"highlight_end":1},{"text":" unsafe { $rust_name = transmute(def.class) }","highlight_start":1,"highlight_end":53},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}},"macro_decl_name":"codegen_define_method!","def_site_span":{"file_name":"/opt/rustwide/cargo-home/registry/src/github.com-1ecc6299db9ec823/helix-0.7.5/src/macros/init.rs","byte_start":2021,"byte_end":7418,"line_start":80,"line_end":252,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"macro_rules! codegen_define_method {","highlight_start":1,"highlight_end":37},{"text":" ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":" }, {","highlight_start":1,"highlight_end":9},{"text":" type: class_method,","highlight_start":1,"highlight_end":28},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" self: (),","highlight_start":1,"highlight_end":18},{"text":" args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":" ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":" body: $body:tt","highlight_start":1,"highlight_end":23},{"text":" }) => ({","highlight_start":1,"highlight_end":13},{"text":" use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":" use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":" extern \"C\" fn __ruby_method__(_: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":78},{"text":" let result = __rust_method__($($arg),*);","highlight_start":1,"highlight_end":53},{"text":"","highlight_start":1,"highlight_end":1},{"text":" match result {","highlight_start":1,"highlight_end":27},{"text":" Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":" Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" #[inline]","highlight_start":1,"highlight_end":18},{"text":" fn __rust_method__($($arg : $crate::sys::VALUE),*) -> Result {","highlight_start":1,"highlight_end":85},{"text":" #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":" use $crate::{FromRuby, ToRuby};","highlight_start":1,"highlight_end":44},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let result: Result<$($ret)*, Error> = handle_exception! {","highlight_start":1,"highlight_end":70},{"text":" $cls_rust_name::$rust_name($($arg),*)","highlight_start":1,"highlight_end":54},{"text":" };","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" result.and_then(ToRuby::to_ruby)","highlight_start":1,"highlight_end":45},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let name = cstr!($($ruby_name)*);","highlight_start":1,"highlight_end":42},{"text":" let method = __ruby_method__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":69},{"text":" let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $def.define_method($crate::MethodDefinition::class(name, method, arity));","highlight_start":1,"highlight_end":82},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":" ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $cls_ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":24},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":28},{"text":" $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":" }, {","highlight_start":1,"highlight_end":9},{"text":" type: instance_method,","highlight_start":1,"highlight_end":31},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" self: { ownership: { $($ownership:tt)* }, name: $self:tt },","highlight_start":1,"highlight_end":68},{"text":" args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":" ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":" body: $body:tt","highlight_start":1,"highlight_end":23},{"text":" }) => ({","highlight_start":1,"highlight_end":13},{"text":" use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":" use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":" extern \"C\" fn __ruby_method__(rb_self: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":84},{"text":" let result = __rust_method__(rb_self, $($arg),*);","highlight_start":1,"highlight_end":62},{"text":"","highlight_start":1,"highlight_end":1},{"text":" match result {","highlight_start":1,"highlight_end":27},{"text":" Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":" Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" #[inline]","highlight_start":1,"highlight_end":18},{"text":" fn __rust_method__(rb_self: VALUE, $($arg : VALUE),*) -> Result {","highlight_start":1,"highlight_end":88},{"text":" #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":" use $crate::{FromRuby, ToRuby};","highlight_start":1,"highlight_end":44},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let rust_self = try!(::from_ruby(rb_self));","highlight_start":1,"highlight_end":157},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let rust_self = ::from_checked(rust_self);","highlight_start":1,"highlight_end":156},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let result: Result<$($ret)*, Error> = handle_exception! {","highlight_start":1,"highlight_end":70},{"text":" rust_self.$rust_name($($arg),*)","highlight_start":1,"highlight_end":48},{"text":" };","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" result.and_then(ToRuby::to_ruby)","highlight_start":1,"highlight_end":45},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let name = cstr!($($ruby_name)*);","highlight_start":1,"highlight_end":42},{"text":" let method = __ruby_method__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":69},{"text":" let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $def.define_method($crate::MethodDefinition::instance(name, method, arity))","highlight_start":1,"highlight_end":84},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"","highlight_start":1,"highlight_end":1},{"text":" ($def:tt, {","highlight_start":1,"highlight_end":16},{"text":" type: class,","highlight_start":1,"highlight_end":21},{"text":" rust_name: $cls_rust_name:tt,","highlight_start":1,"highlight_end":38},{"text":" ruby_name: $cls_ruby_name:tt,","highlight_start":1,"highlight_end":38},{"text":" meta: $meta:tt,","highlight_start":1,"highlight_end":24},{"text":" struct: $struct:tt,","highlight_start":1,"highlight_end":28},{"text":" $($rest:tt)*","highlight_start":1,"highlight_end":21},{"text":" }, {","highlight_start":1,"highlight_end":9},{"text":" type: initializer,","highlight_start":1,"highlight_end":27},{"text":" rust_name: $rust_name:tt,","highlight_start":1,"highlight_end":34},{"text":" ruby_name: { $($ruby_name:tt)* },","highlight_start":1,"highlight_end":42},{"text":" self: { ownership: {}, name: $self:tt },","highlight_start":1,"highlight_end":49},{"text":" args: [ $($arg:tt : $argty:ty),* ],","highlight_start":1,"highlight_end":44},{"text":" ret: { $($ret:tt)* },","highlight_start":1,"highlight_end":30},{"text":" body: $body:tt","highlight_start":1,"highlight_end":23},{"text":" }) => ({","highlight_start":1,"highlight_end":13},{"text":" use $crate::sys::{VALUE};","highlight_start":1,"highlight_end":34},{"text":" use $crate::{Error};","highlight_start":1,"highlight_end":29},{"text":"","highlight_start":1,"highlight_end":1},{"text":" impl $cls_rust_name {","highlight_start":1,"highlight_end":30},{"text":" pub fn new($($arg : $argty),*) -> $($ret)* {","highlight_start":1,"highlight_end":57},{"text":" $cls_rust_name::$rust_name(unsafe { $crate::sys::Qnil } , $($arg),*)","highlight_start":1,"highlight_end":85},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" extern \"C\" fn __ruby_initialize__(rb_self: VALUE, $($arg : VALUE),*) -> VALUE {","highlight_start":1,"highlight_end":88},{"text":" let result = __rust_initialize__(rb_self $(, $arg)*);","highlight_start":1,"highlight_end":66},{"text":"","highlight_start":1,"highlight_end":1},{"text":" match result {","highlight_start":1,"highlight_end":27},{"text":" Ok(value) => return value,","highlight_start":1,"highlight_end":43},{"text":" Err(exception) => unsafe { exception.raise() }","highlight_start":1,"highlight_end":63},{"text":" }","highlight_start":1,"highlight_end":14},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" #[inline]","highlight_start":1,"highlight_end":18},{"text":" fn __rust_initialize__(rb_self: VALUE, $($arg : VALUE),*) -> Result {","highlight_start":1,"highlight_end":92},{"text":" #[allow(unused_imports)]","highlight_start":1,"highlight_end":37},{"text":" use $crate::{FromRuby};","highlight_start":1,"highlight_end":36},{"text":" use $crate::sys::{Data_Set_Struct_Value};","highlight_start":1,"highlight_end":54},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = try!(<$argty>::from_ruby($arg));","highlight_start":1,"highlight_end":60},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $(","highlight_start":1,"highlight_end":15},{"text":" let $arg = <$argty>::from_checked($arg);","highlight_start":1,"highlight_end":57},{"text":" )*","highlight_start":1,"highlight_end":15},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let rust_self = Box::new($cls_rust_name::initialize(rb_self, $($arg),*));","highlight_start":1,"highlight_end":86},{"text":"","highlight_start":1,"highlight_end":1},{"text":" unsafe { Data_Set_Struct_Value(rb_self, ::std::mem::transmute(rust_self)) };","highlight_start":1,"highlight_end":89},{"text":"","highlight_start":1,"highlight_end":1},{"text":" Ok(rb_self)","highlight_start":1,"highlight_end":24},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" let arity = method_arity!($($arg)*);","highlight_start":1,"highlight_end":45},{"text":" let method = __ruby_initialize__ as *const $crate::libc::c_void;","highlight_start":1,"highlight_end":73},{"text":"","highlight_start":1,"highlight_end":1},{"text":" $def.define_method($crate::MethodDefinition::instance(cstr!($($ruby_name)*), method, arity));","highlight_start":1,"highlight_end":102},{"text":" });","highlight_start":1,"highlight_end":8},{"text":"}","highlight_start":1,"highlight_end":2}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}}}],"children":[{"message":"`#[warn(deprecated)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: use of deprecated macro `try`: use the `?` operator instead\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/lib.rs:87:1\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m87\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m/\u001b[0m\u001b[0m \u001b[0m\u001b[0mruby! {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m88\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m89\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m class Calculator {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m90\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m def cm0(values: Cm0Values) -> MarginCalculation {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m...\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m164\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m }\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m165\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|\u001b[0m\u001b[0m \u001b[0m\u001b[0m}\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m\u001b[1m\u001b[33m|_^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(deprecated)]` on by default\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)\u001b[0m\n\n"}} [WARN] too much data in the log, truncating it