# 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( ExpressionStatement(AwaitExpression(Identifier, await)), ExpressionStatement(TryExpression( AwaitExpression(Identifier, await))), ExpressionStatement(TryExpression( AwaitExpression( TryExpression( AwaitExpression(Identifier, await)), await))), ExpressionStatement(TryExpression( AwaitExpression( CallExpression( FieldExpression( TryExpression( AwaitExpression(Identifier, await)), FieldIdentifier), ArgList), await)))) # Async Block async {} async { let x = 10; } async move {} ==> SourceFile( ExpressionStatement(AsyncBlock(async, Block)), ExpressionStatement(AsyncBlock(async, Block(LetDeclaration(let, BoundIdentifier, Integer)))), ExpressionStatement(AsyncBlock(async, move, Block)))