Invocation.ceylon

import ceylon.ast.core {
    Invocation,
    InvocationStatement,
    Primary
}

"""Creates an [[Invocation]] using [[positional arguments|ceylon.ast.core::PositionalArguments]].
   
   Usage example:
   
       invocation {
           "printAll";
           StringLiteral("Hello, World!"), StringLiteral("Goodbye, World!")
       }"""
shared Invocation invocation(Primary|IdentifierIsh invoked, {PositionalArgumentIsh*} arguments) {
    return Invocation {
        value invoked {
            switch (invoked)
            case (is Primary) { return invoked; }
            case (is IdentifierIsh) { return baseExpression(invoked); }
        }
        arguments = positionalArguments(*arguments);
    };
}

"""Creates an [[InvocationStatement]] using [[positional arguments|ceylon.ast.core::PositionalArguments]].
   
   Usage example:
   
       invocationStatement {
           "printAll";
           StringLiteral("Hello, World!"), StringLiteral("Goodbye, World!")
       }"""
shared InvocationStatement invocationStatement(Primary|IdentifierIsh invoked, {PositionalArgumentIsh*} arguments)
        => InvocationStatement(invocation(invoked, arguments));