Package org.rumbledb.compiler
Class VariableDependenciesVisitor
java.lang.Object
org.rumbledb.expressions.AbstractNodeVisitor<Void>
org.rumbledb.compiler.VariableDependenciesVisitor
This visitor resolves dependencies between variable and function declarations.
If a variable $x depends on a variable $y, then $y must be evaluated before $x.
Example:
declare variable $y := 1;
declare variable $x := $y;
If a variable $x depends on a function f, then f's closure must be built before $x is evaluated.
declare function f() { 1 };
declare variable $x := f();
If a function f depends on a variable $x, then $x must be evaluated before f's closure is built.
declare variable $x := 1;
declare function f() { $x };
Note that a function cannot depend on a function, as mutually recursive calls are allowed.
Once all dependencies have been determined, the visitor builds a DAG, builds a topological ordering
thereof, and re-sorts declarations in the prolog for further processing by other visitors.
-
Method Summary
Modifier and TypeMethodDescriptionprotected Void
defaultAction
(Node node, Void argument) visitApplyStatement
(ApplyStatement statement, Void argument) visitAssignStatement
(AssignStatement statement, Void argument) visitContextExpr
(ContextItemExpression expression, Void argument) visitCountClause
(CountClause expression, Void argument) visitDynamicFunctionCallExpression
(DynamicFunctionCallExpression expression, Void argument) visitExitStatement
(ExitStatement statement, Void argument) visitFilterExpression
(FilterExpression expression, Void argument) visitForClause
(ForClause expression, Void argument) visitFunctionCall
(FunctionCallExpression expression, Void argument) visitFunctionDeclaration
(FunctionDeclaration expression, Void argument) visitGroupByClause
(GroupByClause expression, Void argument) visitInlineFunctionExpr
(InlineFunctionExpression expression, Void argument) visitLetClause
(LetClause expression, Void argument) visitNamedFunctionRef
(NamedFunctionReferenceExpression expression, Void argument) visitOrderByClause
(OrderByClause expression, Void argument) visitProlog
(Prolog prolog, Void argument) visitReturnClause
(ReturnClause expression, Void argument) visitReturnStatementClause
(ReturnStatementClause clause, Void argument) visitSimpleMapExpr
(SimpleMapExpression expression, Void argument) visitTransformExpression
(TransformExpression expression, Void argument) visitTypeSwitchExpression
(TypeSwitchExpression expression, Void argument) visitTypeSwitchStatement
(TypeSwitchStatement statement, Void argument) visitVariableDeclaration
(VariableDeclaration expression, Void argument) visitVariableDeclStatement
(VariableDeclStatement statement, Void argument) visitVariableReference
(VariableReferenceExpression expression, Void argument) visitWhereClause
(WhereClause expression, Void argument) visitWhileStatement
(WhileStatement statement, Void argument) Methods inherited from class org.rumbledb.expressions.AbstractNodeVisitor
visit, visitAdditiveExpr, visitAndExpr, visitAppendExpression, visitArrayConstructor, visitArrayLookupExpression, visitArrayUnboxingExpression, visitAttributeNode, visitAttributeNodeContent, visitBlockExpr, visitBlockStatement, visitBoolean, visitBreakStatement, visitCastableExpression, visitCastExpression, visitCommaExpression, visitCommaVariableDeclStatement, visitComparisonExpr, visitComputedAttributeConstructor, visitComputedElementConstructor, visitConditionalExpression, visitConditionalStatement, visitContinueStatement, visitCreateCollectionExpression, visitDecimal, visitDeleteExpression, visitDeleteIndexFromCollectionExpression, visitDeleteSearchFromCollectionExpression, visitDescendants, visitDirElemConstructor, visitDocumentNodeConstructor, visitDouble, visitEditCollectionExpression, visitFlowrExpression, visitFlowrStatement, visitInsertExpression, visitInsertIndexIntoCollectionExpression, visitInsertSearchIntoCollectionExpression, visitInstanceOfExpression, visitInteger, visitIsStaticallyExpr, visitLibraryModule, visitMainModule, visitMultiplicativeExpr, visitNodeComparisonExpr, visitNotExpr, visitNull, visitObjectConstructor, visitObjectLookupExpression, visitOrExpr, visitPostfixLookupExpression, visitProgram, visitRangeExpr, visitRenameExpression, visitReplaceExpression, visitSlashExpr, visitStatementsAndExpr, visitStatementsAndOptionalExpr, visitStepExpr, visitString, visitStringConcatExpr, visitSwitchExpression, visitSwitchStatement, visitTextNode, visitTextNodeConstructor, visitTreatExpression, visitTruncateCollectionExpression, visitTryCatchExpression, visitTryCatchStatement, visitTypeDeclaration, visitUnaryExpr, visitUnaryLookupExpression, visitValidateTypeExpression
-
Method Details
-
defaultAction
- Overrides:
defaultAction
in classAbstractNodeVisitor<Void>
-
visitVariableReference
- Overrides:
visitVariableReference
in classAbstractNodeVisitor<Void>
-
visitForClause
- Overrides:
visitForClause
in classAbstractNodeVisitor<Void>
-
visitLetClause
- Overrides:
visitLetClause
in classAbstractNodeVisitor<Void>
-
visitGroupByClause
- Overrides:
visitGroupByClause
in classAbstractNodeVisitor<Void>
-
visitOrderByClause
- Overrides:
visitOrderByClause
in classAbstractNodeVisitor<Void>
-
visitWhereClause
- Overrides:
visitWhereClause
in classAbstractNodeVisitor<Void>
-
visitCountClause
- Overrides:
visitCountClause
in classAbstractNodeVisitor<Void>
-
visitReturnClause
- Overrides:
visitReturnClause
in classAbstractNodeVisitor<Void>
-
visitFilterExpression
- Overrides:
visitFilterExpression
in classAbstractNodeVisitor<Void>
-
visitContextExpr
- Overrides:
visitContextExpr
in classAbstractNodeVisitor<Void>
-
visitInlineFunctionExpr
- Overrides:
visitInlineFunctionExpr
in classAbstractNodeVisitor<Void>
-
visitSimpleMapExpr
- Overrides:
visitSimpleMapExpr
in classAbstractNodeVisitor<Void>
-
visitTypeSwitchExpression
- Overrides:
visitTypeSwitchExpression
in classAbstractNodeVisitor<Void>
-
visitNamedFunctionRef
- Overrides:
visitNamedFunctionRef
in classAbstractNodeVisitor<Void>
-
visitFunctionCall
- Overrides:
visitFunctionCall
in classAbstractNodeVisitor<Void>
-
visitDynamicFunctionCallExpression
public Void visitDynamicFunctionCallExpression(DynamicFunctionCallExpression expression, Void argument) - Overrides:
visitDynamicFunctionCallExpression
in classAbstractNodeVisitor<Void>
-
visitProlog
- Overrides:
visitProlog
in classAbstractNodeVisitor<Void>
-
visitVariableDeclaration
- Overrides:
visitVariableDeclaration
in classAbstractNodeVisitor<Void>
-
visitFunctionDeclaration
- Overrides:
visitFunctionDeclaration
in classAbstractNodeVisitor<Void>
-
visitTransformExpression
- Overrides:
visitTransformExpression
in classAbstractNodeVisitor<Void>
-
visitApplyStatement
- Overrides:
visitApplyStatement
in classAbstractNodeVisitor<Void>
-
visitAssignStatement
- Overrides:
visitAssignStatement
in classAbstractNodeVisitor<Void>
-
visitExitStatement
- Overrides:
visitExitStatement
in classAbstractNodeVisitor<Void>
-
visitReturnStatementClause
- Overrides:
visitReturnStatementClause
in classAbstractNodeVisitor<Void>
-
visitTypeSwitchStatement
- Overrides:
visitTypeSwitchStatement
in classAbstractNodeVisitor<Void>
-
visitWhileStatement
- Overrides:
visitWhileStatement
in classAbstractNodeVisitor<Void>
-
visitVariableDeclStatement
- Overrides:
visitVariableDeclStatement
in classAbstractNodeVisitor<Void>
-