diff --git a/src/Libs/FShade.Imperative/Compiler.fs b/src/Libs/FShade.Imperative/Compiler.fs index a7cb036..56a14ee 100644 --- a/src/Libs/FShade.Imperative/Compiler.fs +++ b/src/Libs/FShade.Imperative/Compiler.fs @@ -1388,13 +1388,13 @@ module Compiler = | NewTuple(fields) -> let! s = State.get - let! ctor = e.Type |> Constructors.tuple s.moduleState.backend |> CompilerState.useCtor e.Type + let! ctor = e.Type |> Constructors.tuple s.moduleState.backend |> CompilerState.useCtor (typeName e.Type) let! fields = fields |> List.mapS toCExprS |>> List.toArray return CCall(ctor, fields) | NewRecord(t, fields) -> let! s = State.get - let! ctor = t |> Constructors.record s.moduleState.backend |> CompilerState.useCtor t + let! ctor = t |> Constructors.record s.moduleState.backend |> CompilerState.useCtor (typeName t) let! fields = fields |> List.mapS toCExprS |>> List.toArray return CCall(ctor, fields) diff --git a/src/Libs/FShade.Imperative/ModuleCompiler.fs b/src/Libs/FShade.Imperative/ModuleCompiler.fs index b85fa41..c4f7ae8 100644 --- a/src/Libs/FShade.Imperative/ModuleCompiler.fs +++ b/src/Libs/FShade.Imperative/ModuleCompiler.fs @@ -419,7 +419,21 @@ module ModuleCompiler = let set = System.Collections.Generic.HashSet() for t in graphs do visit set t - set |> Seq.toArray |> Array.sort |> Array.toList |> List.choose (fun t -> t.Definition) + set + |> Seq.toArray + |> Array.sort + |> Array.toList + |> List.choose (fun t -> t.Definition) + |> List.distinct + |> List.groupBy (fun (CStructDef(n, _)) -> n) + |> List.map (fun (n, defs) -> + if defs.Length > 1 then + let nl = Environment.NewLine + let defs = defs |> List.map string |> String.concat nl + failwithf $"[FShade] Multiple conflicting type definitions with name {n}:{nl}{defs}" + else + defs.Head + ) let ofTypes (types : list) = let compile =