/*
* <!--
*
* **************************************************************
* This Java source has been automatically generated.
* MODIFICATIONS TO THIS SOURCE MAY BE OVERWRITTEN - DO NOT MODIFY THIS FILE
* **************************************************************
*
*
* This file (CAL_Optimizer_Traversers_internal.java)
* was generated from CAL module: Cal.Internal.Optimizer_Traversers.
* The constants and methods provided are intended to facilitate accessing the
* Cal.Internal.Optimizer_Traversers module from Java code.
*
* Creation date: Fri Jan 22 15:07:58 PST 2010
* --!>
*
*/
package org.openquark.cal.internal.module.Cal.Internal;
import org.openquark.cal.compiler.ModuleName;
import org.openquark.cal.compiler.QualifiedName;
import org.openquark.cal.compiler.SourceModel;
/**
* WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WAR
* <p>
* This file is part of the compiler and not to be modified.
* <p>
* ING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
* <p>
* This module contains all functions that are used to traverse and modify expressions. The two
* traversers are transformAcc and transform. <code>Cal.Internal.Optimizer_Traversers.transformAcc</code> traverses and the expression bottom up
* and maintains an accumulator throughout the traversal. <code>Cal.Internal.Optimizer_Traversers.transform</code> traverses the expression bottom up
* and applies the given transformers. The difference is that transformAcc only maintains TransformState
* but transform maintains TransformHistory as well.
* <p>
* Also included in this file are some functions for combining transformations. For example, combineTransforms
* takes two transformation functions and returns a single transformation function.
* <p>
* TODO: Get rid of transformAcc.
*
* @author Greg McClement
*/
public final class CAL_Optimizer_Traversers_internal {
public static final ModuleName MODULE_NAME =
ModuleName.make("Cal.Internal.Optimizer_Traversers");
/**
* This inner class (Functions) contains constants
* and methods related to binding to CAL functions in the Cal.Internal.Optimizer_Traversers module.
*/
public static final class Functions {
/**
* Helper binding method for function: canConvertToType.
* @param state
* @param expr
* @return the SourceModule.expr representing an application of canConvertToType
*/
public static final SourceModel.Expr canConvertToType(SourceModel.Expr state, SourceModel.Expr expr) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.canConvertToType), state, expr});
}
/**
* Name binding for function: canConvertToType.
* @see #canConvertToType(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName canConvertToType =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"canConvertToType");
/**
* Takes two transformations and combines then by performing the first and then the second.
* @param t1 (CAL type: <code>Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_Expression.Expression -> Cal.Internal.Optimizer_Expression.Expression</code>)
* The first transformation to combine.
* @param t2 (CAL type: <code>Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_Expression.Expression -> Cal.Internal.Optimizer_Expression.Expression</code>)
* The second transformation to combine.
* @param arg_3 (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param arg_4 (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* @return (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* A function that performs t2 and then performs t1 on the input expression.
*/
public static final SourceModel.Expr combineTransforms(SourceModel.Expr t1, SourceModel.Expr t2, SourceModel.Expr arg_3, SourceModel.Expr arg_4) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.combineTransforms), t1, t2, arg_3, arg_4});
}
/**
* Name binding for function: combineTransforms.
* @see #combineTransforms(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName combineTransforms =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"combineTransforms");
/**
* Helper binding method for function: combineTransformsWithHistory.
* @param t1
* @param t2
* @param arg_3
* @param arg_4
* @param arg_5
* @return the SourceModule.expr representing an application of combineTransformsWithHistory
*/
public static final SourceModel.Expr combineTransformsWithHistory(SourceModel.Expr t1, SourceModel.Expr t2, SourceModel.Expr arg_3, SourceModel.Expr arg_4, SourceModel.Expr arg_5) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.combineTransformsWithHistory), t1, t2, arg_3, arg_4, arg_5});
}
/**
* Name binding for function: combineTransformsWithHistory.
* @see #combineTransformsWithHistory(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName combineTransformsWithHistory =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"combineTransformsWithHistory");
/**
* Convert the given expression into a type expression. A list of name to type can be used to lookup the type
* of an input expression after the unification is applied.
* <p>
* NOTE This is not fully implemented yet.
*
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* The context of the current traversal.
* @param history (CAL type: <code>Cal.Internal.Optimizer_State.TransformHistory</code>)
* The history of the current transformation.
* @param counter (CAL type: <code>Cal.Core.Prelude.Int</code>)
* A counter used to generate the TypeId objects.
* @param nToT (CAL type: <code>[(Cal.Internal.Optimizer_Expression.QualifiedName, Cal.Internal.Optimizer_Type.Type)]</code>)
* A list that maps Var's to TypeId's. This can be used to look up the type of the variables.
* @param expression (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression to convert to a type.
* @return (CAL type: <code>(Cal.Core.Prelude.Int, [(Cal.Internal.Optimizer_Expression.QualifiedName, Cal.Internal.Optimizer_Type.Type)], Cal.Internal.Optimizer_Type.Type)</code>)
* A triplet of counter of the TypeId, a list that maps Var's to TypeId's, and the resulting type.
*/
public static final SourceModel.Expr convertToType(SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr counter, SourceModel.Expr nToT, SourceModel.Expr expression) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.convertToType), state, history, counter, nToT, expression});
}
/**
* @see #convertToType(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
* @param state
* @param history
* @param counter
* @param nToT
* @param expression
* @return the SourceModel.Expr representing an application of convertToType
*/
public static final SourceModel.Expr convertToType(SourceModel.Expr state, SourceModel.Expr history, int counter, SourceModel.Expr nToT, SourceModel.Expr expression) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.convertToType), state, history, SourceModel.Expr.makeIntValue(counter), nToT, expression});
}
/**
* Name binding for function: convertToType.
* @see #convertToType(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName convertToType =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"convertToType");
/**
* This will detect that variables are strict because they are arguments to a function that
* has them plinged. See test118 for an example.
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param switchExpr (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* @return (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
*/
public static final SourceModel.Expr detectPlingedArguments(SourceModel.Expr state, SourceModel.Expr switchExpr) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.detectPlingedArguments), state, switchExpr});
}
/**
* Name binding for function: detectPlingedArguments.
* @see #detectPlingedArguments(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName detectPlingedArguments =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"detectPlingedArguments");
/**
* Helper binding method for function: prelude_eager.
* @return the SourceModule.expr representing an application of prelude_eager
*/
public static final SourceModel.Expr prelude_eager() {
return SourceModel.Expr.Var.make(Functions.prelude_eager);
}
/**
* Name binding for function: prelude_eager.
* @see #prelude_eager()
*/
public static final QualifiedName prelude_eager =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"prelude_eager");
/**
* Helper binding method for function: trace2.
* @param unused
* @param v
* @return the SourceModule.expr representing an application of trace2
*/
public static final SourceModel.Expr trace2(SourceModel.Expr unused, SourceModel.Expr v) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.trace2), unused, v});
}
/**
* @see #trace2(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
* @param unused
* @param v
* @return the SourceModel.Expr representing an application of trace2
*/
public static final SourceModel.Expr trace2(java.lang.String unused, SourceModel.Expr v) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.trace2), SourceModel.Expr.makeStringValue(unused), v});
}
/**
* Name binding for function: trace2.
* @see #trace2(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName trace2 =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"trace2");
/**
* Traverses the given expression and applies the given transformations. The TransformState
* and TransformationHistory is maintained by this function.
* <p>
* TODO Go through this and make sure that the names are updated correctly.
*
* @param currentState (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* Information about the context of the current subexpression. This is used to avoid inlining case expressions in strict contexts.
* @param history (CAL type: <code>Cal.Internal.Optimizer_State.TransformHistory</code>)
* Information about the history of the current transformation.
* @param before (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression to transform.
* @param transformer (CAL type: <code>Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_State.TransformHistory -> Cal.Internal.Optimizer_Expression.Expression -> (Cal.Internal.Optimizer_State.TransformHistory, Cal.Core.Prelude.Boolean, Cal.Internal.Optimizer_Expression.Expression)</code>)
* The function to use to transform the input expression.
* @return (CAL type: <code>(Cal.Internal.Optimizer_State.TransformHistory, Cal.Core.Prelude.Boolean, Cal.Internal.Optimizer_Expression.Expression)</code>)
* The transformed expression.
*/
public static final SourceModel.Expr transform(SourceModel.Expr currentState, SourceModel.Expr history, SourceModel.Expr before, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transform), currentState, history, before, transformer});
}
/**
* Name binding for function: transform.
* @see #transform(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transform =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transform");
/**
* Traverse the tree in post-order (bottom-up) and apply the given transformation function.
* <p>
* TODO: Go over this and make sure that the bound names are updated correctly.
*
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* Some state information for use by the transformations.
* @param acc (CAL type: <code>acc</code>)
* The accumulator for the traversal.
* @param expression (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression being traversed.
* @param transformer (CAL type: <code>Cal.Internal.Optimizer_State.TransformState -> acc -> Cal.Internal.Optimizer_Expression.Expression -> (acc, Cal.Internal.Optimizer_Expression.Expression)</code>)
* The function that transforms a not in the expression.
* @return (CAL type: <code>(acc, Cal.Internal.Optimizer_Expression.Expression)</code>)
* The result of applying the transformer function in post order to the before expression.
*/
public static final SourceModel.Expr transformAcc(SourceModel.Expr state, SourceModel.Expr acc, SourceModel.Expr expression, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformAcc), state, acc, expression, transformer});
}
/**
* Name binding for function: transformAcc.
* @see #transformAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformAcc");
/**
* Helper binding method for function: transformExtensionField.
* @param state
* @param history
* @param transformer
* @param extensionField
* @return the SourceModule.expr representing an application of transformExtensionField
*/
public static final SourceModel.Expr transformExtensionField(SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr transformer, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionField), state, history, transformer, extensionField});
}
/**
* Name binding for function: transformExtensionField.
* @see #transformExtensionField(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionField =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionField");
/**
* Apply the given transformer to the given ExtensionField.
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param accumulator (CAL type: <code>acc</code>)
* @param transformer (CAL type: <code>Cal.Internal.Optimizer_State.TransformState -> acc -> Cal.Internal.Optimizer_Expression.Expression -> (acc, Cal.Internal.Optimizer_Expression.Expression)</code>)
* @param extensionField (CAL type: <code>(Cal.Internal.Optimizer_Expression.FieldName, Cal.Internal.Optimizer_Expression.Expression)</code>)
* @return (CAL type: <code>(acc, (Cal.Internal.Optimizer_Expression.FieldName, Cal.Internal.Optimizer_Expression.Expression))</code>)
*/
public static final SourceModel.Expr transformExtensionFieldAcc(SourceModel.Expr state, SourceModel.Expr accumulator, SourceModel.Expr transformer, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldAcc), state, accumulator, transformer, extensionField});
}
/**
* Name binding for function: transformExtensionFieldAcc.
* @see #transformExtensionFieldAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldAcc");
/**
* Helper binding method for function: transformExtensionFieldOnly.
* @param transformer
* @param extensionField
* @return the SourceModule.expr representing an application of transformExtensionFieldOnly
*/
public static final SourceModel.Expr transformExtensionFieldOnly(SourceModel.Expr transformer, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldOnly), transformer, extensionField});
}
/**
* Name binding for function: transformExtensionFieldOnly.
* @see #transformExtensionFieldOnly(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldOnly =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldOnly");
/**
* Helper binding method for function: transformExtensionFieldTopDown.
* @param state
* @param history
* @param transformer
* @param extensionField
* @return the SourceModule.expr representing an application of transformExtensionFieldTopDown
*/
public static final SourceModel.Expr transformExtensionFieldTopDown(SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr transformer, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldTopDown), state, history, transformer, extensionField});
}
/**
* Name binding for function: transformExtensionFieldTopDown.
* @see #transformExtensionFieldTopDown(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldTopDown =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldTopDown");
/**
* Helper binding method for function: transformExtensionFieldTopDownSimple.
* @param transformer
* @param extensionField
* @return the SourceModule.expr representing an application of transformExtensionFieldTopDownSimple
*/
public static final SourceModel.Expr transformExtensionFieldTopDownSimple(SourceModel.Expr transformer, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldTopDownSimple), transformer, extensionField});
}
/**
* Name binding for function: transformExtensionFieldTopDownSimple.
* @see #transformExtensionFieldTopDownSimple(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldTopDownSimple =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldTopDownSimple");
/**
* Helper binding method for function: transformExtensionFields.
* @param state
* @param history
* @param transformer
* @param extensionFields
* @return the SourceModule.expr representing an application of transformExtensionFields
*/
public static final SourceModel.Expr transformExtensionFields(SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr transformer, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFields), state, history, transformer, extensionFields});
}
/**
* Name binding for function: transformExtensionFields.
* @see #transformExtensionFields(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFields =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFields");
/**
* Helper binding method for function: transformExtensionFieldsAcc.
* @param state
* @param accumulator
* @param transformer
* @param extensionFields
* @return the SourceModule.expr representing an application of transformExtensionFieldsAcc
*/
public static final SourceModel.Expr transformExtensionFieldsAcc(SourceModel.Expr state, SourceModel.Expr accumulator, SourceModel.Expr transformer, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldsAcc), state, accumulator, transformer, extensionFields});
}
/**
* Name binding for function: transformExtensionFieldsAcc.
* @see #transformExtensionFieldsAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldsAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldsAcc");
/**
* Helper binding method for function: transformExtensionFieldsOnly.
* @param transformer
* @param extensionFields
* @return the SourceModule.expr representing an application of transformExtensionFieldsOnly
*/
public static final SourceModel.Expr transformExtensionFieldsOnly(SourceModel.Expr transformer, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldsOnly), transformer, extensionFields});
}
/**
* Name binding for function: transformExtensionFieldsOnly.
* @see #transformExtensionFieldsOnly(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldsOnly =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldsOnly");
/**
* Helper binding method for function: transformExtensionFieldsTopDown.
* @param state
* @param history
* @param transformer
* @param extensionFields
* @return the SourceModule.expr representing an application of transformExtensionFieldsTopDown
*/
public static final SourceModel.Expr transformExtensionFieldsTopDown(SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr transformer, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldsTopDown), state, history, transformer, extensionFields});
}
/**
* Name binding for function: transformExtensionFieldsTopDown.
* @see #transformExtensionFieldsTopDown(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldsTopDown =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldsTopDown");
/**
* Helper binding method for function: transformExtensionFieldsTopDownSimple.
* @param transformer
* @param extensionFields
* @return the SourceModule.expr representing an application of transformExtensionFieldsTopDownSimple
*/
public static final SourceModel.Expr transformExtensionFieldsTopDownSimple(SourceModel.Expr transformer, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformExtensionFieldsTopDownSimple), transformer, extensionFields});
}
/**
* Name binding for function: transformExtensionFieldsTopDownSimple.
* @see #transformExtensionFieldsTopDownSimple(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformExtensionFieldsTopDownSimple =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformExtensionFieldsTopDownSimple");
/**
* Helper binding method for function: transformInner.
* @param currentState
* @param history
* @param before
* @param transformer
* @return the SourceModule.expr representing an application of transformInner
*/
public static final SourceModel.Expr transformInner(SourceModel.Expr currentState, SourceModel.Expr history, SourceModel.Expr before, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformInner), currentState, history, before, transformer});
}
/**
* Name binding for function: transformInner.
* @see #transformInner(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformInner =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformInner");
/**
* Helper binding method for function: transformNoHistory.
* @param state
* @param before
* @param transformer
* @return the SourceModule.expr representing an application of transformNoHistory
*/
public static final SourceModel.Expr transformNoHistory(SourceModel.Expr state, SourceModel.Expr before, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformNoHistory), state, before, transformer});
}
/**
* Name binding for function: transformNoHistory.
* @see #transformNoHistory(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformNoHistory =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformNoHistory");
/**
* Traverse the tree in post-order (bottom-up) and apply the given transformation function.
* @param expression (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression being traversed.
* @param transformer (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression -> Cal.Internal.Optimizer_Expression.Expression</code>)
* The function that transforms a not in the expression.
* @return (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The result of applying the transformer function in post order to the before expression.
*/
public static final SourceModel.Expr transformOnly(SourceModel.Expr expression, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformOnly), expression, transformer});
}
/**
* Name binding for function: transformOnly.
* @see #transformOnly(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformOnly =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformOnly");
/**
* Helper binding method for function: transformTopDown.
* @param state
* @param history0
* @param expr0
* @param transformer
* @return the SourceModule.expr representing an application of transformTopDown
*/
public static final SourceModel.Expr transformTopDown(SourceModel.Expr state, SourceModel.Expr history0, SourceModel.Expr expr0, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformTopDown), state, history0, expr0, transformer});
}
/**
* Name binding for function: transformTopDown.
* @see #transformTopDown(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformTopDown =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformTopDown");
/**
* Helper binding method for function: transformTopDownSimple.
* @param expr0
* @param transformer
* @return the SourceModule.expr representing an application of transformTopDownSimple
*/
public static final SourceModel.Expr transformTopDownSimple(SourceModel.Expr expr0, SourceModel.Expr transformer) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformTopDownSimple), expr0, transformer});
}
/**
* Name binding for function: transformTopDownSimple.
* @see #transformTopDownSimple(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformTopDownSimple =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformTopDownSimple");
/**
* Helper binding method for function: transform_withHistory.
* @param transform
* @param state
* @param history
* @param expression
* @return the SourceModule.expr representing an application of transform_withHistory
*/
public static final SourceModel.Expr transform_withHistory(SourceModel.Expr transform, SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr expression) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transform_withHistory), transform, state, history, expression});
}
/**
* Name binding for function: transform_withHistory.
* @see #transform_withHistory(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transform_withHistory =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transform_withHistory");
/**
* Performs all of the given transformation on the given expression once.
* @param transformations (CAL type: <code>[Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_State.TransformHistory -> Cal.Internal.Optimizer_Expression.Expression -> (Cal.Internal.Optimizer_State.TransformHistory, Cal.Core.Prelude.Boolean, Cal.Internal.Optimizer_Expression.Expression)]</code>)
* The set of transformations to perform.
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* Keeps track of information about the context of the expression traversal.
* @param history (CAL type: <code>Cal.Internal.Optimizer_State.TransformHistory</code>)
* Information about the history of the traversal.
* @param expr (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression to perform the transformations on.
* @return (CAL type: <code>(Cal.Internal.Optimizer_State.TransformHistory, Cal.Core.Prelude.Boolean, Cal.Internal.Optimizer_Expression.Expression)</code>)
* The result of apply the given transformation to the given expression.
*/
public static final SourceModel.Expr transformer(SourceModel.Expr transformations, SourceModel.Expr state, SourceModel.Expr history, SourceModel.Expr expr) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.transformer), transformations, state, history, expr});
}
/**
* Name binding for function: transformer.
* @see #transformer(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName transformer =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"transformer");
/**
* Traverse the tree in post-order (bottom-up) and apply the given transformation function.
* <p>
* TODO: Go over this and make sure that the bound names are updated correctly.
*
* @param acc (CAL type: <code>acc</code>)
* The accumulator for the traversal.
* @param expression (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* The expression being traversed.
* @param traverser (CAL type: <code>acc -> Cal.Internal.Optimizer_Expression.Expression -> acc</code>)
* The function that transforms a not in the expression.
* @return (CAL type: <code>acc</code>)
* The result of applying the traverser function in post order to the before expression.
*/
public static final SourceModel.Expr traverse(SourceModel.Expr acc, SourceModel.Expr expression, SourceModel.Expr traverser) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverse), acc, expression, traverser});
}
/**
* Name binding for function: traverse.
* @see #traverse(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverse =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverse");
/**
* Helper binding method for function: traverseExtensionFieldAcc.
* @param acc
* @param traverser
* @param extensionField
* @return the SourceModule.expr representing an application of traverseExtensionFieldAcc
*/
public static final SourceModel.Expr traverseExtensionFieldAcc(SourceModel.Expr acc, SourceModel.Expr traverser, SourceModel.Expr extensionField) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverseExtensionFieldAcc), acc, traverser, extensionField});
}
/**
* Name binding for function: traverseExtensionFieldAcc.
* @see #traverseExtensionFieldAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverseExtensionFieldAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverseExtensionFieldAcc");
/**
* Helper function for traverseTopDownAcc.
* @param acc (CAL type: <code>acc</code>)
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param extensionField (CAL type: <code>(Cal.Internal.Optimizer_Expression.FieldName, Cal.Internal.Optimizer_Expression.Expression)</code>)
* @param traverser (CAL type: <code>acc -> Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_Expression.Expression -> (Cal.Core.Prelude.Boolean, acc)</code>)
* @return (CAL type: <code>acc</code>)
*/
public static final SourceModel.Expr traverseExtensionFieldTopDown(SourceModel.Expr acc, SourceModel.Expr state, SourceModel.Expr extensionField, SourceModel.Expr traverser) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverseExtensionFieldTopDown), acc, state, extensionField, traverser});
}
/**
* Name binding for function: traverseExtensionFieldTopDown.
* @see #traverseExtensionFieldTopDown(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverseExtensionFieldTopDown =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverseExtensionFieldTopDown");
/**
* Helper binding method for function: traverseExtensionFieldsAcc.
* @param acc
* @param traverser
* @param extensionFields
* @return the SourceModule.expr representing an application of traverseExtensionFieldsAcc
*/
public static final SourceModel.Expr traverseExtensionFieldsAcc(SourceModel.Expr acc, SourceModel.Expr traverser, SourceModel.Expr extensionFields) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverseExtensionFieldsAcc), acc, traverser, extensionFields});
}
/**
* Name binding for function: traverseExtensionFieldsAcc.
* @see #traverseExtensionFieldsAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverseExtensionFieldsAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverseExtensionFieldsAcc");
/**
* Helper function for traverseTopDownAcc.
* @param acc (CAL type: <code>acc</code>)
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param extensionFields (CAL type: <code>[(Cal.Internal.Optimizer_Expression.FieldName, Cal.Internal.Optimizer_Expression.Expression)]</code>)
* @param traverser (CAL type: <code>acc -> Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_Expression.Expression -> (Cal.Core.Prelude.Boolean, acc)</code>)
* @return (CAL type: <code>acc</code>)
*/
public static final SourceModel.Expr traverseExtensionFieldsTopDown(SourceModel.Expr acc, SourceModel.Expr state, SourceModel.Expr extensionFields, SourceModel.Expr traverser) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverseExtensionFieldsTopDown), acc, state, extensionFields, traverser});
}
/**
* Name binding for function: traverseExtensionFieldsTopDown.
* @see #traverseExtensionFieldsTopDown(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverseExtensionFieldsTopDown =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverseExtensionFieldsTopDown");
/**
* Traverse the tree in post-order (top down) and apply the given transformation function.
* @param acc (CAL type: <code>acc</code>)
* @param state (CAL type: <code>Cal.Internal.Optimizer_State.TransformState</code>)
* @param expression (CAL type: <code>Cal.Internal.Optimizer_Expression.Expression</code>)
* @param traverser (CAL type: <code>acc -> Cal.Internal.Optimizer_State.TransformState -> Cal.Internal.Optimizer_Expression.Expression -> (Cal.Core.Prelude.Boolean, acc)</code>)
* @return (CAL type: <code>acc</code>)
*/
public static final SourceModel.Expr traverseTopDownAcc(SourceModel.Expr acc, SourceModel.Expr state, SourceModel.Expr expression, SourceModel.Expr traverser) {
return
SourceModel.Expr.Application.make(
new SourceModel.Expr[] {SourceModel.Expr.Var.make(Functions.traverseTopDownAcc), acc, state, expression, traverser});
}
/**
* Name binding for function: traverseTopDownAcc.
* @see #traverseTopDownAcc(org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr, org.openquark.cal.compiler.SourceModel.Expr)
*/
public static final QualifiedName traverseTopDownAcc =
QualifiedName.make(
CAL_Optimizer_Traversers_internal.MODULE_NAME,
"traverseTopDownAcc");
}
/**
* A hash of the concatenated JavaDoc for this class (including inner classes).
* This value is used when checking for changes to generated binding classes.
*/
public static final int javaDocHash = 1902146735;
}