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 VoiddefaultAction(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:
defaultActionin classAbstractNodeVisitor<Void>
-
visitVariableReference
- Overrides:
visitVariableReferencein classAbstractNodeVisitor<Void>
-
visitForClause
- Overrides:
visitForClausein classAbstractNodeVisitor<Void>
-
visitLetClause
- Overrides:
visitLetClausein classAbstractNodeVisitor<Void>
-
visitGroupByClause
- Overrides:
visitGroupByClausein classAbstractNodeVisitor<Void>
-
visitOrderByClause
- Overrides:
visitOrderByClausein classAbstractNodeVisitor<Void>
-
visitWhereClause
- Overrides:
visitWhereClausein classAbstractNodeVisitor<Void>
-
visitCountClause
- Overrides:
visitCountClausein classAbstractNodeVisitor<Void>
-
visitReturnClause
- Overrides:
visitReturnClausein classAbstractNodeVisitor<Void>
-
visitFilterExpression
- Overrides:
visitFilterExpressionin classAbstractNodeVisitor<Void>
-
visitContextExpr
- Overrides:
visitContextExprin classAbstractNodeVisitor<Void>
-
visitInlineFunctionExpr
- Overrides:
visitInlineFunctionExprin classAbstractNodeVisitor<Void>
-
visitSimpleMapExpr
- Overrides:
visitSimpleMapExprin classAbstractNodeVisitor<Void>
-
visitTypeSwitchExpression
- Overrides:
visitTypeSwitchExpressionin classAbstractNodeVisitor<Void>
-
visitNamedFunctionRef
- Overrides:
visitNamedFunctionRefin classAbstractNodeVisitor<Void>
-
visitFunctionCall
- Overrides:
visitFunctionCallin classAbstractNodeVisitor<Void>
-
visitDynamicFunctionCallExpression
public Void visitDynamicFunctionCallExpression(DynamicFunctionCallExpression expression, Void argument) - Overrides:
visitDynamicFunctionCallExpressionin classAbstractNodeVisitor<Void>
-
visitProlog
- Overrides:
visitPrologin classAbstractNodeVisitor<Void>
-
visitVariableDeclaration
- Overrides:
visitVariableDeclarationin classAbstractNodeVisitor<Void>
-
visitFunctionDeclaration
- Overrides:
visitFunctionDeclarationin classAbstractNodeVisitor<Void>
-
visitTransformExpression
- Overrides:
visitTransformExpressionin classAbstractNodeVisitor<Void>
-
visitApplyStatement
- Overrides:
visitApplyStatementin classAbstractNodeVisitor<Void>
-
visitAssignStatement
- Overrides:
visitAssignStatementin classAbstractNodeVisitor<Void>
-
visitExitStatement
- Overrides:
visitExitStatementin classAbstractNodeVisitor<Void>
-
visitReturnStatementClause
- Overrides:
visitReturnStatementClausein classAbstractNodeVisitor<Void>
-
visitTypeSwitchStatement
- Overrides:
visitTypeSwitchStatementin classAbstractNodeVisitor<Void>
-
visitWhileStatement
- Overrides:
visitWhileStatementin classAbstractNodeVisitor<Void>
-
visitVariableDeclStatement
- Overrides:
visitVariableDeclStatementin classAbstractNodeVisitor<Void>
-