ErgoTree node which represents application of function func
to the given arguments.
ErgoTree node which represents application of function func
to the given arguments.
expression which evaluates to a function
arguments of the function application
Apply types for type parameters of input value.
Frontend representation of a block of Val definitions.
Frontend representation of a block of Val definitions. { val x = ...; val y = ... } This node is not part of ErgoTree and hence have Undefined opCode.
Frontend node to represent variable names parsed in a source code.
Frontend node to represent variable names parsed in a source code. Should be resolved during compilation to lambda argument, Val definition or compilation environment value.
Frontend implementation of lambdas.
Frontend implementation of lambdas. Should be transformed to FuncValue.
Represents in ErgoTree an invocation of method of the object obj
with arguments args
.
Represents in ErgoTree an invocation of method of the object obj
with arguments args
.
The SMethod instances in STypeCompanions may have type STypeIdent in methods types,
but valid ErgoTree should have SMethod instances specialized for specific types of
obj and args using specializeFor
.
This means, if we save typeId, methodId, and we save all the arguments,
we can restore the specialized SMethod instance.
This work by induction, if we assume all arguments are monomorphic,
then we can make MethodCall monomorphic.
Thus, all ErgoTree instances are monomorphic by construction.
object on which method will be invoked
method to be invoked
arguments passed to the method on invocation
a map of concrete type for each generic type parameter
Frontend node to represent potential method call in a source code.
Frontend node to represent potential method call in a source code. Should be resolved during compilation to MethodCall. Cannot be serialized to ErgoTree.
Operation identity descriptor used in AOT costing (see usages in RuntimeCosting and CostTable)
Type alias for a substitution of type variables with their corresponding types.
Frontend node to select a field from an object.
Frontend node to select a field from an object. Should be transformed to SelectField
IR node to represent explicit Zero Knowledge scope in ErgoTree.
IR node to represent explicit Zero Knowledge scope in ErgoTree. Compiler checks Zero Knowledge properties and issue error message is case of violations. ZK-scoping is optional, it can be used when the user want to ensure Zero Knowledge of specific set of operations. Usually it will require simple restructuring of the code to make the scope body explicit. Invariants checked by the compiler:
For motivation and details see https://github.com/ScorexFoundation/sigmastate-interpreter/issues/236
Immutable and sharable empty substitution.
Applies a type substitution to a given type.
Applies a type substitution to a given type.
the type to apply the substitution to
the type substitution to apply
the type after applying the substitution
Computes the most general type given two types.
Computes the most general type given two types.
the first type
the second type
the most general type if it exists, otherwise None
Most Specific Generalized (MSG) type of ts.
Most Specific Generalized (MSG) type of ts. Currently just the type of the first element as long as all the elements have the same type.
Performs pairwise type unification making sure each type variable is equally substituted in all items.
Finds a substitution subst
of type variables such that unifyTypes(applySubst(t1, subst), t2) shouldBe Some(emptySubst)