private string GetGlobalVariableFieldName(Symbol symbol) { string name; if (!_globalVariableCache.TryGetValue(symbol.Location, out name)) { if (symbol.ImportInfo != null) { ImportedField globalField = (ImportedField)symbol.ImportInfo; StringBuilder fieldNameBuilder = new StringBuilder(); fieldNameBuilder.Append(IrisTypeToCilTypeName(globalField.FieldType)); fieldNameBuilder.Append(' '); AppendImportedMemberName(fieldNameBuilder, globalField); name = fieldNameBuilder.ToString(); } else if (_programName == null) { // This can be null when running unit tests name = symbol.Location.ToString(); } else { name = string.Format( "{0} {1}::{2}", IrisTypeToCilTypeName(symbol.Type), _programName, symbol.Name); } _globalVariableCache.Add(symbol.Location, name); } return(name); }
protected void ImportGlobalField( FilePosition fp, string symbolName, ImportedModule module, string declaringTypeName, string fieldName) { ImportedType declaringType = module.TryGetTypeByName(declaringTypeName); if (declaringType == null) { CompileErrors.Add(fp, String.Format("Cannot find imported type '{0}'.", declaringTypeName)); return; } ImportedField field = declaringType.TryGetPublicStaticField(fieldName); if (field == null) { CompileErrors.Add(fp, String.Format("Cannot find imported field '{0}.{1}'.", declaringTypeName, fieldName)); return; } IrisType fieldType = field.FieldType; if (fieldType == IrisType.Invalid) { CompileErrors.Add(fp, String.Format("Type of field '{0}.{1}' is not supported by the language.", declaringTypeName, fieldName)); return; } SymbolTable.Add(symbolName, field.FieldType, StorageClass.Global, field); }