public UTCNameMangler(bool ordinalBased) { if (!ordinalBased) { OrdinalReceived = true; _importExportOrdinals = new ImportExportOrdinals(); _importExportOrdinals.typeOrdinals = new ReadOnlyDictionary <TypeDesc, uint>(new Dictionary <TypeDesc, uint>()); _importExportOrdinals.methodOrdinals = new ReadOnlyDictionary <MethodDesc, uint>(new Dictionary <MethodDesc, uint>()); } else { OrdinalReceived = false; } }
public UTCNameMangler(bool hasImport, bool hasExport, ImportExportOrdinals ordinals, TypeSystemContext context, List <EcmaModule> inputModules, bool buildingClassLib) : base(new UtcNodeMangler()) { // Do not support both imports and exports for one module Debug.Assert(!hasImport || !hasExport); HasImport = hasImport; HasExport = hasExport; BuildingClassLib = buildingClassLib; if (hasImport) { _importOrdinals = ordinals; } else if (hasExport) { _exportOrdinals = ordinals; } _inputModuleIndices = new Dictionary <EcmaModule, int>(); for (int i = 0; i < inputModules.Count; i++) { _inputModuleIndices[inputModules[i]] = i; } // Use SHA256 hash here to provide a high degree of uniqueness to symbol names without requiring them to be long // This hash function provides an exceedingly high likelihood that no two strings will be given equal symbol names // This is not considered used for security purpose; however collisions would be highly unfortunate as they will cause compilation // failure. _sha256 = SHA256.Create(); // Special case primitive types and use shortened names. This reduces string sizes in symbol names, and reduces the overall native memory // usage of the compiler _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Void), "void"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Boolean), "bool"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Char), "char"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.SByte), "sbyte"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Byte), "byte"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Int16), "short"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.UInt16), "ushort"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Int32), "int"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.UInt32), "uint"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Int64), "long"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.UInt64), "ulong"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Single), "float"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Double), "double"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.Object), "object"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.String), "string"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.IntPtr), "IntPtr"); _mangledTypeNames = _mangledTypeNames.Add(context.GetWellKnownType(WellKnownType.UIntPtr), "UIntPtr"); }
public UTCNameMangler(bool hasImport, bool hasExport, ImportExportOrdinals ordinals) { // Do not support both imports and exports for one module Debug.Assert(!hasImport || !hasExport); HasImport = hasImport; HasExport = hasExport; if (hasImport) { _importOrdinals = ordinals; } else if (hasExport) { _exportOrdinals = ordinals; } }
public UTCNameMangler(bool hasImport, bool hasExport, ImportExportOrdinals ordinals) : base(new UtcNodeMangler()) { // Do not support both imports and exports for one module Debug.Assert(!hasImport || !hasExport); HasImport = hasImport; HasExport = hasExport; if (hasImport) { _importOrdinals = ordinals; } else if (hasExport) { _exportOrdinals = ordinals; } // Use SHA256 hash here to provide a high degree of uniqueness to symbol names without requiring them to be long // This hash function provides an exceedingly high likelihood that no two strings will be given equal symbol names // This is not considered used for security purpose; however collisions would be highly unfortunate as they will cause compilation // failure. _sha256 = SHA256.Create(); }
public void ReceiveImportExportOrdinals(ImportExportOrdinals ordinals) { Debug.Assert(!OrdinalReceived); _importExportOrdinals = ordinals; OrdinalReceived = true; }