diff --git a/Cesium.CodeGen.Tests/verified/CodeGenEnumTests.EnumUseValuesInStructPointerDeclaration.verified.txt b/Cesium.CodeGen.Tests/verified/CodeGenEnumTests.EnumUseValuesInStructPointerDeclaration.verified.txt index fe755669..e6646bfd 100644 --- a/Cesium.CodeGen.Tests/verified/CodeGenEnumTests.EnumUseValuesInStructPointerDeclaration.verified.txt +++ b/Cesium.CodeGen.Tests/verified/CodeGenEnumTests.EnumUseValuesInStructPointerDeclaration.verified.txt @@ -7,7 +7,7 @@ IL_000e: ldc.i4.s 11 IL_0010: stfld System.Int32 TestStruct::x IL_0015: ldloc V_0 - IL_0019: stsfld TestStruct ::global_tmp_0 - IL_001e: ldsflda TestStruct ::global_tmp_0 + IL_0019: stsfld TestStruct ::__global_tmp_0 + IL_001e: ldsflda TestStruct ::__global_tmp_0 IL_0023: stsfld TestStruct* ::x IL_0028: ret diff --git a/Cesium.CodeGen.Tests/verified/CodeGenTypeTests.ResolutionOfRecursiveTypes.verified.txt b/Cesium.CodeGen.Tests/verified/CodeGenTypeTests.ResolutionOfRecursiveTypes.verified.txt index f5a0dccf..6c97ab86 100644 --- a/Cesium.CodeGen.Tests/verified/CodeGenTypeTests.ResolutionOfRecursiveTypes.verified.txt +++ b/Cesium.CodeGen.Tests/verified/CodeGenTypeTests.ResolutionOfRecursiveTypes.verified.txt @@ -2,7 +2,7 @@ Type: Fields: Node* ::root - Node ::global_tmp_0 + Node ::__global_tmp_0 Methods: System.Void ::.cctor() Locals: @@ -13,8 +13,8 @@ IL_000e: ldc.i4.0 IL_000f: stfld Node* Node::parent IL_0014: ldloc V_0 - IL_0018: stsfld Node ::global_tmp_0 - IL_001d: ldsflda Node ::global_tmp_0 + IL_0018: stsfld Node ::__global_tmp_0 + IL_001d: ldsflda Node ::__global_tmp_0 IL_0022: stsfld Node* ::root IL_0027: ret diff --git a/Cesium.CodeGen/Contexts/FunctionScope.cs b/Cesium.CodeGen/Contexts/FunctionScope.cs index 5614d7ad..9626571c 100644 --- a/Cesium.CodeGen/Contexts/FunctionScope.cs +++ b/Cesium.CodeGen/Contexts/FunctionScope.cs @@ -145,6 +145,6 @@ public void MergeScope(BlockScope scope) /// public string GetTmpVariable() { - return "local_" + tempLocalIndex++; + return "__local_" + tempLocalIndex++; } } diff --git a/Cesium.CodeGen/Contexts/GlobalConstructorScope.cs b/Cesium.CodeGen/Contexts/GlobalConstructorScope.cs index 84a3d6e1..4a136435 100644 --- a/Cesium.CodeGen/Contexts/GlobalConstructorScope.cs +++ b/Cesium.CodeGen/Contexts/GlobalConstructorScope.cs @@ -106,6 +106,6 @@ public void RemovePragma(Predicate predicate) where T : IPragma /// public string GetTmpVariable() { - return "global_tmp_" + tempLocalIndex++; + return "__global_tmp_" + tempLocalIndex++; } } diff --git a/Cesium.CodeGen/Ir/Expressions/CompoundObjectFieldInitializer.cs b/Cesium.CodeGen/Ir/Expressions/CompoundObjectFieldInitializer.cs index 30bf3772..bd85941c 100644 --- a/Cesium.CodeGen/Ir/Expressions/CompoundObjectFieldInitializer.cs +++ b/Cesium.CodeGen/Ir/Expressions/CompoundObjectFieldInitializer.cs @@ -2,11 +2,6 @@ using Cesium.CodeGen.Contexts; using Cesium.CodeGen.Extensions; using Cesium.CodeGen.Ir.Types; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace Cesium.CodeGen.Ir.Expressions; internal sealed class CompoundObjectFieldInitializer : IExpression @@ -15,9 +10,8 @@ internal sealed class CompoundObjectFieldInitializer : IExpression internal Designation Designation; internal CompoundObjectFieldInitializer(AssignmentInitializer initializer, IDeclarationScope scope) + : this(initializer.Expression.ToIntermediate(scope), initializer.Designation!) { - Inner = initializer.Expression.ToIntermediate(scope); - Designation = initializer.Designation!; } internal CompoundObjectFieldInitializer(IExpression inner, Designation designation) diff --git a/Cesium.CodeGen/Ir/Expressions/CompoundObjectInitializationExpression.cs b/Cesium.CodeGen/Ir/Expressions/CompoundObjectInitializationExpression.cs index a0fc19c8..203d8083 100644 --- a/Cesium.CodeGen/Ir/Expressions/CompoundObjectInitializationExpression.cs +++ b/Cesium.CodeGen/Ir/Expressions/CompoundObjectInitializationExpression.cs @@ -1,3 +1,4 @@ +using System.Collections.Immutable; using Cesium.Ast; using Cesium.CodeGen.Contexts; using Cesium.CodeGen.Extensions; @@ -6,31 +7,30 @@ using Cesium.Core; using Mono.Cecil; using Mono.Cecil.Cil; -using System.Collections.Immutable; namespace Cesium.CodeGen.Ir.Expressions; internal sealed class CompoundObjectInitializationExpression : IExpression { - private IType? _type; + private readonly IType? _type; private FieldDefinition? _typeDef; private Action? _prefixAction; private Action? _postfixAction; private readonly ImmutableArray _initializers; - public CompoundObjectInitializationExpression(IType type, ImmutableArray initializers) + public CompoundObjectInitializationExpression(IType? type, ImmutableArray initializers) { _type = type; _initializers = initializers; } public CompoundObjectInitializationExpression(ImmutableArray initializers) + : this(null, initializers) { - _initializers = initializers; } - public CompoundObjectInitializationExpression(Ast.CompoundLiteralExpression expression, IDeclarationScope scope) + public CompoundObjectInitializationExpression(CompoundLiteralExpression expression, IDeclarationScope scope) { - var (type, cliDescription) = LocalDeclarationInfo.ProcessSpecifiers(expression.TypeName.SpecifierQualifierList, scope); + var (type, _) = LocalDeclarationInfo.ProcessSpecifiers(expression.TypeName.SpecifierQualifierList, scope); _type = type; _initializers = expression.Initializers.Select(initializer => IScopedDeclarationInfo.ConvertInitializer(_type, initializer, scope)).ToImmutableArray(); } @@ -62,7 +62,7 @@ public void EmitTo(IEmitScope scope) if (expr == null) throw new CompilationException($"Retrieved null initializer!"); - + if (_prefixAction is not null) { _prefixAction(); @@ -97,7 +97,7 @@ public void EmitTo(IEmitScope scope) instructions.Add(Instruction.Create(OpCodes.Ldflda, _typeDef)); } return; - } + } for (int i = 0; i < initializers.Length; i++) { @@ -118,8 +118,9 @@ public void EmitTo(IEmitScope scope) EmitPathToField(scope, typeDef, f); } else if (init is CompoundObjectInitializationExpression objInit) - { + { // UNSAFE UNSAFE UNSAFE UNSAFE UNSAFE UNSAFE UNSAFE + var index = i; objInit.Hint( fieldsDefs[i], () => @@ -128,7 +129,7 @@ public void EmitTo(IEmitScope scope) }, () => { - instructions.Add(Instruction.Create(OpCodes.Stfld, fieldsDefs[i])); + instructions.Add(Instruction.Create(OpCodes.Stfld, fieldsDefs[index])); }); objInit.EmitTo(scope); } @@ -155,7 +156,7 @@ private static void EmitPathToField(IEmitScope scope, TypeDefinition type, Compo var p = path[i]; if (p is IdentifierDesignator id) { - field = type.Fields.FirstOrDefault(_ => _.Name == id.FieldName)!; + field = type.Fields.FirstOrDefault(d => d.Name == id.FieldName)!; if (field == null) // maybe anon? { List list = new(1); @@ -270,7 +271,7 @@ static Instruction GetWriteInstruction(MetadataType type) case MetadataType.ByReference: return Instruction.Create(OpCodes.Stind_I); default: - throw new CompilationException($"This array type isnt supported: {type}"); + throw new CompilationException($"This array type isn't supported: {type}"); } } @@ -279,7 +280,7 @@ static Instruction GetWriteInstruction(MetadataType type) public IExpression Lower(IDeclarationScope scope) { var resolvedType = _type?.TypeKind == TypeKind.Unresolved ? scope.ResolveType(_type) : _type; - var initializers = _initializers.Select(_ => _?.Lower(scope)).ToImmutableArray(); + var initializers = _initializers.Select(e => e?.Lower(scope)).ToImmutableArray(); return resolvedType == null ? new CompoundObjectInitializationExpression(initializers) : new CompoundObjectInitializationExpression(resolvedType, initializers); } }