From 7be2bfee37449633d7480c656617949258c584d4 Mon Sep 17 00:00:00 2001 From: Alexei Lebedev Date: Sun, 25 Jan 2026 10:04:46 -0500 Subject: [PATCH] Fix src_func -createmissing --- cpp/amc/ctype.cpp | 8 ++++++-- cpp/gen/algo_lib_gen.cpp | 2 +- cpp/lib/algo/lib.cpp | 2 +- cpp/src_func/edit.cpp | 3 ++- include/algo.h | 3 ++- txt/lib/algo_lib/README.md | 8 ++++---- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/cpp/amc/ctype.cpp b/cpp/amc/ctype.cpp index 5a225fdf..188170db 100644 --- a/cpp/amc/ctype.cpp +++ b/cpp/amc/ctype.cpp @@ -513,8 +513,12 @@ void amc::tfunc_Ctype_Init() { } if (field.c_fuserinit) { Set(R, "$field", field.field); - Set(R, "$name", name_Get(field)); - Ins(&R, text, "$name_Userinit(); // dmmeta.fuserinit:$field"); + if (field.reftype == dmmeta_Reftype_reftype_Global) { + Ins(&R, text, "Userinit($pararg); // dmmeta.fuserinit:$field"); + } else { + Set(R, "$name", name_Get(field)); + Ins(&R, text, "$name_Userinit($pararg); // dmmeta.fuserinit:$field"); + } } }ind_end; diff --git a/cpp/gen/algo_lib_gen.cpp b/cpp/gen/algo_lib_gen.cpp index ad2ee34e..59fb0e59 100644 --- a/cpp/gen/algo_lib_gen.cpp +++ b/cpp/gen/algo_lib_gen.cpp @@ -3886,7 +3886,7 @@ void algo_lib::FDb_Init() { (void)Charset_ReadStrptrPlain(_db.SsimBreakName, "[]{}()\t \r\n:"); (void)Charset_ReadStrptrPlain(_db.SsimBreakValue, "[]{}()\t \r\n"); (void)Charset_ReadStrptrMaybe(_db.SsimQuotesafe, "a-zA-Z0-9_;&*^%$@.!:,+/-"); - _db_Userinit(); // dmmeta.fuserinit:algo_lib.FDb._db + Userinit(); // dmmeta.fuserinit:algo_lib.FDb._db // initialize LAry imtable (algo_lib.FDb.imtable) _db.imtable_n = 0; memset(_db.imtable_lary, 0, sizeof(_db.imtable_lary)); // zero out all level pointers diff --git a/cpp/lib/algo/lib.cpp b/cpp/lib/algo/lib.cpp index 314b7b63..e09fa815 100644 --- a/cpp/lib/algo/lib.cpp +++ b/cpp/lib/algo/lib.cpp @@ -719,7 +719,7 @@ void algo_lib::EndStep() { algo_lib::_db.step_limit.value = 0; } -void algo_lib::_db_Userinit() { +void algo_lib::Userinit() { algo_lib::_db.last_signal = 0; ind_beg_aryptr(cstring, str, algo_lib::temp_strings_Getary()) { ch_Reserve(str, 256); diff --git a/cpp/src_func/edit.cpp b/cpp/src_func/edit.cpp index 4ac1255b..3a2f0567 100644 --- a/cpp/src_func/edit.cpp +++ b/cpp/src_func/edit.cpp @@ -41,9 +41,10 @@ void src_func::Main_EditFunc() { void src_func::Main_CreateMissing() { ind_beg(_db_userfunc_curs,userfunc,_db) { + src_func::FUserfunc *alias = ind_userfunc_cppname_Find(userfunc.cppname); if (!zd_func_EmptyQ(userfunc)) { // instances exist - } else if (ind_userfunc_cppname_Find(userfunc.cppname)!=NULL) { + } else if (alias && alias!=&userfunc) { // instances don't exist... // but another function with the same cpp name exists. // this means we can't reliably determine if the function is missing diff --git a/include/algo.h b/include/algo.h index a50bfcd4..6406945c 100644 --- a/include/algo.h +++ b/include/algo.h @@ -1993,7 +1993,8 @@ namespace algo_lib { // update-hdr // Calling this function may be necessary when it becomes known that // no further progress can be made by the step function. void EndStep(); - void _db_Userinit(); + // (user-implemented function, prototype is in amc-generated header) + // void Userinit(); // fuserinit:algo_lib.FDb._db // ------------------------------------------------------------------- // cpp/lib/algo/line.cpp -- Line processing diff --git a/txt/lib/algo_lib/README.md b/txt/lib/algo_lib/README.md index f09db400..33c2d293 100644 --- a/txt/lib/algo_lib/README.md +++ b/txt/lib/algo_lib/README.md @@ -727,6 +727,10 @@ tempstr algo_lib::Tuple_Subst(algo_lib::Replscope &R, strptr text) void algo_lib::UpdateRate(algo::I64Rate &rate, i64 val) ``` +```c++ +void algo_lib::Userinit() +``` + ```c++ int WCOREDUMP(int status) ``` @@ -765,10 +769,6 @@ bool algo_lib::WritePid(algo_lib::FLockfile &lockfile) template inline T &algo::aryptr::operator [](u32 idx) const ``` -```c++ -void algo_lib::_db_Userinit() -``` - ```c++ inline u32 _mm_crc32_u16(u32 prev, u16 val) ```