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)]