private void AssignTypeWithCaching(SyntaxBase syntax, Func<TypeAssignment> assignFunc) { if (assignedTypes.ContainsKey(syntax)) { return; } var cyclicErrorType = CheckForCyclicError(syntax); if (cyclicErrorType != null) { assignedTypes[syntax] = new TypeAssignment(cyclicErrorType); return; } assignedTypes[syntax] = assignFunc(); }
public static ITypeAssignment ResolveType(IModule module, TypeAssignment type) { ITypeAssignment result = ResolveDeclaration(module, type.Type) as ITypeAssignment; return (result != null) ? result : type; }
private static SnmpScalarNode GenerateSnmpScalarNode(ObjectType ote, SnmpTreeNode parentNode, bool ignoreAccessibleFlag = false) { SnmpScalarNode result; ITypeAssignment mibType = ote.BaseType; IntegerType it = (mibType as IntegerType); if (it != null) { if (ote.ReferredType.Name == Symbol.TruthValue.ToString()) { result = new SnmpScalarNodeTruthValue(parentNode); } else if ((it.Type == IntegerType.Types.Integer) || (it.Type == IntegerType.Types.Integer32)) { result = new SnmpScalarNodeInt(parentNode); } else { Console.WriteLine(String.Format("Unsupported IntegerType '{0}'!", it.Type)); return(null); } if (it.IsEnumeration) { result.Restrictions.AddRange(CreateRestrictions(it.Enumeration)); } else { result.Restrictions.AddRange(CreateRestrictions(it.Ranges)); } } else { UnsignedType ut = (mibType as UnsignedType); if (ut != null) { if ((ut.Type == UnsignedType.Types.Unsigned32) || (ut.Type == UnsignedType.Types.Gauge32)) { result = new SnmpScalarNodeUint(SnmpDataType.Gauge, parentNode); } else if (ut.Type == UnsignedType.Types.Counter32) { result = new SnmpScalarNodeUint(SnmpDataType.Counter, parentNode); } else if (ut.Type == UnsignedType.Types.TimeTicks) { result = new SnmpScalarNodeUint(SnmpDataType.TimeTicks, parentNode); } else if (ut.Type == UnsignedType.Types.Counter64) { result = new SnmpScalarNodeCounter64(parentNode); if ((ut.Ranges != null) && (ut.Ranges.Count > 0)) { Console.WriteLine(String.Format("Generation of ranges is not supported for Counter64 type!")); return(null); } } else { Console.WriteLine(String.Format("Unsupported UnsignedType '{0}'!", ut.Type)); return(null); } result.Restrictions.AddRange(CreateRestrictions(ut.Ranges)); } else if (mibType is IpAddressType) { result = new SnmpScalarNodeOctetString(SnmpDataType.IpAddress, parentNode); result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size)); } else if (mibType is OpaqueType) { result = new SnmpScalarNodeOctetString(SnmpDataType.Opaque, parentNode); result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size)); } else if (mibType is OctetStringType) { result = new SnmpScalarNodeOctetString(SnmpDataType.OctetString, parentNode); result.Restrictions.AddRange(CreateRestrictions((mibType as OctetStringType).Size)); } else if (mibType is ObjectIdentifierType) { result = new SnmpScalarNodeObjectIdentifier(parentNode); } else if (mibType is BitsType) { result = new SnmpScalarNodeBits(parentNode, (uint)((mibType as BitsType).Map.GetHighestValue() + 1)); result.Restrictions.AddRange(CreateRestrictions(mibType as BitsType)); } else { TypeAssignment ta = mibType as TypeAssignment; if (ta != null) { Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}', Type='{2}'!", ta.Module.Name, ta.Name, ta.Type)); } else { Console.WriteLine(String.Format("Unsupported BaseType: Module='{0}', Name='{1}'!", mibType.Module, mibType.Name)); } return(null); } } result.Name = _alphaNumericRegex.Replace(ote.Name, ""); result.Oid = ote.Value; if (ote.Access == MaxAccess.readWrite) { result.AccessMode = SnmpAccessMode.ReadWrite; } else if (ote.Access == MaxAccess.readOnly) { result.AccessMode = SnmpAccessMode.ReadOnly; } else if (ote.Access == MaxAccess.readCreate) { result.AccessMode = SnmpAccessMode.ReadOnly; } else if (ignoreAccessibleFlag && (ote.Access == MaxAccess.notAccessible)) { result.AccessMode = SnmpAccessMode.NotAccessible; } else { // not accessible or unsupported access type return(null); } return(result); }