[INFO] cloning repository https://github.com/johncallahan/rindy [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/johncallahan/rindy" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] c6896c50bb25a6e733bafef979c9ae0fc90b9cbc [INFO] checking johncallahan/rindy against try#f47dd4da3ae8c32c9e65d307bfe640b143e674df for pr-77526 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fjohncallahan%2Frindy" "/workspace/builds/worker-3/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-3/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/johncallahan/rindy 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/johncallahan/rindy [INFO] finished tweaking git repo https://github.com/johncallahan/rindy [INFO] tweaked toml for git repo https://github.com/johncallahan/rindy written to /workspace/builds/worker-3/source/Cargo.toml [INFO] crate git repo https://github.com/johncallahan/rindy 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] Blocking waiting for file lock on package cache [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded cstr-macro v0.1.0 [INFO] [stderr] Downloaded libcruby-sys v0.7.5 [INFO] [stderr] Downloaded backtrace v0.3.11 [INFO] [stderr] Downloaded indy-sys v1.8.2 [INFO] [stderr] Downloaded helix v0.7.5 [INFO] [stderr] Downloaded indy v1.8.2 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/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] [stdout] 391c04234fafafbff26644547a02fd494ed162cb20cdf463eaee76b88b26fef5 [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" "391c04234fafafbff26644547a02fd494ed162cb20cdf463eaee76b88b26fef5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "391c04234fafafbff26644547a02fd494ed162cb20cdf463eaee76b88b26fef5", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "391c04234fafafbff26644547a02fd494ed162cb20cdf463eaee76b88b26fef5", kill_on_drop: false }` [INFO] [stdout] 391c04234fafafbff26644547a02fd494ed162cb20cdf463eaee76b88b26fef5 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3/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] ef8d179e6b2f16fb251ac96508edec2c942021b274e27be73cc4ab88893f0698 [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" "ef8d179e6b2f16fb251ac96508edec2c942021b274e27be73cc4ab88893f0698", kill_on_drop: false }` [INFO] [stderr] Compiling unicode-xid v0.1.0 [INFO] [stderr] Compiling memchr v2.2.0 [INFO] [stderr] Compiling syn v0.15.32 [INFO] [stderr] Checking libc v0.2.41 [INFO] [stderr] Compiling regex v1.1.6 [INFO] [stderr] Compiling failure_derive v0.1.5 [INFO] [stderr] Checking cfg-if v0.1.7 [INFO] [stderr] Compiling serde v1.0.90 [INFO] [stderr] Compiling num-derive v0.2.4 [INFO] [stderr] Compiling libcruby-sys v0.7.5 [INFO] [stderr] Checking futures v0.1.26 [INFO] [stderr] Checking cstr-macro v0.1.0 [INFO] [stderr] Compiling backtrace-sys v0.1.28 [INFO] [stderr] Compiling regex-syntax v0.6.6 [INFO] [stderr] Checking log v0.4.6 [INFO] [stderr] Compiling proc-macro2 v0.4.27 [INFO] [stderr] Compiling quote v0.6.12 [INFO] [stderr] Checking helix v0.7.5 [INFO] [stderr] Checking backtrace v0.3.11 [INFO] [stderr] Compiling aho-corasick v0.7.3 [INFO] [stderr] Compiling synstructure v0.10.1 [INFO] [stderr] Compiling indy-sys v1.8.2 [INFO] [stderr] Compiling serde_derive v1.0.90 [INFO] [stderr] Checking serde_json v1.0.39 [INFO] [stderr] Checking failure v0.1.5 [INFO] [stderr] Checking indy v1.8.2 [INFO] [stderr] Checking rindy v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] {"reason":"compiler-message","package_id":"rindy 0.1.0 (path+file:///opt/rustwide/workdir)","target":{"kind":["cdylib"],"crate_types":["cdylib"],"name":"rindy","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":6839,"byte_end":6842,"line_start":233,"line_end":233,"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":1882,"byte_end":1927,"line_start":71,"line_end":71,"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":11347,"byte_end":11919,"line_start":475,"line_end":493,"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: { &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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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":11347,"byte_end":11919,"line_start":475,"line_end":493,"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: { &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}],"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":19263,"byte_end":19707,"line_start":760,"line_end":775,"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: { () },","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}],"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/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":286,"byte_end":2647,"line_start":17,"line_end":82,"column_start":1,"column_end":2,"is_primary":false,"text":[{"text":"ruby! {","highlight_start":1,"highlight_end":8},{"text":" class IndyWallet {","highlight_start":1,"highlight_end":23},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" name: String,","highlight_start":1,"highlight_end":26},{"text":" handle: i32","highlight_start":1,"highlight_end":24},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" def initialize(helix, name: String) {","highlight_start":1,"highlight_end":46},{"text":" let handle = 0;","highlight_start":1,"highlight_end":28},{"text":" IndyWallet { helix, name, handle }","highlight_start":1,"highlight_end":47},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" def create(&self) {","highlight_start":1,"highlight_end":28},{"text":" let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":" let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":" wallet::create_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def open(&mut self) {","highlight_start":1,"highlight_end":30},{"text":" let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":" let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":" self.handle = wallet::open_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":86},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def close(&self) {","highlight_start":1,"highlight_end":27},{"text":" wallet::close_wallet(self.handle).wait().unwrap();","highlight_start":1,"highlight_end":63},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def delete(&self) {","highlight_start":1,"highlight_end":28},{"text":" let config = format!(\"{{\\\"id\\\":\\\"wallet{}\\\"}}\", self.name);","highlight_start":1,"highlight_end":72},{"text":" let credentials = String::from(\"{\\\"key\\\":\\\"8dvfYSt5d1taSd6yJdpjq4emkwsPDDLYxkNFysFD2cZY\\\",\\\"key_derivation_method\\\":\\\"RAW\\\"}\");","highlight_start":1,"highlight_end":140},{"text":"","highlight_start":1,"highlight_end":1},{"text":" wallet::delete_wallet(&config, &credentials).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" }","highlight_start":1,"highlight_end":6},{"text":"","highlight_start":1,"highlight_end":1},{"text":" class IndyPool {","highlight_start":1,"highlight_end":21},{"text":" struct {","highlight_start":1,"highlight_end":17},{"text":" name: String,","highlight_start":1,"highlight_end":26},{"text":" handle: i32","highlight_start":1,"highlight_end":24},{"text":" }","highlight_start":1,"highlight_end":10},{"text":"","highlight_start":1,"highlight_end":1},{"text":" def initialize(helix, name: String) {","highlight_start":1,"highlight_end":46},{"text":" let handle = 0;","highlight_start":1,"highlight_end":28},{"text":" const PROTOCOL_VERSION: usize = 2;","highlight_start":1,"highlight_end":47},{"text":" pool::set_protocol_version(PROTOCOL_VERSION).wait().unwrap();","highlight_start":1,"highlight_end":74},{"text":" IndyPool { helix, name, handle }","highlight_start":1,"highlight_end":45},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" ","highlight_start":1,"highlight_end":9},{"text":" def create(&self) {","highlight_start":1,"highlight_end":28},{"text":" let pool_config_file = create_genesis_txn_file_for_pool(&self.name);","highlight_start":1,"highlight_end":81},{"text":" let pool_config = json!({","highlight_start":1,"highlight_end":38},{"text":" \"genesis_txn\" : &pool_config_file","highlight_start":1,"highlight_end":50},{"text":" });","highlight_start":1,"highlight_end":16},{"text":" pool::create_pool_ledger_config(&self.name, Some(&pool_config.to_string())).wait().unwrap();","highlight_start":1,"highlight_end":105},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def open(&mut self) {","highlight_start":1,"highlight_end":30},{"text":" self.handle = pool::open_pool_ledger(&self.name, None).wait().unwrap();","highlight_start":1,"highlight_end":84},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def close(&self) {","highlight_start":1,"highlight_end":27},{"text":" pool::close_pool_ledger(self.handle).wait().unwrap();","highlight_start":1,"highlight_end":66},{"text":" }","highlight_start":1,"highlight_end":10},{"text":" def delete(&self) {","highlight_start":1,"highlight_end":28},{"text":" pool::delete_pool_ledger(&self.name).wait().unwrap();","highlight_start":1,"highlight_end":66},{"text":" }","highlight_start":1,"highlight_end":10},{"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":"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:17: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;12m17\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;12m18\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 IndyWallet {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m19\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 struct {\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m20\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 name: String,\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;12m81\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;12m82\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