Skip to content

Commit 4842528

Browse files
committed
Merge pull request #26 from PowerShell/BugFixes
Take Bug fixes to Raghu's branch
2 parents 6bf2d52 + 8172b1a commit 4842528

File tree

1 file changed

+32
-64
lines changed

1 file changed

+32
-64
lines changed

Engine/Helper.cs

Lines changed: 32 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -637,7 +637,7 @@ public int Compare(Tuple<int, int> t1, Tuple<int, int> t2)
637637
/// <summary>
638638
/// Class used to do variable analysis on the whole script
639639
/// </summary>
640-
public class ScriptAnalysis: ICustomAstVisitor2
640+
public class ScriptAnalysis: ICustomAstVisitor
641641
{
642642
private VariableAnalysis OuterAnalysis;
643643

@@ -663,7 +663,12 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
663663
if (scriptBlockAst == null) return null;
664664

665665
VariableAnalysis previousOuter = OuterAnalysis;
666-
OuterAnalysis = Helper.Instance.InitializeVariableAnalysisHelper(scriptBlockAst, OuterAnalysis);
666+
667+
// We already run variable analysis in these cases so check
668+
if (!(scriptBlockAst.Parent is FunctionDefinitionAst) && !(scriptBlockAst.Parent is FunctionMemberAst))
669+
{
670+
OuterAnalysis = Helper.Instance.InitializeVariableAnalysisHelper(scriptBlockAst, OuterAnalysis);
671+
}
667672

668673
if (scriptBlockAst.DynamicParamBlock != null)
669674
{
@@ -691,77 +696,40 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
691696
}
692697

693698
/// <summary>
694-
/// Do nothing
699+
/// perform special visiting action if statement is a typedefinitionast
695700
/// </summary>
696-
/// <param name="baseCtorInvokeMemberExpressionAst"></param>
701+
/// <param name="statementAst"></param>
697702
/// <returns></returns>
698-
public object VisitBaseCtorInvokeMemberExpression(BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst)
703+
private object VisitStatementHelper(StatementAst statementAst)
699704
{
700-
return null;
701-
}
702-
703-
/// <summary>
704-
/// Do nothing
705-
/// </summary>
706-
/// <param name="configurationDefinitionAst"></param>
707-
/// <returns></returns>
708-
public object VisitConfigurationDefinition(ConfigurationDefinitionAst configurationDefinitionAst)
709-
{
710-
return null;
711-
}
712-
713-
/// <summary>
714-
/// Do nothing
715-
/// </summary>
716-
/// <param name="dynamicKeywordAst"></param>
717-
/// <returns></returns>
718-
public object VisitDynamicKeywordStatement(DynamicKeywordStatementAst dynamicKeywordAst)
719-
{
720-
return null;
721-
}
705+
if (statementAst == null)
706+
{
707+
return null;
708+
}
722709

723-
/// <summary>
724-
/// Set outer analysis before further visiting.
725-
/// </summary>
726-
/// <param name="functionMemberAst"></param>
727-
/// <returns></returns>
728-
public object VisitFunctionMember(FunctionMemberAst functionMemberAst)
729-
{
730-
var previousOuter = OuterAnalysis;
731-
OuterAnalysis = Helper.Instance.InitializeVariableAnalysisHelper(functionMemberAst, OuterAnalysis);
710+
TypeDefinitionAst typeAst = statementAst as TypeDefinitionAst;
732711

733-
if (functionMemberAst != null)
712+
if (typeAst == null)
734713
{
735-
functionMemberAst.Body.Visit(this);
714+
statementAst.Visit(this);
715+
return null;
736716
}
737717

738-
OuterAnalysis = previousOuter;
718+
foreach (var member in typeAst.Members)
719+
{
720+
FunctionMemberAst functionMemberAst = member as FunctionMemberAst;
739721

740-
return null;
741-
}
722+
if (functionMemberAst != null)
723+
{
724+
var previousOuter = OuterAnalysis;
725+
OuterAnalysis = Helper.Instance.InitializeVariableAnalysisHelper(functionMemberAst, OuterAnalysis);
742726

743-
/// <summary>
744-
/// Do nothing
745-
/// </summary>
746-
/// <param name="propertyMemberAst"></param>
747-
/// <returns></returns>
748-
public object VisitPropertyMember(PropertyMemberAst propertyMemberAst)
749-
{
750-
return null;
751-
}
727+
if (functionMemberAst != null)
728+
{
729+
functionMemberAst.Body.Visit(this);
730+
}
752731

753-
/// <summary>
754-
/// Visit the functions defined in class
755-
/// </summary>
756-
/// <param name="typeDefinitionAst"></param>
757-
/// <returns></returns>
758-
public object VisitTypeDefinition(TypeDefinitionAst typeDefinitionAst)
759-
{
760-
if (typeDefinitionAst != null)
761-
{
762-
foreach (var member in typeDefinitionAst.Members)
763-
{
764-
member.Visit(this);
732+
OuterAnalysis = previousOuter;
765733
}
766734
}
767735

@@ -1177,7 +1145,7 @@ public object VisitNamedBlock(NamedBlockAst namedBlockAst)
11771145
{
11781146
foreach (var statement in namedBlockAst.Statements)
11791147
{
1180-
statement.Visit(this);
1148+
VisitStatementHelper(statement);
11811149
}
11821150
}
11831151

@@ -1260,7 +1228,7 @@ public object VisitStatementBlock(StatementBlockAst statementBlockAst)
12601228
{
12611229
foreach (var statement in statementBlockAst.Statements)
12621230
{
1263-
statement.Visit(this);
1231+
VisitStatementHelper(statement);
12641232
}
12651233
}
12661234

0 commit comments

Comments
 (0)