コード例 #1
0
        public static void OnNode(DataRedefines redefinesNode)
        {
            if (redefinesNode == null)
            {
                return; //not my job
            }
            if (redefinesNode.IsPartOfATypeDef)
            {
                DiagnosticUtils.AddError(redefinesNode, "Illegal REDEFINES as part of a TYPEDEF",
                                         MessageCode.SemanticTCErrorInParser);
            }

            var redefinesSymbolReference = redefinesNode.CodeElement().RedefinesDataName;
            var redefinedVariable        = redefinesNode.SymbolTable.GetRedefinedVariable(redefinesNode, redefinesSymbolReference);

            if (redefinedVariable == null)
            {
                string message = "Illegal REDEFINES: Symbol \'" + redefinesSymbolReference + "\' is not referenced";
                DiagnosticUtils.AddError(redefinesNode, message, redefinesSymbolReference, code: MessageCode.SemanticTCErrorInParser);
                return;
            }

            if (redefinedVariable.IsStronglyTyped || redefinedVariable.IsStrictlyTyped)
            {
                string message = string.Format("Illegal REDEFINES: '{0}' is {1}", redefinesSymbolReference,
                                               redefinedVariable.IsStronglyTyped ? "strongly-typed" : "strictly-typed");
                DiagnosticUtils.AddError(redefinesNode, message, redefinesSymbolReference, code: MessageCode.SemanticTCErrorInParser);
            }
        }
コード例 #2
0
        public virtual void StartDataRedefinesEntry(DataRedefinesEntry entry)
        {
            SetCurrentNodeToTopLevelItem(entry.LevelNumber);
            var node = new DataRedefines(entry);

            Enter(node);
            if (!node.IsPartOfATypeDef)
            {
                node.SymbolTable.AddVariable(node);
            }
        }
コード例 #3
0
        public virtual void StartDataRedefinesEntry(DataRedefinesEntry entry)
        {
            SetCurrentNodeToTopLevelItem(entry.LevelNumber);
            var node = new DataRedefines(entry);

            if (_CurrentTypeDefinition != null)
            {
                node.ParentTypeDefinition = _CurrentTypeDefinition;
            }
            Enter(node);
            node.SymbolTable.AddVariable(node);
        }
コード例 #4
0
ファイル: SymbolTable.cs プロジェクト: jdrew1303/TypeCobol
        public DataDefinition GetRedefinedVariable(DataRedefines redefinesNode, SymbolReference symbolReference)
        {
            var childrens = redefinesNode.Parent.Children;
            int index     = redefinesNode.Parent.IndexOf(redefinesNode);

            bool redefinedVariableFound = false;

            while (!redefinedVariableFound && index >= 0)
            {
                CommonDataDescriptionAndDataRedefines child = childrens[index].CodeElement as DataDescriptionEntry ??
                                                              (CommonDataDescriptionAndDataRedefines)
                                                              (childrens[index].CodeElement as DataRedefinesEntry);

                if (child != null && (child is DataDescriptionEntry || child is DataRedefinesEntry))
                {
                    if (child.DataName != null &&
                        string.Equals(child.DataName.Name, symbolReference.Name,
                                      StringComparison.InvariantCultureIgnoreCase))
                    {
                        return(childrens[index] as DataDefinition);
                    }
                    else if (child.DataName != null && child is DataDescriptionEntry &&
                             !string.Equals(child.DataName.Name, symbolReference.Name,
                                            StringComparison.InvariantCultureIgnoreCase))
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }

                index--;
            }
            return(null);
        }
コード例 #5
0
 private void EnterDataRedefinesEntry(DataRedefinesEntry data)
 {
     SetCurrentNodeToTopLevelItem(data.LevelNumber.Value);
     var node = new DataRedefines(data);
     Enter(node);
     if (!node.IsPartOfATypeDef) node.SymbolTable.AddVariable(node);
 }
コード例 #6
0
 public virtual bool Visit(DataRedefines dataRedefines)
 {
     return(true);
 }
コード例 #7
0
ファイル: CrossChecker.cs プロジェクト: telkomops/TypeCobol
 public override bool Visit(DataRedefines dataRedefines)
 {
     RedefinesChecker.OnNode(dataRedefines);
     return(true);
 }