pub struct Call {
pub span: SourceSpan,
pub callee: ResolvableIdentifier,
pub args: Vec<Expr>,
pub ty: Option<Type>,
}Expand description
Represents a function call (either a pure function or an evaluator).
Calls are permitted in a scalar expression context, but arguments to the callee may be non-scalar expressions - it is expected that the callee produces a scalar in such contexts.
Calls to pure functions return scalar or non-scalar values, and so they may be used any place other scalar expressions are supported.
Calls to evaluators are restricted, and have different semantics, though they appear
much the same in the language syntax. In particular, evaluators are effectivley callable
constraints, and may only appear as the sole expression of a constraint, e.g. enf foo([a, b]).
Because evaluators behave like constraints, they produce no value, so the “type” of a call
expression which invokes an evaluator is void. For this reason, calls to evaluators
always have a type of None. Pure functions on the other hand must always produce a value,
so such calls will always have a valid type. The only time when calls to pure functions will
have a None type is prior to name resolution in the semantic analysis pass.
Fields§
§span: SourceSpan§callee: ResolvableIdentifier§args: Vec<Expr>§ty: Option<Type>Used to store the type produced by a call to a pure function
The reason this field is an Option is two-fold:
- Calls to evaluators produce no value, and thus have no type
- When parsed, the callee has not yet been resolved, so we don’t know the type of the function being called. During semantic analysis, the callee is resolved and this field is set to the result type of that function.
Implementations§
Source§impl Call
impl Call
pub fn new(span: SourceSpan, callee: Identifier, args: Vec<Expr>) -> Self
Sourcepub fn is_builtin(&self) -> bool
pub fn is_builtin(&self) -> bool
Returns true if the callee is a builtin function, e.g. sum
Sourcepub fn sum(span: SourceSpan, args: Vec<Expr>) -> Self
pub fn sum(span: SourceSpan, args: Vec<Expr>) -> Self
Constructs a function call for the sum reducer/fold
Sourcepub fn prod(span: SourceSpan, args: Vec<Expr>) -> Self
pub fn prod(span: SourceSpan, args: Vec<Expr>) -> Self
Constructs a function call for the prod reducer/fold
Trait Implementations§
impl Eq for Call
Auto Trait Implementations§
impl Freeze for Call
impl RefUnwindSafe for Call
impl Send for Call
impl Sync for Call
impl Unpin for Call
impl UnwindSafe for Call
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more