[−][src]Trait weld::ast::NewExpr
A trait for initializing expressions with type inference.
This trait provides constructors with type checking to expression variants. The type of each expression is inferred locally based on its immediate children. Each function returns an error if a type error is detected.
The new
and new_with_type
functions take ExprKind
values directly and perform type
checking and inference on the built expression.
This trait is re-exported as part of the ast
module and should not need to be imported
directly.
Required methods
fn new(kind: ExprKind) -> Result<Expr, WeldCompileError>
Creates a new expression with the given kind.
Returns an error if types in the kind
mismatch.
fn new_with_type(kind: ExprKind, ty: Type) -> Result<Expr, WeldCompileError>
Creates new expression with the given kind and type.
Returns an error if types in the kind
mismatch.
fn new_literal(kind: LiteralKind) -> Result<Expr, WeldCompileError>
Creates a new literal expression.
fn new_ident(symbol: Symbol, ty: Type) -> Result<Expr, WeldCompileError>
Creates a new typed identifier expression.
fn new_bin_op(
kind: BinOpKind,
left: Expr,
right: Expr
) -> Result<Expr, WeldCompileError>
kind: BinOpKind,
left: Expr,
right: Expr
) -> Result<Expr, WeldCompileError>
Creates a new binary operator expression.
fn new_unary_op(
kind: UnaryOpKind,
value: Expr
) -> Result<Expr, WeldCompileError>
kind: UnaryOpKind,
value: Expr
) -> Result<Expr, WeldCompileError>
Creates a new unary operator expression.
fn new_cast(kind: ScalarKind, expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new cast operator expression.
fn new_negate(expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new negation operator expression.
fn new_not(expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new not operator expression.
fn new_broadcast(expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new scalar to SIMD broadcast expression.
fn new_to_vec(expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new dictionary to vector expression.
fn new_make_struct(exprs: Vec<Expr>) -> Result<Expr, WeldCompileError>
Creates a new struct literal expression.
fn new_make_vector(exprs: Vec<Expr>) -> Result<Expr, WeldCompileError>
Creates a new vector literal expression.
fn new_make_vector_typed(
exprs: Vec<Expr>,
ty: Type
) -> Result<Expr, WeldCompileError>
exprs: Vec<Expr>,
ty: Type
) -> Result<Expr, WeldCompileError>
Creates a new typed vector literal expression.
This version can be used if exprs
is empty and the type cannot be inferred with
new_make_vector
.
fn new_get_field(expr: Expr, index: u32) -> Result<Expr, WeldCompileError>
Creates a new field access expression on struct.
fn new_length(expr: Expr) -> Result<Expr, WeldCompileError>
Creates a new vector length expression.
fn new_lookup(data: Expr, index: Expr) -> Result<Expr, WeldCompileError>
Creates a new vector or dictionary lookup expression.
fn new_opt_lookup(data: Expr, index: Expr) -> Result<Expr, WeldCompileError>
Creates a new dictionary optional lookup expression.
fn new_key_exists(data: Expr, key: Expr) -> Result<Expr, WeldCompileError>
Creates a new dictionary key exists expression.
fn new_slice(
data: Expr,
index: Expr,
size: Expr
) -> Result<Expr, WeldCompileError>
data: Expr,
index: Expr,
size: Expr
) -> Result<Expr, WeldCompileError>
Creates a new vector slicing expression.
fn new_sort(data: Expr, cmpfunc: Expr) -> Result<Expr, WeldCompileError>
Creates a new vector sort expression.
fn new_let(
name: Symbol,
value: Expr,
body: Expr
) -> Result<Expr, WeldCompileError>
name: Symbol,
value: Expr,
body: Expr
) -> Result<Expr, WeldCompileError>
Creates a new let expression.
fn new_if(
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
Creates a new if expression.
fn new_select(
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
Creates a new select expression.
fn new_lambda(
params: Vec<Parameter>,
body: Expr
) -> Result<Expr, WeldCompileError>
params: Vec<Parameter>,
body: Expr
) -> Result<Expr, WeldCompileError>
Creates a new lambda expression.
fn new_apply(func: Expr, params: Vec<Expr>) -> Result<Expr, WeldCompileError>
Creates a new apply expression.
fn new_cudf(
sym_name: String,
args: Vec<Expr>,
return_ty: Type
) -> Result<Expr, WeldCompileError>
sym_name: String,
args: Vec<Expr>,
return_ty: Type
) -> Result<Expr, WeldCompileError>
Creates a new CUDF expression.
fn new_new_builder(
kind: BuilderKind,
expr: Option<Expr>
) -> Result<Expr, WeldCompileError>
kind: BuilderKind,
expr: Option<Expr>
) -> Result<Expr, WeldCompileError>
Creates a builder initialization expression.
fn new_for(
iters: Vec<Iter>,
builder: Expr,
func: Expr
) -> Result<Expr, WeldCompileError>
iters: Vec<Iter>,
builder: Expr,
func: Expr
) -> Result<Expr, WeldCompileError>
Creates a new parallel for loop expression.
fn new_merge(builder: Expr, value: Expr) -> Result<Expr, WeldCompileError>
Creates a new merge expression.
fn new_result(builder: Expr) -> Result<Expr, WeldCompileError>
Creates a new result expression.
fn new_serialize(value: Expr) -> Result<Expr, WeldCompileError>
Creates a new serialize expression.
fn new_deserialize(value: Expr, ty: Type) -> Result<Expr, WeldCompileError>
Creates a new deserialize expression.
Implementors
impl NewExpr for Expr
[src]
fn new(kind: ExprKind) -> Result<Expr, WeldCompileError>
[src]
fn new_with_type(kind: ExprKind, ty: Type) -> Result<Expr, WeldCompileError>
[src]
fn new_literal(kind: LiteralKind) -> Result<Expr, WeldCompileError>
[src]
fn new_ident(symbol: Symbol, ty: Type) -> Result<Expr, WeldCompileError>
[src]
fn new_bin_op(
kind: BinOpKind,
left: Expr,
right: Expr
) -> Result<Expr, WeldCompileError>
[src]
kind: BinOpKind,
left: Expr,
right: Expr
) -> Result<Expr, WeldCompileError>
fn new_unary_op(
kind: UnaryOpKind,
value: Expr
) -> Result<Expr, WeldCompileError>
[src]
kind: UnaryOpKind,
value: Expr
) -> Result<Expr, WeldCompileError>
fn new_cast(kind: ScalarKind, expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_negate(expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_not(expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_broadcast(expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_to_vec(expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_make_struct(exprs: Vec<Expr>) -> Result<Expr, WeldCompileError>
[src]
fn new_make_vector(exprs: Vec<Expr>) -> Result<Expr, WeldCompileError>
[src]
fn new_make_vector_typed(
exprs: Vec<Expr>,
ty: Type
) -> Result<Expr, WeldCompileError>
[src]
exprs: Vec<Expr>,
ty: Type
) -> Result<Expr, WeldCompileError>
fn new_get_field(expr: Expr, index: u32) -> Result<Expr, WeldCompileError>
[src]
fn new_length(expr: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_lookup(data: Expr, index: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_opt_lookup(data: Expr, index: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_key_exists(data: Expr, key: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_slice(
data: Expr,
index: Expr,
size: Expr
) -> Result<Expr, WeldCompileError>
[src]
data: Expr,
index: Expr,
size: Expr
) -> Result<Expr, WeldCompileError>
fn new_sort(data: Expr, cmpfunc: Expr) -> Result<Expr, WeldCompileError>
[src]
fn new_let(
name: Symbol,
value: Expr,
body: Expr
) -> Result<Expr, WeldCompileError>
[src]
name: Symbol,
value: Expr,
body: Expr
) -> Result<Expr, WeldCompileError>
fn new_if(
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
[src]
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
fn new_select(
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
[src]
cond: Expr,
on_true: Expr,
on_false: Expr
) -> Result<Expr, WeldCompileError>
fn new_lambda(
params: Vec<Parameter>,
body: Expr
) -> Result<Expr, WeldCompileError>
[src]
params: Vec<Parameter>,
body: Expr
) -> Result<Expr, WeldCompileError>
fn new_apply(func: Expr, params: Vec<Expr>) -> Result<Expr, WeldCompileError>
[src]
fn new_cudf(
sym_name: String,
args: Vec<Expr>,
return_ty: Type
) -> Result<Expr, WeldCompileError>
[src]
sym_name: String,
args: Vec<Expr>,
return_ty: Type
) -> Result<Expr, WeldCompileError>
fn new_new_builder(
kind: BuilderKind,
expr: Option<Expr>
) -> Result<Expr, WeldCompileError>
[src]
kind: BuilderKind,
expr: Option<Expr>
) -> Result<Expr, WeldCompileError>
fn new_for(
iters: Vec<Iter>,
builder: Expr,
func: Expr
) -> Result<Expr, WeldCompileError>
[src]
iters: Vec<Iter>,
builder: Expr,
func: Expr
) -> Result<Expr, WeldCompileError>