From a58ac1a69c451e1785edbe0a3b771bdbb9f9aceb Mon Sep 17 00:00:00 2001
From: Michael Sippel <micha@fragmental.art>
Date: Sat, 10 May 2025 15:16:51 +0200
Subject: [PATCH] in generation of main function, fix case that input/output
 buffer is a  nullterm string

---
 src/c_gen/gen_lib.rs | 17 +++++++++++------
 src/main.rs          | 15 +++++++++------
 2 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/c_gen/gen_lib.rs b/src/c_gen/gen_lib.rs
index fa2ce88..f8858bb 100644
--- a/src/c_gen/gen_lib.rs
+++ b/src/c_gen/gen_lib.rs
@@ -21,18 +21,23 @@ pub fn generate_lib(
                     uint8_t bufIn[4096];
                     uint8_t bufOut[4096];"#));
 
-                    let (src_top, src_floor) = inst.ty.src_type.get_floor_type();
-                    if src_floor == dict.parse_desugared("<Seq~<ValueTerminated 0> native.UInt8>").expect("").sugar(dict) {
+                    if let Ok(_) = laddertypes::subtype_unify(
+                        &inst.ty.src_type,
+                        &dict.parse("<Seq~<ValueTerminated 0> Char~Ascii~native.UInt8>").expect("")
+                    ) {
                         c_source.push_str("scanf(\"%s\", bufIn);");
                     } else {
                         c_source.push_str("read(0, bufIn, sizeof(bufIn));");
                     }
 
-                    c_source.push_str(&format!(r#"FUSE( {}, (void const*)bufIn, (void*)bufOut );"#, inst.instantiated_symbol_name(dict, &HashMap::new())));
+                    c_source.push_str(
+                        &format!(r#"FUSE( {}, (void const*)bufIn, (void*)bufOut );"#,
+                            inst.instantiated_symbol_name(dict, &HashMap::new()))
+                    );
 
-                    if let Ok(ψ) = laddertypes::constraint_system::subtype_unify(
-                        &inst.ty.src_type,
-                        &dict.parse_desugared("<Seq~<ValueTerminated 0> native.UInt8>").expect("").sugar(dict)
+                    if let Ok(ψ) = laddertypes::subtype_unify(
+                        &inst.ty.dst_type,
+                        &dict.parse("<Seq~<ValueTerminated 0> native.UInt8>").expect("")
                     ) {
                         c_source.push_str("printf(\"%s\\n\", bufOut);");
                     } else {
diff --git a/src/main.rs b/src/main.rs
index d1e114a..b7111d6 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -9,12 +9,15 @@ use {
     crate::{
         morphism::LdmcPrimMorph,
         parser::morphism_base_parser,
-    }, ariadne::{Color, Label, Report, ReportKind, Source}, chumsky::prelude::*, clap::{Parser, Subcommand}, laddertypes::{
-        morphism::MorphismType,
-        parser::ParseLadderType, BimapTypeDict
-    }, parser::morphism_type_parser, std::{path::PathBuf,
-    sync::{Arc, RwLock}}, tiny_ansi::TinyAnsi,
-    walkdir::WalkDir
+    },
+    laddertypes::{
+        morphism::MorphismType, BimapTypeDict
+    }, parser::morphism_type_parser,
+    ariadne::{Color, Label, Report, ReportKind, Source},
+    clap::Parser,
+    walkdir::WalkDir,
+    tiny_ansi::TinyAnsi,
+    std::{path::PathBuf, sync::{Arc, RwLock}},
 };
 
 #[derive(Parser, Debug)]