# Async function

async fn abc() {}

async fn main() {
    let x = futures.await?;
}

==>

SourceFile(
  FunctionItem(async, fn,
    BoundIdentifier,
    ParamList,
    Block),
  FunctionItem(async, fn, BoundIdentifier, ParamList,
    Block(
      LetDeclaration(let,BoundIdentifier, TryExpression(
        AwaitExpression(Identifier, await))))))

# Await expression

futures.await;
futures.await?;
futures.await?.await?;
futures.await?.function().await?;

==>

SourceFile(
  AwaitExpression(Identifier, await),
  TryExpression(
    AwaitExpression(Identifier, await)),
  TryExpression(
    AwaitExpression(
      TryExpression(
        AwaitExpression(Identifier, await)), await)),
  TryExpression(
    AwaitExpression(
      CallExpression(
        FieldExpression(
          TryExpression(
            AwaitExpression(Identifier, await)),
          FieldIdentifier),
        ArgList), await)))


# Async Block

async {}
async { let x = 10; }
async move {}

==>

SourceFile(
  AsyncBlock(async,
    Block),
  AsyncBlock(async,
    Block(
      LetDeclaration(let,
        BoundIdentifier,
        Integer))),
  AsyncBlock(async, move, Block))

