protected override Value?Visit(Expression.Identifier ident) { // Get the referred symbol var symbol = SymbolTable.ReferredSymbol(ident); return(CompileSymbol(symbol)); }
protected override object?Visit(Expression.Identifier ident) { var sym = symbolTable.ReferredSymbol(ident); if (sym is Symbol.Var varSym && IsCrossReference(varSym)) { symbols.Add(varSym); } return(null); }
private Expression MakePathExpression(params string[] pieces) { Debug.Assert(pieces.Length > 0); Expression result = new Expression.Identifier(null, pieces[0]); foreach (var piece in pieces.Skip(1)) { result = new Expression.DotPath(null, result, piece); } // TODO: compile status? SymbolResolution.Resolve(SymbolTable, result); return(result); }
protected override object?Visit(Expression.Call call) { base.Visit(call); var calledType = System.TypeOf(call.Procedure); if (calledType is Type.Proc procType) { var dependency = procType.GetDependency(); if (dependency != null) { /* * Desugar * f(dependee args..., independent args..., dependent args...) * Into * f(dependee args...).f(independent args..., dependent args...) */ Expression callProcedure; if (procType.IsIntrinsic) { var intrinsic = (Intrinsic)((Value.User)System.Evaluate(call.Procedure)).Payload; callProcedure = new Expression.Identifier(null, intrinsic.NonDependentDesugar()); } else { callProcedure = call.Procedure; } var result = new Expression.Call( null, new Expression.DotPath( null, new Expression.Call( null, callProcedure, dependency.DependeeIndices .Select(i => call.Arguments[i]) .ToArray()), "f"), dependency.DependentIndices .Concat(dependency.IndependentIndices) .Select(i => call.Arguments[i]) .ToArray()); DependencyMap.CallDesugar.Add(call, result); } } return(null); }
private bool TryUsingExistingColumn(SelectClause.List list, Expression orderExpression, OrderDirection orderDirection) { for (var i = 0; i < list.Columns.Count; i++) { var selectColumn = list.Columns[i]; if (!selectColumn.Expression.Equals(orderExpression)) { continue; } var columnName = GetProjectedColumnName(selectColumn, i); var expr = new Expression.Identifier(columnName, false); _orderColumns.Add((expr, orderDirection)); return(true); } return(false); }
protected override object?Visit(Expression.Identifier ident) { symbolTable.ReferSymbol(ident, ident.Name); return(null); }
protected override Node?Visit(Expression.Identifier ident) => new Expression.Identifier(ident.ParseTreeNode, ident.Name);
private Option <T> EvaluateIdentifier <T>(Expression.Identifier identifier, object obj) { if (obj is null) { return(default);