public static void ResolveIdentifierExpression(IdentifierExpression identifier, Table.Table table, EmbeddedStatement initializedInBlock, bool checkInit = true) { if (identifier.IdentifierState == IdentifierExpression.State.Decl) { if (!table.PushIdentifier(identifier, table == GlobalTable.Table ? true : false)) { ReportError(new IdentifierIsAlreadyDeclared(identifier.Name, identifier.SourceContext)); } if (initializedInBlock != null) { table.InitializeInBlock(identifier, initializedInBlock); } } else { if (!table.CheckIdentifier(identifier.Name)) { ReportError(new IdentifierIsNotDeclared(identifier.Name, identifier.SourceContext)); } else { TableIdentifier tableIdentifier = table.FetchIdentifier(identifier.Name); identifier.Type = tableIdentifier.Type; //check for initialization in this block if (!table.IsInitializedInBlock(identifier, initializedInBlock) && checkInit && !tableIdentifier.InitializedGlobally) { ReportError(new IdentifierIsNotInitialized(identifier.Name, identifier.SourceContext)); } } } }