@@ -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