Skip to content

Unify grammar for "blocks" #4230

@matklad

Description

@matklad
fn main() {
    try { 92 };
    async { 92 };
    unsafe { 92 };
}
FN_DEF@0..66
  FN_KW@0..2 "fn"
  WHITESPACE@2..3 " "
  NAME@3..7
    IDENT@3..7 "main"
  PARAM_LIST@7..9
    L_PAREN@7..8 "("
    R_PAREN@8..9 ")"
  WHITESPACE@9..10 " "
  BLOCK_EXPR@10..66
    BLOCK@10..66
      L_CURLY@10..11 "{"
      WHITESPACE@11..16 "\n    "
      EXPR_STMT@16..27
        TRY_EXPR@16..26          <- TryExpr
          TRY_KW@16..19 "try"
          WHITESPACE@19..20 " "
          BLOCK_EXPR@20..26
            BLOCK@20..26
              L_CURLY@20..21 "{"
              WHITESPACE@21..22 " "
              LITERAL@22..24
                INT_NUMBER@22..24 "92"
              WHITESPACE@24..25 " "
              R_CURLY@25..26 "}"
        SEMICOLON@26..27 ";"
      WHITESPACE@27..32 "\n    "
      EXPR_STMT@32..45
        BLOCK_EXPR@32..44          <- Block
          ASYNC_KW@32..37 "async"
          WHITESPACE@37..38 " "
          BLOCK@38..44
            L_CURLY@38..39 "{"
            WHITESPACE@39..40 " "
            LITERAL@40..42
              INT_NUMBER@40..42 "92"
            WHITESPACE@42..43 " "
            R_CURLY@43..44 "}"
        SEMICOLON@44..45 ";"
      WHITESPACE@45..50 "\n    "
      EXPR_STMT@50..64
        BLOCK_EXPR@50..63          <- Block
          UNSAFE_KW@50..56 "unsafe"
          WHITESPACE@56..57 " "
          BLOCK@57..63
            L_CURLY@57..58 "{"
            WHITESPACE@58..59 " "
            LITERAL@59..61
              INT_NUMBER@59..61 "92"
            WHITESPACE@61..62 " "
            R_CURLY@62..63 "}"
        SEMICOLON@63..64 ";"
      WHITESPACE@64..65 "\n"
      R_CURLY@65..66 "}"

One of these is not like the others... I think we should get rid of try expression, syntactically, the all look like blocks with modifiers.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions