@@ -637,7 +637,7 @@ public int Compare(Tuple<int, int> t1, Tuple<int, int> t2)
637
637
/// <summary>
638
638
/// Class used to do variable analysis on the whole script
639
639
/// </summary>
640
- public class ScriptAnalysis : ICustomAstVisitor2
640
+ public class ScriptAnalysis : ICustomAstVisitor
641
641
{
642
642
private VariableAnalysis OuterAnalysis ;
643
643
@@ -663,7 +663,12 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
663
663
if ( scriptBlockAst == null ) return null ;
664
664
665
665
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
+ }
667
672
668
673
if ( scriptBlockAst . DynamicParamBlock != null )
669
674
{
@@ -691,77 +696,40 @@ public object VisitScriptBlock(ScriptBlockAst scriptBlockAst)
691
696
}
692
697
693
698
/// <summary>
694
- /// Do nothing
699
+ /// perform special visiting action if statement is a typedefinitionast
695
700
/// </summary>
696
- /// <param name="baseCtorInvokeMemberExpressionAst "></param>
701
+ /// <param name="statementAst "></param>
697
702
/// <returns></returns>
698
- public object VisitBaseCtorInvokeMemberExpression ( BaseCtorInvokeMemberExpressionAst baseCtorInvokeMemberExpressionAst )
703
+ private object VisitStatementHelper ( StatementAst statementAst )
699
704
{
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
+ }
722
709
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 ;
732
711
733
- if ( functionMemberAst ! = null )
712
+ if ( typeAst = = null )
734
713
{
735
- functionMemberAst . Body . Visit ( this ) ;
714
+ statementAst . Visit ( this ) ;
715
+ return null ;
736
716
}
737
717
738
- OuterAnalysis = previousOuter ;
718
+ foreach ( var member in typeAst . Members )
719
+ {
720
+ FunctionMemberAst functionMemberAst = member as FunctionMemberAst ;
739
721
740
- return null ;
741
- }
722
+ if ( functionMemberAst != null )
723
+ {
724
+ var previousOuter = OuterAnalysis ;
725
+ OuterAnalysis = Helper . Instance . InitializeVariableAnalysisHelper ( functionMemberAst , OuterAnalysis ) ;
742
726
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
+ }
752
731
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 ;
765
733
}
766
734
}
767
735
@@ -1177,7 +1145,7 @@ public object VisitNamedBlock(NamedBlockAst namedBlockAst)
1177
1145
{
1178
1146
foreach ( var statement in namedBlockAst . Statements )
1179
1147
{
1180
- statement . Visit ( this ) ;
1148
+ VisitStatementHelper ( statement ) ;
1181
1149
}
1182
1150
}
1183
1151
@@ -1260,7 +1228,7 @@ public object VisitStatementBlock(StatementBlockAst statementBlockAst)
1260
1228
{
1261
1229
foreach ( var statement in statementBlockAst . Statements )
1262
1230
{
1263
- statement . Visit ( this ) ;
1231
+ VisitStatementHelper ( statement ) ;
1264
1232
}
1265
1233
}
1266
1234
0 commit comments