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); } }
public virtual void StartDataRedefinesEntry(DataRedefinesEntry entry) { SetCurrentNodeToTopLevelItem(entry.LevelNumber); var node = new DataRedefines(entry); Enter(node); if (!node.IsPartOfATypeDef) { node.SymbolTable.AddVariable(node); } }
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); }
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); }
private void EnterDataRedefinesEntry(DataRedefinesEntry data) { SetCurrentNodeToTopLevelItem(data.LevelNumber.Value); var node = new DataRedefines(data); Enter(node); if (!node.IsPartOfATypeDef) node.SymbolTable.AddVariable(node); }
public virtual bool Visit(DataRedefines dataRedefines) { return(true); }
public override bool Visit(DataRedefines dataRedefines) { RedefinesChecker.OnNode(dataRedefines); return(true); }