DataDictionary.Interpreter.Call.SemanticAnalysis C# (CSharp) Метод

SemanticAnalysis() публичный Метод

Performs the semantic analysis of the expression
public SemanticAnalysis ( INamable instance, DataDictionary.Interpreter.Filter.BaseFilter expectation ) : bool
instance INamable the reference instance on which this element should analysed
expectation DataDictionary.Interpreter.Filter.BaseFilter Indicates the kind of element we are looking for
Результат bool
        public override bool SemanticAnalysis(INamable instance, BaseFilter expectation)
        {
            bool retVal = base.SemanticAnalysis(instance, expectation);

            if (retVal)
            {
                // Called
                if (Called != null)
                {
                    Called.SemanticAnalysis(instance, IsCallable.INSTANCE);
                    StaticUsage.AddUsages(Called.StaticUsage, Usage.ModeEnum.Call);

                    // Actual parameters
                    int i = 0;
                    foreach (Expression actual in ActualParameters)
                    {
                        Usage.ModeEnum mode = Usage.ModeEnum.Read;
                        ICallable called = Called.Ref as ICallable;
                        if (called != null)
                        {
                            Parameter parameter = (Parameter)called.FormalParameters[i];
                            mode = called.ModeForParameter(parameter);
                        }

                        actual.SemanticAnalysis(instance, IsActualParameter.INSTANCE);
                        StaticUsage.AddUsages(actual.StaticUsage, mode);
                        i += 1;
                    }

                    foreach (KeyValuePair<Designator, Expression> pair in NamedActualParameters)
                    {
                        Usage.ModeEnum mode = Usage.ModeEnum.Read;
                        ICallable called = Called.Ref as ICallable;
                        if (called != null)
                        {
                            Parameter parameter = called.GetFormalParameter(pair.Key.Image);
                            pair.Key.Ref = parameter;
                            StaticUsage.AddUsage(pair.Key.Ref, Root, Usage.ModeEnum.Parameter);
                            mode = called.ModeForParameter(parameter);
                        }
                        pair.Value.SemanticAnalysis(instance, IsActualParameter.INSTANCE);
                        StaticUsage.AddUsages(pair.Value.StaticUsage, mode);
                    }

                    ParameterAssociation = CreateParameterAssociation(Called.Ref as ICallable);
                }
                else
                {
                    AddError("Called function not provided", RuleChecksEnum.SemanticAnalysisError);
                }
            }

            return retVal;
        }