public object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { // There are earlier checks to be sure that we are not using unreferenced variables // this ensures that we only use what was declared in the param block // other variables such as true/false/args etc have been already vetted string name = variableExpressionAst.VariablePath.UnqualifiedPath; if (variableExpressionAst.IsConstantVariable()) { if (name.Equals(SpecialVariables.True, StringComparison.OrdinalIgnoreCase)) return true; if (name.Equals(SpecialVariables.False, StringComparison.OrdinalIgnoreCase)) return false; Diagnostics.Assert(name.Equals(SpecialVariables.Null, StringComparison.OrdinalIgnoreCase), "Unexpected constant variable"); return null; } if (name.Equals(SpecialVariables.PSScriptRoot, StringComparison.OrdinalIgnoreCase)) { var scriptFileName = variableExpressionAst.Extent.File; if (scriptFileName == null) return null; return Path.GetDirectoryName(scriptFileName); } if (s_context != null) { return VariableOps.GetVariableValue(variableExpressionAst.VariablePath, s_context, variableExpressionAst); } throw PSTraceSource.NewArgumentException("ast"); }
public object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { _visitCount++; if (_safeValueContext == GetSafeValueVisitor.SafeValueContext.GetPowerShell) { // GetPowerShell does its own validation of allowed variables in the // context of the entire script block, and then supplies this visitor // with the CommandExpressionAst directly. This // prevents us from evaluating variable safety in this visitor, // so we rely on GetPowerShell's implementation. return(true); } if (_safeValueContext == GetSafeValueVisitor.SafeValueContext.ModuleAnalysis) { return(variableExpressionAst.IsConstantVariable() || (variableExpressionAst.VariablePath.IsUnqualified && variableExpressionAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.PSScriptRoot, StringComparison.OrdinalIgnoreCase))); } bool unused = false; return(variableExpressionAst.IsSafeVariableReference(null, ref unused)); }
public object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { return(variableExpressionAst.IsConstantVariable()); }
public object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { return variableExpressionAst.IsConstantVariable(); }
public object VisitVariableExpression(VariableExpressionAst variableExpressionAst) { _visitCount++; if (_safeValueContext == GetSafeValueVisitor.SafeValueContext.GetPowerShell) { // GetPowerShell does its own validation of allowed variables in the // context of the entire script block, and then supplies this visitor // with the CommandExpressionAst directly. This // prevents us from evaluating variable safety in this visitor, // so we rely on GetPowerShell's implementation. return true; } if (_safeValueContext == GetSafeValueVisitor.SafeValueContext.ModuleAnalysis) { return variableExpressionAst.IsConstantVariable() || (variableExpressionAst.VariablePath.IsUnqualified && variableExpressionAst.VariablePath.UnqualifiedPath.Equals(SpecialVariables.PSScriptRoot, StringComparison.OrdinalIgnoreCase)); } bool unused = false; return variableExpressionAst.IsSafeVariableReference(null, ref unused); }
public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst) { if (variableExpressionAst.Splatted && !(variableExpressionAst.Parent is CommandAst) && !(variableExpressionAst.Parent is UsingExpressionAst)) { if (variableExpressionAst.Parent is ArrayLiteralAst && variableExpressionAst.Parent.Parent is CommandAst) { _parser.ReportError(variableExpressionAst.Extent, () => ParserStrings.SplattingNotPermittedInArgumentList, variableExpressionAst.VariablePath.UserPath); } else { _parser.ReportError(variableExpressionAst.Extent, () => ParserStrings.SplattingNotPermitted, variableExpressionAst.VariablePath.UserPath); } } if (variableExpressionAst.VariablePath.IsVariable) { if (variableExpressionAst.TupleIndex == VariableAnalysis.ForceDynamic && !variableExpressionAst.Assigned && !variableExpressionAst.VariablePath.IsGlobal && !variableExpressionAst.VariablePath.IsScript && !variableExpressionAst.IsConstantVariable() && !SpecialVariables.IsImplicitVariableAccessibleInClassMethod(variableExpressionAst.VariablePath)) { _parser.ReportError(variableExpressionAst.Extent, () => ParserStrings.VariableNotLocal); } } if (variableExpressionAst.VariablePath.UserPath.Equals(SpecialVariables.This, StringComparison.OrdinalIgnoreCase)) { if (AnalyzingStaticMember()) { _parser.ReportError(variableExpressionAst.Extent, () => ParserStrings.NonStaticMemberAccessInStaticMember, variableExpressionAst.VariablePath.UserPath); } } return AstVisitAction.Continue; }
public override AstVisitAction VisitVariableExpression(VariableExpressionAst variableExpressionAst) { bool flag = false; if (variableExpressionAst.VariablePath.IsAnyLocal()) { string unqualifiedPath = variableExpressionAst.VariablePath.UnqualifiedPath; if (this._validVariables.Contains(unqualifiedPath) || unqualifiedPath.Equals("args", StringComparison.OrdinalIgnoreCase)) { flag = true; this.UsesParameter = true; } else { flag = !variableExpressionAst.Splatted && variableExpressionAst.IsConstantVariable(); } } if (!flag) { ThrowError(new ScriptBlockToPowerShellNotSupportedException("CantConvertWithUndeclaredVariables", null, AutomationExceptions.CantConvertWithUndeclaredVariables, new object[] { variableExpressionAst.VariablePath }), variableExpressionAst); } return AstVisitAction.Continue; }