示例#1
0
        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);
        }
示例#2
0
        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);
        }