From d2dd7312d9571d6893b23a124c7425e7628b6b8b Mon Sep 17 00:00:00 2001 From: Churkin Aleksey Date: Wed, 2 Sep 2026 15:42:11 +0300 Subject: [PATCH 1/2] interop: always hand a C++ bind "" for a null daslang string A daslang string is null when empty, and a bind taking const char * used to receive that null - or not - depending on whether its translation unit included ast/ast_typefactory_bind.h, where the cast_arg specializations that substitute "" lived. That was survivable while SimNode_ExtFuncCall took the function as a non type template parameter: the node was instantiated once per bound function, in the unit that did the binding, so the choice was fixed per bind. Keyed on the signature alone, one node serves every bind of that signature. A game link has 27 objects defining the node for void (*)(char const *): 10 generated dasImgui units which include the header, and 17 engine units which do not. Same weak symbol, different bodies, so which definition survives depends on object order. ImGui::PushID got a nullptr and crashed in ImHashStr. It is an ODR violation, and none of it is diagnosed: neither ld.gold --detect-odr-violations nor gcc -Wodr says a word. Substitute unconditionally instead, in all three lanes: the cast_arg specializations move next to the generic in simulate/interop.h, and the AOT and JIT emitters stop asking whether the callee opted in. The AOT emitter opened the cast on the argument expression type and closed it on the declared parameter type, which only stayed balanced while the flag gated both - it now reads the declared type on both sides. That retires needStringCast, its rtti flag name, its printer and its setters. The bit leaves a hole in MoreFunctionFlags, which rtti exposes and the AST module cache serializes. A bind never sees a null string now, so the null checks guarding those arguments go: module_builtin_string trades 44 stringLengthSafe calls for stringLength and drops 22 guards, among them the one which made ends_with(das_string, "") disagree with ends_with(string, ""), which two pins recorded. What stays is what the substitution does not reach - a string taken by reference (delete_string), internal helpers which are not binds, and guards on lengths and FILE handles. That leaves ast_typefactory_bind.h with nothing worth keeping: the typeFactory fallback for unbound callbacks moves next to typeFactory in ast_typedecl.h, where its non-dependent use of typeFactory resolves, and the header goes - with its include in every binding unit, and the line which emitted it in the C++ binder. cast_arg goes with it rather than moving: it is what let a bind take das::string by value, which nothing does, and which AOT could not emit anyway since there is no cast. Empty results still come back as null, since allocateString cannot allocate an empty string. But a null which crosses into a bind and back, as it does through _temp_string_result, returns as "". The byte view pins watched that pointer through unsafe(reinterpret), so is_null_str measures length instead, and the one assertion which asked whether a NUL holding run was allocated at all is gone - das cannot tell any more. tests/handle_types/string_arg_never_null covers the argument path: a null string, an empty literal and a non-empty string, through a bind which reports what it received. llvm_jit_run.das holds the emitter source pin and the codegen version; both move, since the JIT substitutes for every string argument now. The flag bit leaves a hole in MoreFunctionFlags, which the AST module cache serializes, so AstSerializer::getVersion moves - to 199, which is where the dagor copy already sits, so that line stops being a local patch there. --- CMakeLists.txt | 1 - daslib/aot_cpp.das | 4 +- .../daspkg-example-cpp/src/module_counter.cpp | 1 - include/daScript/ast/ast.h | 1 - include/daScript/ast/ast_serializer.h | 2 +- include/daScript/ast/ast_typedecl.h | 8 ++ include/daScript/ast/ast_typefactory_bind.h | 41 ------- include/daScript/simulate/interop.h | 16 +++ modules/dasAudio/src/dasAudio.cpp | 1 - modules/dasClangBind/cbind/cbind_boost.das | 2 - modules/dasClangBind/src/dasClangBind.cpp | 1 - .../dasClangBind/src/dasClangBind.func_1.cpp | 1 - .../dasClangBind/src/dasClangBind.func_10.cpp | 1 - .../dasClangBind/src/dasClangBind.func_11.cpp | 1 - .../dasClangBind/src/dasClangBind.func_12.cpp | 1 - .../dasClangBind/src/dasClangBind.func_13.cpp | 1 - .../dasClangBind/src/dasClangBind.func_14.cpp | 1 - .../dasClangBind/src/dasClangBind.func_15.cpp | 1 - .../dasClangBind/src/dasClangBind.func_16.cpp | 1 - .../dasClangBind/src/dasClangBind.func_17.cpp | 1 - .../dasClangBind/src/dasClangBind.func_18.cpp | 1 - .../dasClangBind/src/dasClangBind.func_2.cpp | 1 - .../dasClangBind/src/dasClangBind.func_3.cpp | 1 - .../dasClangBind/src/dasClangBind.func_4.cpp | 1 - .../dasClangBind/src/dasClangBind.func_5.cpp | 1 - .../dasClangBind/src/dasClangBind.func_6.cpp | 1 - .../dasClangBind/src/dasClangBind.func_7.cpp | 1 - .../dasClangBind/src/dasClangBind.func_8.cpp | 1 - .../dasClangBind/src/dasClangBind.func_9.cpp | 1 - .../dasClangBind/src/dasClangBind.main.cpp | 1 - modules/dasGlfw/src/dasGLFW.cpp | 1 - modules/dasGlfw/src/dasGLFW.func_1.cpp | 1 - modules/dasGlfw/src/dasGLFW.func_2.cpp | 1 - modules/dasGlfw/src/dasGLFW.func_3.cpp | 1 - modules/dasGlfw/src/dasGLFW.func_4.cpp | 1 - modules/dasGlfw/src/dasGLFW.func_5.cpp | 1 - modules/dasGlfw/src/dasGLFW.main.cpp | 1 - modules/dasImgui/src/cb_dasIMGUI.h | 8 -- modules/dasImgui/src/dasIMGUI.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_1.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_10.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_11.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_12.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_13.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_14.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_15.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_16.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_17.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_18.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_19.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_2.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_20.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_21.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_22.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_23.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_24.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_25.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_26.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_27.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_28.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_29.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_3.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_30.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_31.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_32.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_33.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_34.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_4.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_5.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_6.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_7.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_8.cpp | 1 - modules/dasImgui/src/dasIMGUI.func_9.cpp | 1 - modules/dasImgui/src/dasIMGUI.main.cpp | 8 -- modules/dasLLVM/daslib/llvm_jit.das | 2 +- modules/dasLLVM/daslib/llvm_jit_run.das | 4 +- modules/dasMinfft/src/dasMinfft.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_1.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_2.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_3.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_4.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_5.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.func_6.cpp | 1 - modules/dasOpenGL/src/dasOpenGL.main.cpp | 1 - modules/dasPUGIXML/src/dasPUGIXML.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.backup.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_1.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_10.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_11.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_12.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_2.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_3.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_4.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_5.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_6.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_7.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_8.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.func_9.cpp | 1 - modules/dasSQLITE/src/dasSQLITE.main.cpp | 11 -- modules/dasSQLITE/src/dasSQLITE.userfn.cpp | 1 - modules/dasStbImage/src/dasStbImage.cpp | 1 - modules/dasStbImage/src/dasStbTrueType.cpp | 1 - modules/dasUnitTest/test_handles.cpp | 6 + src/ast/ast_print.cpp | 1 - src/builtin/module_builtin_ast_flags.cpp | 2 +- src/builtin/module_builtin_fio.cpp | 2 +- src/builtin/module_builtin_string.cpp | 116 +++++++----------- tests/handle_types/string_arg_never_null.das | 19 +++ tests/strings/strings_core_pins.das | 6 +- tests/strings/view_binary_safe.das | 5 +- .../integration/cpp/04_binding_types.cpp | 1 - .../integration/cpp/05_binding_enums.cpp | 1 - tutorials/integration/cpp/06_interop.cpp | 1 - tutorials/integration/cpp/07_callbacks.cpp | 1 - tutorials/integration/cpp/08_methods.cpp | 1 - .../cpp/09_operators_and_properties.cpp | 1 - .../integration/cpp/10_custom_modules.cpp | 1 - .../integration/cpp/11_context_variables.cpp | 1 - .../integration/cpp/12_smart_pointers.cpp | 1 - 121 files changed, 108 insertions(+), 257 deletions(-) delete mode 100644 include/daScript/ast/ast_typefactory_bind.h create mode 100644 tests/handle_types/string_arg_never_null.das diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e41a0bb09..59f5234490 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1655,7 +1655,6 @@ SET(DAS_RELEASE_AST_INCLUDE include/daScript/ast/ast_serializer.h include/daScript/ast/ast_simulate.h include/daScript/ast/ast_typedecl.h - include/daScript/ast/ast_typefactory_bind.h include/daScript/ast/ast_typefactory.h include/daScript/ast/ast_visitor.h include/daScript/ast/ast_aot_cpp.h diff --git a/daslib/aot_cpp.das b/daslib/aot_cpp.das index 8e3e21fbd3..4ec1984e3d 100644 --- a/daslib/aot_cpp.das +++ b/daslib/aot_cpp.das @@ -3923,7 +3923,7 @@ class public CppAot : AstVisitor { return argType.isVoidPointer ^^ passType.isVoidPointer; } def needStringCast(func : Function?; arg : TypeDeclPtr) { - return func.moreFlags.needStringCast && arg.isString && !arg.flags.ref; + return arg.isString && !arg.flags.ref; } def CallFunc_preVisitCallArg(call : ExprCallFunc?; arg : ExpressionPtr; is_last : bool) { if (call.func.moreFlags.propertyFunction) return ; @@ -3962,7 +3962,7 @@ class public CppAot : AstVisitor { if (isPolicyBasedCallFunc(call) && policyArgNeedCast(call.func.result, argType)) { write(*ss, "cast<{describeCppType(argType,DescribeConfig(skip_ref=true,skip_const=true,cross_platform=cross_platform))}>::from("); } - if (needStringCast(call.func, argType)) { + if (needStringCast(call.func, funArgType)) { write(*ss, "(das_string_cast("); } } diff --git a/examples/daspkg/packages/daspkg-example-cpp/src/module_counter.cpp b/examples/daspkg/packages/daspkg-example-cpp/src/module_counter.cpp index 66e226116f..a483dc4e69 100644 --- a/examples/daspkg/packages/daspkg-example-cpp/src/module_counter.cpp +++ b/examples/daspkg/packages/daspkg-example-cpp/src/module_counter.cpp @@ -1,6 +1,5 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" using namespace das; diff --git a/include/daScript/ast/ast.h b/include/daScript/ast/ast.h index 92eab8f5f7..13d8641512 100644 --- a/include/daScript/ast/ast.h +++ b/include/daScript/ast/ast.h @@ -920,7 +920,6 @@ namespace das union { struct { bool macroFunction : 1; - bool needStringCast : 1; bool aotHashDeppendsOnArguments : 1; bool lateInit : 1; bool requestJit : 1; diff --git a/include/daScript/ast/ast_serializer.h b/include/daScript/ast/ast_serializer.h index f1cd6fc756..23dd0f0db2 100644 --- a/include/daScript/ast/ast_serializer.h +++ b/include/daScript/ast/ast_serializer.h @@ -252,7 +252,7 @@ namespace das { AstSerializer & serializeModule ( Module & module, bool already_exists ); static constexpr uint32_t getVersion () { - return 118; // 118: per-record macro file dependencies (module cache re-validates them) + return 199; // 199: MoreFunctionFlags lost needStringCast, so the flag bits shifted } void serializeProgram ( ProgramPtr program, ModuleGroup & libGroup ) noexcept; diff --git a/include/daScript/ast/ast_typedecl.h b/include/daScript/ast/ast_typedecl.h index a580ad8b63..93eadae28b 100644 --- a/include/daScript/ast/ast_typedecl.h +++ b/include/daScript/ast/ast_typedecl.h @@ -722,6 +722,14 @@ namespace das { } }; + // this binds any unspecified 'callback' thing to 'void *' + template + struct typeFactory { + static TypeDeclPtr make(const ModuleLibrary & library ) { + return typeFactory::make(library); + }; + }; + template struct typeFactory { static ___noinline TypeDeclPtr make(const ModuleLibrary & lib) { diff --git a/include/daScript/ast/ast_typefactory_bind.h b/include/daScript/ast/ast_typefactory_bind.h deleted file mode 100644 index e535921b85..0000000000 --- a/include/daScript/ast/ast_typefactory_bind.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once - -#include "ast_typefactory.h" - -namespace das { - // note: - // this binds any unspecified 'callback' thing to 'void *' - // generally this is included with generated headers - template - struct typeFactory { - static TypeDeclPtr make(const ModuleLibrary & library ) { - return typeFactory::make(library); - }; - }; - - // note: - // this is here to pass strings safely - template <> - struct cast_arg { - static __forceinline char * to ( Context & ctx, SimNode * node ) { - char * res = node->evalPtr(ctx); - return res ? res : ((char *)""); - } - }; - - template <> - struct cast_arg { - static __forceinline char * to ( Context & ctx, SimNode * node ) { - char * res = node->evalPtr(ctx); - return res ? res : ((char *)""); - } - }; - - template <> - struct cast_arg { - static __forceinline string to ( Context & ctx, SimNode * node ) { - auto res = (das::string *) node->evalPtr(ctx); - return *res; - } - }; -} diff --git a/include/daScript/simulate/interop.h b/include/daScript/simulate/interop.h index c10a4e143d..336f566b5b 100644 --- a/include/daScript/simulate/interop.h +++ b/include/daScript/simulate/interop.h @@ -12,6 +12,22 @@ namespace das } }; + template <> + struct cast_arg { + static __forceinline char * to ( Context & ctx, SimNode * node ) { + char * res = node->evalPtr(ctx); + return res ? res : ((char *)""); + } + }; + + template <> + struct cast_arg { + static __forceinline char * to ( Context & ctx, SimNode * node ) { + char * res = node->evalPtr(ctx); + return res ? res : ((char *)""); + } + }; + template <> struct cast_arg { static __forceinline Context * to ( Context & ctx, SimNode * ) { diff --git a/modules/dasAudio/src/dasAudio.cpp b/modules/dasAudio/src/dasAudio.cpp index 59e145d544..fc5dfa5e3c 100644 --- a/modules/dasAudio/src/dasAudio.cpp +++ b/modules/dasAudio/src/dasAudio.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "daScript/simulate/bind_enum.h" diff --git a/modules/dasClangBind/cbind/cbind_boost.das b/modules/dasClangBind/cbind/cbind_boost.das index c21ebcdc90..74e4b53713 100644 --- a/modules/dasClangBind/cbind/cbind_boost.das +++ b/modules/dasClangBind/cbind/cbind_boost.das @@ -1711,7 +1711,6 @@ class CppGenBind : AnyGenBind { fwrite(func_file, "#include \"daScript/ast/ast.h\"\n") fwrite(func_file, "#include \"daScript/ast/ast_interop.h\"\n") fwrite(func_file, "#include \"daScript/ast/ast_handle.h\"\n") - fwrite(func_file, "#include \"daScript/ast/ast_typefactory_bind.h\"\n") fwrite(func_file, "#include \"daScript/simulate/bind_enum.h\"\n") fwrite(func_file, "#include \"{bind_module}.h\"\n") fwrite(func_file, "#include \"need_{bind_module}.h\"\n") @@ -1747,7 +1746,6 @@ class CppGenBind : AnyGenBind { module_cpp_file |> fwrite("#include \"daScript/ast/ast.h\"\n") module_cpp_file |> fwrite("#include \"daScript/ast/ast_interop.h\"\n") module_cpp_file |> fwrite("#include \"daScript/ast/ast_handle.h\"\n") - module_cpp_file |> fwrite("#include \"daScript/ast/ast_typefactory_bind.h\"\n") module_cpp_file |> fwrite("#include \"daScript/simulate/bind_enum.h\"\n") module_cpp_file |> fwrite("#include \"{bind_module}.h\"\n") module_cpp_file |> fwrite("#include \"need_{bind_module}.h\"\n") diff --git a/modules/dasClangBind/src/dasClangBind.cpp b/modules/dasClangBind/src/dasClangBind.cpp index 60e7dc4518..252cba8ae8 100644 --- a/modules/dasClangBind/src/dasClangBind.cpp +++ b/modules/dasClangBind/src/dasClangBind.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_1.cpp b/modules/dasClangBind/src/dasClangBind.func_1.cpp index 5075dffeae..1d9eb4a5b8 100644 --- a/modules/dasClangBind/src/dasClangBind.func_1.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_1.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_10.cpp b/modules/dasClangBind/src/dasClangBind.func_10.cpp index 8dff5a78d1..1f62f7f0a4 100644 --- a/modules/dasClangBind/src/dasClangBind.func_10.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_10.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_11.cpp b/modules/dasClangBind/src/dasClangBind.func_11.cpp index 91bda65b32..8f263e9b42 100644 --- a/modules/dasClangBind/src/dasClangBind.func_11.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_11.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_12.cpp b/modules/dasClangBind/src/dasClangBind.func_12.cpp index 51215e30fe..90f0ad258f 100644 --- a/modules/dasClangBind/src/dasClangBind.func_12.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_12.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_13.cpp b/modules/dasClangBind/src/dasClangBind.func_13.cpp index dc571a584b..1330c863d3 100644 --- a/modules/dasClangBind/src/dasClangBind.func_13.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_13.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_14.cpp b/modules/dasClangBind/src/dasClangBind.func_14.cpp index 7b25756725..7e4ee0b255 100644 --- a/modules/dasClangBind/src/dasClangBind.func_14.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_14.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_15.cpp b/modules/dasClangBind/src/dasClangBind.func_15.cpp index 4b954e28bf..a320ace197 100644 --- a/modules/dasClangBind/src/dasClangBind.func_15.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_15.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_16.cpp b/modules/dasClangBind/src/dasClangBind.func_16.cpp index f906592bb3..6b1bb8c5c1 100644 --- a/modules/dasClangBind/src/dasClangBind.func_16.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_16.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_17.cpp b/modules/dasClangBind/src/dasClangBind.func_17.cpp index 3b5793b210..fa822ced00 100644 --- a/modules/dasClangBind/src/dasClangBind.func_17.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_17.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_18.cpp b/modules/dasClangBind/src/dasClangBind.func_18.cpp index 1e339cc1a6..51f7486897 100644 --- a/modules/dasClangBind/src/dasClangBind.func_18.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_18.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_2.cpp b/modules/dasClangBind/src/dasClangBind.func_2.cpp index 325066cb80..db243fa4a1 100644 --- a/modules/dasClangBind/src/dasClangBind.func_2.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_2.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_3.cpp b/modules/dasClangBind/src/dasClangBind.func_3.cpp index 4115d1be0a..cb4fd07404 100644 --- a/modules/dasClangBind/src/dasClangBind.func_3.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_3.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_4.cpp b/modules/dasClangBind/src/dasClangBind.func_4.cpp index ffb50ae32a..8fe322622c 100644 --- a/modules/dasClangBind/src/dasClangBind.func_4.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_4.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_5.cpp b/modules/dasClangBind/src/dasClangBind.func_5.cpp index 8168e887b7..2421b93a06 100644 --- a/modules/dasClangBind/src/dasClangBind.func_5.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_5.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_6.cpp b/modules/dasClangBind/src/dasClangBind.func_6.cpp index 34657f4eaa..74636735b0 100644 --- a/modules/dasClangBind/src/dasClangBind.func_6.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_6.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_7.cpp b/modules/dasClangBind/src/dasClangBind.func_7.cpp index 10e3bceda5..371006e008 100644 --- a/modules/dasClangBind/src/dasClangBind.func_7.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_7.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_8.cpp b/modules/dasClangBind/src/dasClangBind.func_8.cpp index f3c24cfa2c..c0b7a66c87 100644 --- a/modules/dasClangBind/src/dasClangBind.func_8.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_8.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.func_9.cpp b/modules/dasClangBind/src/dasClangBind.func_9.cpp index 14e4e21b52..abf80f60ed 100644 --- a/modules/dasClangBind/src/dasClangBind.func_9.cpp +++ b/modules/dasClangBind/src/dasClangBind.func_9.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasClangBind/src/dasClangBind.main.cpp b/modules/dasClangBind/src/dasClangBind.main.cpp index f9cfa16def..18840bb3dd 100644 --- a/modules/dasClangBind/src/dasClangBind.main.cpp +++ b/modules/dasClangBind/src/dasClangBind.main.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasClangBind.h" #include "need_dasClangBind.h" diff --git a/modules/dasGlfw/src/dasGLFW.cpp b/modules/dasGlfw/src/dasGLFW.cpp index 6b8c48b681..b97e7b88dc 100644 --- a/modules/dasGlfw/src/dasGLFW.cpp +++ b/modules/dasGlfw/src/dasGLFW.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.func_1.cpp b/modules/dasGlfw/src/dasGLFW.func_1.cpp index 708c2206a3..ae6e147c96 100644 --- a/modules/dasGlfw/src/dasGLFW.func_1.cpp +++ b/modules/dasGlfw/src/dasGLFW.func_1.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.func_2.cpp b/modules/dasGlfw/src/dasGLFW.func_2.cpp index f7afe92174..a9dbba546f 100644 --- a/modules/dasGlfw/src/dasGLFW.func_2.cpp +++ b/modules/dasGlfw/src/dasGLFW.func_2.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.func_3.cpp b/modules/dasGlfw/src/dasGLFW.func_3.cpp index 50336ac83a..621e31c531 100644 --- a/modules/dasGlfw/src/dasGLFW.func_3.cpp +++ b/modules/dasGlfw/src/dasGLFW.func_3.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.func_4.cpp b/modules/dasGlfw/src/dasGLFW.func_4.cpp index a5e280ac91..103d507aa0 100644 --- a/modules/dasGlfw/src/dasGLFW.func_4.cpp +++ b/modules/dasGlfw/src/dasGLFW.func_4.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.func_5.cpp b/modules/dasGlfw/src/dasGLFW.func_5.cpp index d13daa31f4..82e28b6afd 100644 --- a/modules/dasGlfw/src/dasGLFW.func_5.cpp +++ b/modules/dasGlfw/src/dasGLFW.func_5.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasGLFW.h" #include "need_dasGLFW.h" diff --git a/modules/dasGlfw/src/dasGLFW.main.cpp b/modules/dasGlfw/src/dasGLFW.main.cpp index 19f5079528..ca09fa86c3 100644 --- a/modules/dasGlfw/src/dasGLFW.main.cpp +++ b/modules/dasGlfw/src/dasGLFW.main.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "dasGLFW.h" #include "need_dasGLFW.h" #include "aot_dasGLFW.h" diff --git a/modules/dasImgui/src/cb_dasIMGUI.h b/modules/dasImgui/src/cb_dasIMGUI.h index a500dc4843..716efc65c2 100644 --- a/modules/dasImgui/src/cb_dasIMGUI.h +++ b/modules/dasImgui/src/cb_dasIMGUI.h @@ -159,20 +159,12 @@ struct imguiTempFn { } } - bool anyString = false; for ( auto &arg : fn->arguments ) { if ( arg->type->constant && arg->type->ref && !arg->type->isArray() ) { if ( arg->type->baseType == Type::tFloat2 || arg->type->baseType == Type::tFloat4 ) { arg->type->ref = false; } } - if ( arg->type->isString() && !arg->type->ref ) { - anyString = true; - } - } - - if (anyString) { - fn->needStringCast = true; } return true; diff --git a/modules/dasImgui/src/dasIMGUI.cpp b/modules/dasImgui/src/dasIMGUI.cpp index 136bbe520a..479f69efcb 100644 --- a/modules/dasImgui/src/dasIMGUI.cpp +++ b/modules/dasImgui/src/dasIMGUI.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_1.cpp b/modules/dasImgui/src/dasIMGUI.func_1.cpp index e134e7b414..f564624d5a 100644 --- a/modules/dasImgui/src/dasIMGUI.func_1.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_1.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_10.cpp b/modules/dasImgui/src/dasIMGUI.func_10.cpp index cda2968de7..cd6fc99447 100644 --- a/modules/dasImgui/src/dasIMGUI.func_10.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_10.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_11.cpp b/modules/dasImgui/src/dasIMGUI.func_11.cpp index 5888dd7be1..ad50fcb87e 100644 --- a/modules/dasImgui/src/dasIMGUI.func_11.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_11.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_12.cpp b/modules/dasImgui/src/dasIMGUI.func_12.cpp index f511ecfcd8..0076070160 100644 --- a/modules/dasImgui/src/dasIMGUI.func_12.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_12.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_13.cpp b/modules/dasImgui/src/dasIMGUI.func_13.cpp index a13efccacd..f8b10c1b0e 100644 --- a/modules/dasImgui/src/dasIMGUI.func_13.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_13.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_14.cpp b/modules/dasImgui/src/dasIMGUI.func_14.cpp index cd6b81b9a9..0578787063 100644 --- a/modules/dasImgui/src/dasIMGUI.func_14.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_14.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_15.cpp b/modules/dasImgui/src/dasIMGUI.func_15.cpp index 88bb308d86..d51dc24db4 100644 --- a/modules/dasImgui/src/dasIMGUI.func_15.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_15.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_16.cpp b/modules/dasImgui/src/dasIMGUI.func_16.cpp index 0e46a8688c..c88cce325a 100644 --- a/modules/dasImgui/src/dasIMGUI.func_16.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_16.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_17.cpp b/modules/dasImgui/src/dasIMGUI.func_17.cpp index 3ff2f3b359..eb872c7312 100644 --- a/modules/dasImgui/src/dasIMGUI.func_17.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_17.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_18.cpp b/modules/dasImgui/src/dasIMGUI.func_18.cpp index a9f7c425b1..a4e15cec0a 100644 --- a/modules/dasImgui/src/dasIMGUI.func_18.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_18.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_19.cpp b/modules/dasImgui/src/dasIMGUI.func_19.cpp index ff345701e2..75767661ab 100644 --- a/modules/dasImgui/src/dasIMGUI.func_19.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_19.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_2.cpp b/modules/dasImgui/src/dasIMGUI.func_2.cpp index 56a934d1c5..2c5df50dcc 100644 --- a/modules/dasImgui/src/dasIMGUI.func_2.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_2.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_20.cpp b/modules/dasImgui/src/dasIMGUI.func_20.cpp index d70d825550..864064e96e 100644 --- a/modules/dasImgui/src/dasIMGUI.func_20.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_20.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_21.cpp b/modules/dasImgui/src/dasIMGUI.func_21.cpp index ab61e8b7b6..7ddfd6050b 100644 --- a/modules/dasImgui/src/dasIMGUI.func_21.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_21.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_22.cpp b/modules/dasImgui/src/dasIMGUI.func_22.cpp index 0e3f04dce5..58842d3ceb 100644 --- a/modules/dasImgui/src/dasIMGUI.func_22.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_22.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_23.cpp b/modules/dasImgui/src/dasIMGUI.func_23.cpp index d2bed45d51..e9b950f08c 100644 --- a/modules/dasImgui/src/dasIMGUI.func_23.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_23.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_24.cpp b/modules/dasImgui/src/dasIMGUI.func_24.cpp index 677c3e5685..c148f7db21 100644 --- a/modules/dasImgui/src/dasIMGUI.func_24.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_24.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_25.cpp b/modules/dasImgui/src/dasIMGUI.func_25.cpp index 54effd20aa..1fd94fa60f 100644 --- a/modules/dasImgui/src/dasIMGUI.func_25.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_25.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_26.cpp b/modules/dasImgui/src/dasIMGUI.func_26.cpp index 2b363d5874..a7a224cd28 100644 --- a/modules/dasImgui/src/dasIMGUI.func_26.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_26.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_27.cpp b/modules/dasImgui/src/dasIMGUI.func_27.cpp index ba18bd6010..677b733513 100644 --- a/modules/dasImgui/src/dasIMGUI.func_27.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_27.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_28.cpp b/modules/dasImgui/src/dasIMGUI.func_28.cpp index b8e079cf14..f7cc6024ff 100644 --- a/modules/dasImgui/src/dasIMGUI.func_28.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_28.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_29.cpp b/modules/dasImgui/src/dasIMGUI.func_29.cpp index a2bf4e6f4a..5ab99f803c 100644 --- a/modules/dasImgui/src/dasIMGUI.func_29.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_29.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_3.cpp b/modules/dasImgui/src/dasIMGUI.func_3.cpp index bdc8e0c0e7..b85f8c7b7a 100644 --- a/modules/dasImgui/src/dasIMGUI.func_3.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_3.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_30.cpp b/modules/dasImgui/src/dasIMGUI.func_30.cpp index fcc65cfcd7..cde3994f9d 100644 --- a/modules/dasImgui/src/dasIMGUI.func_30.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_30.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_31.cpp b/modules/dasImgui/src/dasIMGUI.func_31.cpp index 05884a6749..d070ab3a21 100644 --- a/modules/dasImgui/src/dasIMGUI.func_31.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_31.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_32.cpp b/modules/dasImgui/src/dasIMGUI.func_32.cpp index d45e5b84a6..b284abc380 100644 --- a/modules/dasImgui/src/dasIMGUI.func_32.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_32.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_33.cpp b/modules/dasImgui/src/dasIMGUI.func_33.cpp index 7f30e94f33..07c15ced21 100644 --- a/modules/dasImgui/src/dasIMGUI.func_33.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_33.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_34.cpp b/modules/dasImgui/src/dasIMGUI.func_34.cpp index 30318dbddf..d49155f4da 100644 --- a/modules/dasImgui/src/dasIMGUI.func_34.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_34.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_4.cpp b/modules/dasImgui/src/dasIMGUI.func_4.cpp index b0bf260c7f..4082888025 100644 --- a/modules/dasImgui/src/dasIMGUI.func_4.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_4.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_5.cpp b/modules/dasImgui/src/dasIMGUI.func_5.cpp index cded989dd4..b24e63a93c 100644 --- a/modules/dasImgui/src/dasIMGUI.func_5.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_5.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_6.cpp b/modules/dasImgui/src/dasIMGUI.func_6.cpp index ae71c8939a..fd1cce9d9f 100644 --- a/modules/dasImgui/src/dasIMGUI.func_6.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_6.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_7.cpp b/modules/dasImgui/src/dasIMGUI.func_7.cpp index 5a1bc83111..507ec6ccce 100644 --- a/modules/dasImgui/src/dasIMGUI.func_7.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_7.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_8.cpp b/modules/dasImgui/src/dasIMGUI.func_8.cpp index 31a7954663..e7e088018a 100644 --- a/modules/dasImgui/src/dasIMGUI.func_8.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_8.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.func_9.cpp b/modules/dasImgui/src/dasIMGUI.func_9.cpp index c4249e02fe..2a70a0f2f2 100644 --- a/modules/dasImgui/src/dasIMGUI.func_9.cpp +++ b/modules/dasImgui/src/dasIMGUI.func_9.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasIMGUI.h" #include "need_dasIMGUI.h" diff --git a/modules/dasImgui/src/dasIMGUI.main.cpp b/modules/dasImgui/src/dasIMGUI.main.cpp index cbce03a74d..89b851778c 100644 --- a/modules/dasImgui/src/dasIMGUI.main.cpp +++ b/modules/dasImgui/src/dasIMGUI.main.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "aot_builtin_clipboard.h" #include "dasIMGUI.h" @@ -916,19 +915,12 @@ namespace das { ->arg_init(3, new ExprCall(LineInfo(), "ImVec2")); // time to fix-up const & ImVec2 and const & ImVec4 for ( auto & pfn : this->functions.each() ) { - bool anyString = false; for ( auto & arg : pfn->arguments ) { if ( arg->type->constant && arg->type->ref && !arg->type->isArray() ) { if ( arg->type->baseType==Type::tFloat2 || arg->type->baseType==Type::tFloat4 ) { arg->type->ref = false; } } - if ( arg->type->isString() && !arg->type->ref ) { - anyString = true; - } - } - if ( anyString ) { - pfn->needStringCast = true; } } } diff --git a/modules/dasLLVM/daslib/llvm_jit.das b/modules/dasLLVM/daslib/llvm_jit.das index 9afa96a429..35c52ba9c5 100644 --- a/modules/dasLLVM/daslib/llvm_jit.das +++ b/modules/dasLLVM/daslib/llvm_jit.das @@ -1558,7 +1558,7 @@ class public LlvmJitVisitor : AstVisitor { var ptrType = type_to_llvm_abi_type(funcArg._type) var arg = LLVMBuildPointerCast(g_builder, src, ptrType, "any_array_{funcArg.name}_ptr") params |> push(arg) - } elif (extern_func != null && extern_func.moreFlags.needStringCast && a._type.isString && !a._type.flags.ref) { + } elif (extern_func != null && a._type.isString && !a._type.flags.ref) { // Wrap string argument for extern functions. Empty string in das is null. var res = LLVMBuildSelect(g_builder, LLVMBuildIsNull(g_builder, src, ""), diff --git a/modules/dasLLVM/daslib/llvm_jit_run.das b/modules/dasLLVM/daslib/llvm_jit_run.das index 0048c0d457..84217eebd1 100644 --- a/modules/dasLLVM/daslib/llvm_jit_run.das +++ b/modules/dasLLVM/daslib/llvm_jit_run.das @@ -36,11 +36,11 @@ var LINK_WHOLE_LIB = false // when true, standalone exe links against the whole // invalidates cached DLLs (e.g. edits to llvm_jit.das, llvm_macro.das, llvm_jit_common.das, // runtime helper ABI, default target triple). Cache filenames fold this in, so a bump // makes every previously written DLL miss the cache on the next run and get GC'd. -let LLVM_JIT_CODEGEN_VERSION : uint64 = 0x68ul // the grid formats' gemv applies signs as one masked negate per weight vector (0x59: aarch64 hosts append +i8mm when cpu_supports says so) +let LLVM_JIT_CODEGEN_VERSION : uint64 = 0x69ul // every string argument of an extern is substituted, not just the ones which asked (0x68: the grid formats' gemv applies signs as one masked negate per weight vector) // Read by tests-cpp/small/test_jit_emitter_pin.cpp: FNV-1a64 of the emitter sources // (normalized to LF; file list in the test) -let LLVM_JIT_EMITTER_HASH : uint64 = 0x6a0cebf74a395071ul +let LLVM_JIT_EMITTER_HASH : uint64 = 0x66bdab0410220016ul let JIT_FNV_PRIME : uint64 = 1099511628211ul diff --git a/modules/dasMinfft/src/dasMinfft.cpp b/modules/dasMinfft/src/dasMinfft.cpp index a4a954b40d..547cfe0750 100644 --- a/modules/dasMinfft/src/dasMinfft.cpp +++ b/modules/dasMinfft/src/dasMinfft.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "dasMinfft.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.cpp b/modules/dasOpenGL/src/dasOpenGL.cpp index 9e548b1376..465589a4be 100644 --- a/modules/dasOpenGL/src/dasOpenGL.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_1.cpp b/modules/dasOpenGL/src/dasOpenGL.func_1.cpp index 099c38dd1a..3d451a2afc 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_1.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_1.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_2.cpp b/modules/dasOpenGL/src/dasOpenGL.func_2.cpp index bf61341d94..44b27ca79a 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_2.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_2.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_3.cpp b/modules/dasOpenGL/src/dasOpenGL.func_3.cpp index e3a39f5fdb..0d2ae02849 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_3.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_3.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_4.cpp b/modules/dasOpenGL/src/dasOpenGL.func_4.cpp index e0aefc5aba..65e9c2bb25 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_4.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_4.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_5.cpp b/modules/dasOpenGL/src/dasOpenGL.func_5.cpp index a4c7f50fd1..d6048439ee 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_5.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_5.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.func_6.cpp b/modules/dasOpenGL/src/dasOpenGL.func_6.cpp index b4990fe562..43f8d43117 100644 --- a/modules/dasOpenGL/src/dasOpenGL.func_6.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.func_6.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasOpenGL/src/dasOpenGL.main.cpp b/modules/dasOpenGL/src/dasOpenGL.main.cpp index c81691fc98..b8da62f94b 100644 --- a/modules/dasOpenGL/src/dasOpenGL.main.cpp +++ b/modules/dasOpenGL/src/dasOpenGL.main.cpp @@ -16,7 +16,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "dasOpenGL.h" #include "need_dasOpenGL.h" diff --git a/modules/dasPUGIXML/src/dasPUGIXML.cpp b/modules/dasPUGIXML/src/dasPUGIXML.cpp index 04f4452997..8ea2b9f4eb 100644 --- a/modules/dasPUGIXML/src/dasPUGIXML.cpp +++ b/modules/dasPUGIXML/src/dasPUGIXML.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "daScript/simulate/bind_enum.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.backup.cpp b/modules/dasSQLITE/src/dasSQLITE.backup.cpp index 1011992dbe..9ffa3df4ad 100644 --- a/modules/dasSQLITE/src/dasSQLITE.backup.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.backup.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.cpp b/modules/dasSQLITE/src/dasSQLITE.cpp index f72ad03df9..fe884de42f 100644 --- a/modules/dasSQLITE/src/dasSQLITE.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_1.cpp b/modules/dasSQLITE/src/dasSQLITE.func_1.cpp index 55514b7ee8..5710519c0c 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_1.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_1.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_10.cpp b/modules/dasSQLITE/src/dasSQLITE.func_10.cpp index 30ce62cedf..5f3f25409a 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_10.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_10.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_11.cpp b/modules/dasSQLITE/src/dasSQLITE.func_11.cpp index 8410b921ad..4709437439 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_11.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_11.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_12.cpp b/modules/dasSQLITE/src/dasSQLITE.func_12.cpp index ac5eb86876..4b6c6797d5 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_12.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_12.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_2.cpp b/modules/dasSQLITE/src/dasSQLITE.func_2.cpp index a60e049bcb..f8ea4ac138 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_2.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_2.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_3.cpp b/modules/dasSQLITE/src/dasSQLITE.func_3.cpp index 3c899a3ecb..1a7b7d4510 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_3.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_3.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_4.cpp b/modules/dasSQLITE/src/dasSQLITE.func_4.cpp index 81d109c2e3..22d9131ef9 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_4.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_4.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_5.cpp b/modules/dasSQLITE/src/dasSQLITE.func_5.cpp index 4efd42e74c..b792a68267 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_5.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_5.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_6.cpp b/modules/dasSQLITE/src/dasSQLITE.func_6.cpp index 318cf7c336..efea210cb7 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_6.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_6.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_7.cpp b/modules/dasSQLITE/src/dasSQLITE.func_7.cpp index f37e79035a..e42706ae64 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_7.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_7.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_8.cpp b/modules/dasSQLITE/src/dasSQLITE.func_8.cpp index edc00e4a62..0986fde001 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_8.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_8.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.func_9.cpp b/modules/dasSQLITE/src/dasSQLITE.func_9.cpp index c611de94ad..074031d4e8 100644 --- a/modules/dasSQLITE/src/dasSQLITE.func_9.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.func_9.cpp @@ -5,7 +5,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" #include "daScript/ast/ast_handle.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "dasSQLITE.h" #include "need_dasSQLITE.h" diff --git a/modules/dasSQLITE/src/dasSQLITE.main.cpp b/modules/dasSQLITE/src/dasSQLITE.main.cpp index a2bc689f8a..9ba83b6371 100644 --- a/modules/dasSQLITE/src/dasSQLITE.main.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.main.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "dasSQLITE.h" @@ -118,16 +117,6 @@ void Module_dasSQLITE::initMain() { pfn->result->temporary = true; pfn->unsafeOperation = true; } - // fixup module functions, so that there is a string cast - bool anyString = false; - for ( auto & arg : pfn->arguments ) { - if ( arg->type->isString() && !arg->type->ref ) { - anyString = true; - } - } - if ( anyString ) { - pfn->needStringCast = true; - } } } diff --git a/modules/dasSQLITE/src/dasSQLITE.userfn.cpp b/modules/dasSQLITE/src/dasSQLITE.userfn.cpp index 1435fd1c3f..b9af7f37ed 100644 --- a/modules/dasSQLITE/src/dasSQLITE.userfn.cpp +++ b/modules/dasSQLITE/src/dasSQLITE.userfn.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "daScript/simulate/aot.h" diff --git a/modules/dasStbImage/src/dasStbImage.cpp b/modules/dasStbImage/src/dasStbImage.cpp index 27e6d9aeb1..30cce3c548 100644 --- a/modules/dasStbImage/src/dasStbImage.cpp +++ b/modules/dasStbImage/src/dasStbImage.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include "stb_image.h" diff --git a/modules/dasStbImage/src/dasStbTrueType.cpp b/modules/dasStbImage/src/dasStbTrueType.cpp index 46225b7372..bb00338eb7 100644 --- a/modules/dasStbImage/src/dasStbTrueType.cpp +++ b/modules/dasStbImage/src/dasStbTrueType.cpp @@ -2,7 +2,6 @@ #include "daScript/ast/ast.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include "stb_truetype.h" diff --git a/modules/dasUnitTest/test_handles.cpp b/modules/dasUnitTest/test_handles.cpp index 2351a980f6..fabd60ca4f 100644 --- a/modules/dasUnitTest/test_handles.cpp +++ b/modules/dasUnitTest/test_handles.cpp @@ -569,6 +569,10 @@ int32_t test_escape_retained_first_int () { return g_escape_test_retained ? *(int32_t *)g_escape_test_retained : -1; } +int64_t testStringArgLength ( const char * str ) { + return str ? int64_t(strlen(str)) : -1; +} + Module_UnitTest::Module_UnitTest() : Module("UnitTest") { ModuleLibrary lib(this); lib.addBuiltInModule(); @@ -603,6 +607,8 @@ Module_UnitTest::Module_UnitTest() : Module("UnitTest") { addAlias(typeFactory::make(lib)); addVectorAnnotation(this,lib,new Point3ArrayAnnotation(lib)); addCtorAndUsing(*this, lib, "Point3Array", "Point3Array"); + addExtern(*this, lib, "test_string_arg_length", + SideEffects::none, "testStringArgLength")->arg("str"); addExtern(*this, lib, "testPoint3Array", SideEffects::modifyExternal, "testPoint3Array"); addExtern(*this, lib, "testNotLocalObject", diff --git a/src/ast/ast_print.cpp b/src/ast/ast_print.cpp index b8892d5576..dafe7966ec 100644 --- a/src/ast/ast_print.cpp +++ b/src/ast/ast_print.cpp @@ -331,7 +331,6 @@ namespace das { if ( fn->moreFlags ) { ss << "// "; if ( fn->macroFunction ) { ss << "[macro_function]"; } - if ( fn->needStringCast ) { ss << "[need_string_cast]"; } if ( fn->aotHashDeppendsOnArguments ) { ss << "[aot_hash_deppends_on_arguments]"; } if ( fn->requestJit ) { ss << "[jit]"; } if ( fn->requestNoJit ) { ss << "[no_jit]"; } diff --git a/src/builtin/module_builtin_ast_flags.cpp b/src/builtin/module_builtin_ast_flags.cpp index de48b2e593..95cb0c712b 100644 --- a/src/builtin/module_builtin_ast_flags.cpp +++ b/src/builtin/module_builtin_ast_flags.cpp @@ -199,7 +199,7 @@ namespace das { auto ft = new TypeDecl(Type::tBitfield, cppBindingLineInfo()); ft->alias = "MoreFunctionFlags"; ft->argNames = { - "macroFunction", "needStringCast", "aotHashDeppendsOnArguments", "lateInit", "requestJit", + "macroFunction", "aotHashDeppendsOnArguments", "lateInit", "requestJit", "unsafeOutsideOfFor", "mustInline", "safeImplicit", "deprecated", "aliasCMRES", "neverAliasCMRES", "addressTaken", "propertyFunction", "pinvoke", "jitOnly", "isStaticClassMethod", "requestNoJit", "jitContextAndLineInfo", "nodiscard", "captureString", "callCaptureString", "hasStringBuilder", diff --git a/src/builtin/module_builtin_fio.cpp b/src/builtin/module_builtin_fio.cpp index 4b5dc782ce..80dfc48d13 100644 --- a/src/builtin/module_builtin_fio.cpp +++ b/src/builtin/module_builtin_fio.cpp @@ -333,7 +333,7 @@ namespace das { } static bool is_valid_fopen_mode(const char *mode) { - return mode && strchr("rwa", mode[0]) && mode[1 + strspn(mode + 1, "+btx")] == '\0'; + return mode && *mode && strchr("rwa", mode[0]) && mode[1 + strspn(mode + 1, "+btx")] == '\0'; } #if defined(_WIN32) diff --git a/src/builtin/module_builtin_string.cpp b/src/builtin/module_builtin_string.cpp index fcf30ab76b..c4c8b87838 100644 --- a/src/builtin/module_builtin_string.cpp +++ b/src/builtin/module_builtin_string.cpp @@ -32,7 +32,7 @@ namespace das }; int32_t get_character_at ( const char * str, int32_t index, Context * context, LineInfoArg * at ) { - if ( !str || index<0 ) { + if ( index<0 ) { context->throw_error_at(at, "string character index out of range, %u", uint32_t(index)); } for ( int32_t i = 0; i <= index; ++i ) { @@ -83,7 +83,7 @@ namespace das return uint32_t(bytes.size); } - // Every string entry below is stringLengthSafe + a length-bounded core, so the same core + // Every string entry below is stringLength + a length-bounded core, so the same core // serves a byte view that carries its own length and never scans for a terminator. // A bounded core treats an interior NUL as data. @@ -101,50 +101,50 @@ namespace das } bool builtin_string_endswith ( const char * str, const char * cmp, Context * context ) { - return ends_with_core(str, stringLengthSafe(*context, str), cmp, stringLengthSafe(*context, cmp)); + return ends_with_core(str, stringLength(*context, str), cmp, stringLength(*context, cmp)); } bool builtin_string_startswith ( const char * str, const char * cmp, Context * context ) { - return starts_with_core(str, stringLengthSafe(*context, str), cmp, stringLengthSafe(*context, cmp)); + return starts_with_core(str, stringLength(*context, str), cmp, stringLength(*context, cmp)); } // das_string overload: prefix-test the das_string in place (no allocation), // sibling to builtin_string_ends_with. Lets AST/lint passes that hold names as // das_string do `name |> starts_with("...")` without materializing a string. bool builtin_string_starts_with ( const string & str, const char * cmp, Context * context ) { - return starts_with_core(str.data(), uint32_t(str.length()), cmp, stringLengthSafe(*context, cmp)); + return starts_with_core(str.data(), uint32_t(str.length()), cmp, stringLength(*context, cmp)); } bool builtin_string_startswith2 ( const char * str, const char * cmp, uint32_t cmpLen, Context * context ) { - return starts_with_core(str, stringLengthSafe(*context, str), cmp, min(cmpLen, stringLengthSafe(*context, cmp))); + return starts_with_core(str, stringLength(*context, str), cmp, min(cmpLen, stringLength(*context, cmp))); } bool builtin_string_startswith3 ( const char * str, int32_t offset, const char * cmp, Context * context ) { - return starts_with_at_core(str, stringLengthSafe(*context, str), offset, cmp, stringLengthSafe(*context, cmp)); + return starts_with_at_core(str, stringLength(*context, str), offset, cmp, stringLength(*context, cmp)); } bool builtin_string_startswith4 ( const char * str, int32_t offset, const char * cmp, uint32_t cmpLen, Context * context ) { - return starts_with_at_core(str, stringLengthSafe(*context, str), offset, cmp, min(cmpLen, stringLengthSafe(*context, cmp))); + return starts_with_at_core(str, stringLength(*context, str), offset, cmp, min(cmpLen, stringLength(*context, cmp))); } bool builtin_view_endswith ( const TArray & bytes, const char * cmp, Context * context, LineInfoArg * at ) { - return ends_with_core(view_data(bytes), view_size(bytes, context, at), cmp, stringLengthSafe(*context, cmp)); + return ends_with_core(view_data(bytes), view_size(bytes, context, at), cmp, stringLength(*context, cmp)); } bool builtin_view_startswith ( const TArray & bytes, const char * cmp, Context * context, LineInfoArg * at ) { - return starts_with_core(view_data(bytes), view_size(bytes, context, at), cmp, stringLengthSafe(*context, cmp)); + return starts_with_core(view_data(bytes), view_size(bytes, context, at), cmp, stringLength(*context, cmp)); } bool builtin_view_startswith2 ( const TArray & bytes, const char * cmp, uint32_t cmpLen, Context * context, LineInfoArg * at ) { - return starts_with_core(view_data(bytes), view_size(bytes, context, at), cmp, min(cmpLen, stringLengthSafe(*context, cmp))); + return starts_with_core(view_data(bytes), view_size(bytes, context, at), cmp, min(cmpLen, stringLength(*context, cmp))); } bool builtin_view_startswith3 ( const TArray & bytes, int32_t offset, const char * cmp, Context * context, LineInfoArg * at ) { - return starts_with_at_core(view_data(bytes), view_size(bytes, context, at), offset, cmp, stringLengthSafe(*context, cmp)); + return starts_with_at_core(view_data(bytes), view_size(bytes, context, at), offset, cmp, stringLength(*context, cmp)); } bool builtin_view_startswith4 ( const TArray & bytes, int32_t offset, const char * cmp, uint32_t cmpLen, Context * context, LineInfoArg * at ) { - return starts_with_at_core(view_data(bytes), view_size(bytes, context, at), offset, cmp, min(cmpLen, stringLengthSafe(*context, cmp))); + return starts_with_at_core(view_data(bytes), view_size(bytes, context, at), offset, cmp, min(cmpLen, stringLength(*context, cmp))); } static inline const char* strip_l(const char *str, uint32_t len) { @@ -195,15 +195,15 @@ namespace das } char* builtin_string_strip ( const char *str, Context * context, LineInfoArg * at ) { - return strip_core(str, stringLengthSafe(*context, str), context, at); + return strip_core(str, stringLength(*context, str), context, at); } char* builtin_string_strip_left ( const char *str, Context * context, LineInfoArg * at ) { - return strip_left_core(str, stringLengthSafe(*context, str), context, at); + return strip_left_core(str, stringLength(*context, str), context, at); } char* builtin_string_strip_right ( const char *str, Context * context, LineInfoArg * at ) { - return strip_right_core(str, stringLengthSafe(*context, str), context, at); + return strip_right_core(str, stringLength(*context, str), context, at); } char* builtin_view_strip ( const TArray & bytes, Context * context, LineInfoArg * at ) { @@ -219,7 +219,7 @@ namespace das } int builtin_string_skip_white_space ( const char * str, int from, Context * context ) { - return skip_white_space_core(str, stringLengthSafe(*context, str), from); + return skip_white_space_core(str, stringLength(*context, str), from); } int builtin_view_skip_white_space ( const TArray & bytes, int from, Context * context, LineInfoArg * at ) { @@ -266,8 +266,8 @@ namespace das } int builtin_string_find1 ( const char *str, const char *substr, int start, Context * context ) { - const uint32_t strLen = stringLengthSafe ( *context, str ); - return find_sub_core(str, strLen, substr, stringLengthSafe ( *context, substr ), + const uint32_t strLen = stringLength ( *context, str ); + return find_sub_core(str, strLen, substr, stringLength ( *context, substr ), uint32_t(clamp_int(start, 0, int(strLen)))); } @@ -278,8 +278,8 @@ namespace das } int builtin_string_rfind1 ( const char *str, const char *substr, int start, Context * context ) { - const uint32_t strLen = stringLengthSafe ( *context, str ); - return rfind_sub_core(str, strLen, substr, stringLengthSafe ( *context, substr ), start); + const uint32_t strLen = stringLength ( *context, str ); + return rfind_sub_core(str, strLen, substr, stringLength ( *context, substr ), start); } int builtin_string_rfind2 (const char *str, const char *substr) { @@ -290,23 +290,23 @@ namespace das } int builtin_view_find ( const TArray & bytes, const char * substr, Context * context, LineInfoArg * at ) { - return find_sub_core(view_data(bytes), view_size(bytes, context, at), substr, stringLengthSafe(*context, substr), 0); + return find_sub_core(view_data(bytes), view_size(bytes, context, at), substr, stringLength(*context, substr), 0); } int builtin_view_find_from ( const TArray & bytes, const char * substr, int start, Context * context, LineInfoArg * at ) { const uint32_t len = view_size(bytes, context, at); - return find_sub_core(view_data(bytes), len, substr, stringLengthSafe(*context, substr), + return find_sub_core(view_data(bytes), len, substr, stringLength(*context, substr), uint32_t(clamp_int(start, 0, int(len)))); } int builtin_view_rfind ( const TArray & bytes, const char * substr, Context * context, LineInfoArg * at ) { const uint32_t len = view_size(bytes, context, at); - return rfind_sub_core(view_data(bytes), len, substr, stringLengthSafe(*context, substr), int(len)); + return rfind_sub_core(view_data(bytes), len, substr, stringLength(*context, substr), int(len)); } int builtin_view_rfind_from ( const TArray & bytes, const char * substr, int start, Context * context, LineInfoArg * at ) { const uint32_t len = view_size(bytes, context, at); - return rfind_sub_core(view_data(bytes), len, substr, stringLengthSafe(*context, substr), start); + return rfind_sub_core(view_data(bytes), len, substr, stringLength(*context, substr), start); } static char * chop_core ( const char * str, uint32_t strLength, int start, int length, Context * context, LineInfoArg * at ) { @@ -319,7 +319,7 @@ namespace das } char* builtin_string_chop(const char* str, int start, int length, Context* context, LineInfoArg * at) { - return chop_core(str, stringLengthSafe(*context, str), start, length, context, at); + return chop_core(str, stringLength(*context, str), start, length, context, at); } char* builtin_view_chop ( const TArray & bytes, int start, int length, Context* context, LineInfoArg * at ) { @@ -347,11 +347,11 @@ namespace das } char* builtin_string_slice1 ( const char *str, int start, int end, Context * context, LineInfoArg * at ) { - return slice_core(str, stringLengthSafe ( *context, str ), start, end, context, at); + return slice_core(str, stringLength ( *context, str ), start, end, context, at); } char* builtin_string_slice2 ( const char *str, int start, Context * context, LineInfoArg * at ) { - return slice_core(str, stringLengthSafe ( *context, str ), start, context, at); + return slice_core(str, stringLength ( *context, str ), start, context, at); } char* builtin_view_slice1 ( const TArray & bytes, int start, int end, Context * context, LineInfoArg * at ) { @@ -363,7 +363,7 @@ namespace das } char* builtin_string_reverse ( const char *str, Context * context, LineInfoArg * at ) { - const uint32_t strLen = stringLengthSafe ( *context, str ); + const uint32_t strLen = stringLength ( *context, str ); if (!strLen) return nullptr; char * ret = context->allocateString(str, strLen, at); @@ -378,7 +378,7 @@ namespace das } char* builtin_string_tolower ( const char *str, Context * context, LineInfoArg * at ) { - const uint32_t strLen = stringLengthSafe ( *context, str ); + const uint32_t strLen = stringLength ( *context, str ); if (!strLen) return nullptr; char * ret = context->allocateString(nullptr, strLen, at); @@ -389,7 +389,6 @@ namespace das } char* builtin_string_tolower_in_place(char* str) { - if (!str) return nullptr; char* pch = str; for (;;) { char ch = *pch; @@ -405,7 +404,7 @@ namespace das } char* builtin_string_toupper ( const char *str, Context * context, LineInfoArg * at ) { - const uint32_t strLen = stringLengthSafe ( *context, str ); + const uint32_t strLen = stringLength ( *context, str ); if (!strLen) return nullptr; char * ret = context->allocateString(nullptr, strLen, at); @@ -416,7 +415,6 @@ namespace das } char* builtin_string_toupper_in_place ( char* str ) { - if (!str) return nullptr; char* pch = str; for (;;) { char ch = *pch; @@ -429,9 +427,6 @@ namespace das int builtin_string_stricmp( const char *a, const char *b ) { - if ( !a && !b ) return 0; - if ( !a ) return -1; - if ( !b ) return 1; int d; for (;; ++a, ++b){ d = to_lower(*a) - to_lower(*b); @@ -447,7 +442,6 @@ namespace das template TT string_to_int_number ( const char *str, Context * context, LineInfoArg * at ) { - if ( !str ) context->throw_error_at(at, "expecting string"); TT result = 0; while ( is_white_space(*str) ) str++; bool hex = false; @@ -494,7 +488,6 @@ namespace das template TT string_to_real_number ( const char *str, Context * context, LineInfoArg * at ) { - if ( !str ) context->throw_error_at(at, "expecting string"); TT result = 0; while ( is_white_space(*str) ) str++; auto res = fast_float::from_chars(str, str+strlen(str), result); @@ -512,7 +505,6 @@ namespace das template TT fast_to_real ( const char *str ) { - if ( !str ) return 0; TT result = 0; while ( is_white_space(*str) ) str++; auto res = fast_float::from_chars(str, str+strlen(str), result); @@ -529,7 +521,6 @@ namespace das template TT fast_to_int_TT ( const char *str, bool hex ) { - if ( !str ) return 0; TT result = 0; while ( is_white_space(*str) ) str++; if ( hex && str[0]=='0' && (str[1]=='x' || str[1]=='X') ) str += 2; @@ -621,7 +612,6 @@ namespace das } StringBuilderWriter & write_escape_string ( StringBuilderWriter & writer, char * str ) { - if ( !str ) return writer; auto estr = escapeString(str,false); writer.writeStr(estr.c_str(), estr.length()); return writer; @@ -634,7 +624,7 @@ namespace das } char * string_repeat ( const char * str, int count, Context * context, LineInfoArg * at ) { - uint32_t len = stringLengthSafe ( *context, str ); + uint32_t len = stringLength ( *context, str ); if ( !len || count<=0 ) return nullptr; char * res = context->allocateString(nullptr, uint64_t(len) * uint64_t(count), at); for ( char * s = res; count; count--, s+=len ) { @@ -644,8 +634,6 @@ namespace das } DAS_API vector split ( const char * str, const char * delim ) { - if ( !str ) str = ""; - if ( !delim ) delim = ""; vector tokens; vector words; const char * ch = str; @@ -671,12 +659,10 @@ namespace das } void builtin_string_split_by_char ( const char * str, const char * delim, const Block & block, Context * context, LineInfoArg * at ) { - if ( !str ) str = ""; - if ( !delim ) delim = ""; vector tokens; vector words; const char * ch = str; - auto delimLen = stringLengthSafe(*context,delim); + auto delimLen = stringLength(*context,delim); if ( delimLen ) { while ( *ch ) { const char * tok = ch; @@ -687,7 +673,7 @@ namespace das if ( !*ch ) words.push_back(""); } } else { - auto len = stringLengthSafe(*context,str); + auto len = stringLength(*context,str); words.reserve(len); while ( *ch ) { words.push_back(string(1,*ch)); @@ -707,12 +693,10 @@ namespace das } void builtin_string_split ( const char * str, const char * delim, const Block & block, Context * context, LineInfoArg * at ) { - if ( !str ) str = ""; - if ( !delim ) delim = ""; vector tokens; vector words; const char * ch = str; - auto delimLen = stringLengthSafe(*context,delim); + auto delimLen = stringLength(*context,delim); if ( delimLen ) { while ( *ch ) { const char * tok = ch; @@ -723,7 +707,7 @@ namespace das if ( !*ch ) words.push_back(""); } } else { - auto len = stringLengthSafe(*context,str); + auto len = stringLength(*context,str); words.reserve(len); while ( *ch ) { words.push_back(string(1,*ch)); @@ -764,9 +748,9 @@ namespace das } char * builtin_string_replace ( const char * str, const char * toSearch, const char * replaceStr, Context * context, LineInfoArg * at ) { - return replace_core(str, stringLengthSafe(*context, str), - toSearch, stringLengthSafe(*context, toSearch), - replaceStr, stringLengthSafe(*context, replaceStr), context, at); + return replace_core(str, stringLength(*context, str), + toSearch, stringLength(*context, toSearch), + replaceStr, stringLength(*context, replaceStr), context, at); } class StrdupDataWalker : public DataWalker { @@ -782,12 +766,10 @@ namespace das } char * builtin_string_escape ( const char *str, Context * context, LineInfoArg * at ) { - if ( !str ) return nullptr; return context->allocateString(escapeString(str,false), at); } char * builtin_string_unescape ( const char *str, Context * context, LineInfoArg * at ) { - if ( !str ) return nullptr; bool err = false; auto estr = unescapeString(str, &err, false); if ( err ) context->throw_error_at(at, "invalid escape sequence"); @@ -795,18 +777,17 @@ namespace das } char * builtin_string_safe_unescape ( const char *str, Context * context, LineInfoArg * at ) { - if ( !str ) return nullptr; bool err = false; auto estr = unescapeString(str, &err, false); return context->allocateString(estr, at); } int builtin_find_first_char_of ( const char * str, int Ch, Context * context ) { - return find_char_core(str, stringLengthSafe ( *context, str ), Ch, 0); + return find_char_core(str, stringLength ( *context, str ), Ch, 0); } int builtin_find_first_char_of2 ( const char * str, int Ch, int start, Context * context ) { - uint32_t strLen = stringLengthSafe ( *context, str ); + uint32_t strLen = stringLength ( *context, str ); start = clamp_int((start < 0) ? (strLen + start) : start, 0, strLen); return find_char_core(str, strLen, Ch, uint32_t(start)); } @@ -831,7 +812,7 @@ namespace das TArray builtin_string_to_bytes ( const char * str, Context * context, LineInfoArg * at ) { TArray bytes; das_zero(bytes); - uint32_t len = stringLengthSafe(*context, str); + uint32_t len = stringLength(*context, str); if ( len ) { // exact reserve first: known final size, so the resize never grows - no pow2 // slack on big strings, and no max_unreserved_size panic @@ -857,9 +838,8 @@ namespace das } bool builtin_string_ends_with(const string &str, char * substr, Context * context ) { - if ( substr==nullptr ) return false; auto sz = str.length(); - auto slen = stringLengthSafe(*context,substr); + auto slen = stringLength(*context,substr); if ( slen>sz ) return false; return memcmp ( str.data() + sz - slen, substr, slen )==0; } @@ -918,19 +898,19 @@ namespace das } char * builtin_string_trim ( char* s, Context * context, LineInfoArg * at ) { - return trim_core(s, stringLengthSafe(*context, s), context, at); + return trim_core(s, stringLength(*context, s), context, at); } char * builtin_string_ltrim ( char* s, Context * context, LineInfoArg * at ) { - return ltrim_core(s, stringLengthSafe(*context, s), context, at); + return ltrim_core(s, stringLength(*context, s), context, at); } char * builtin_string_rtrim ( char* s, Context * context, LineInfoArg * at ) { - return rtrim_core(s, stringLengthSafe(*context, s), context, at); + return rtrim_core(s, stringLength(*context, s), context, at); } char * builtin_string_rtrim_ts ( char* s, char * ts, Context * context, LineInfoArg * at ) { - return rtrim_chars_core(s, stringLengthSafe(*context, s), ts ? ts : "", context, at); + return rtrim_chars_core(s, stringLength(*context, s), ts ? ts : "", context, at); } char * builtin_view_trim ( const TArray & bytes, Context * context, LineInfoArg * at ) { @@ -950,7 +930,6 @@ namespace das } void builtin_string_peek ( const char * str, const TBlock const>> & block, Context * context, LineInfoArg * at ) { - if ( !str ) return; Array arr; array_mark_locked(arr, (char *)str, uint32_t(strlen(str))); vec4f args[1]; @@ -959,7 +938,6 @@ namespace das } char * builtin_string_peek_and_modify ( const char * str, const TBlock>> & block, Context * context, LineInfoArg * at ) { - if ( !str ) return nullptr; int32_t len = int32_t(strlen(str)); char * cstr = context->allocateString(str, len, at); memcpy(cstr, str, len); diff --git a/tests/handle_types/string_arg_never_null.das b/tests/handle_types/string_arg_never_null.das new file mode 100644 index 0000000000..2db29a228c --- /dev/null +++ b/tests/handle_types/string_arg_never_null.das @@ -0,0 +1,19 @@ +options gen2 +require dastest/testing_boost + +require UnitTest + +[test] +def test_string_arg_never_null(t : T?) { + t |> run("a null string arrives as empty") @(t : T?) { + let nul_str : string + assert(test_string_arg_length(nul_str) == 0l) + } + t |> run("an empty literal arrives as empty") @(t : T?) { + let empty_literal = "" + assert(test_string_arg_length(empty_literal) == 0l) + } + t |> run("a non-empty string is untouched") @(t : T?) { + assert(test_string_arg_length("abc") == 3l) + } +} diff --git a/tests/strings/strings_core_pins.das b/tests/strings/strings_core_pins.das index bf8e7d8ab5..b5c60610b3 100644 --- a/tests/strings/strings_core_pins.das +++ b/tests/strings/strings_core_pins.das @@ -16,7 +16,7 @@ def private heap_str(src : string) : string { // for a string-to-integer reinterpret (llvm_jit.das:5537 tests isPointer, which a string is not) def private ptr_of(s : string) : uint8 const? => unsafe(reinterpret(s)) -def private is_null_str(s : string) : bool => ptr_of(s) == null +def private is_null_str(s : string) : bool => empty(s) def private ptr_delta(src, res : string) : int64 => ptr_of(res) - ptr_of(src) @@ -196,9 +196,7 @@ def test_pin_das_string_overloads(t : T?) { t |> success(!starts_with(ds, "abcdefg"), "das_string starts_with cmp longer than str") t |> success(ends_with(ds, "def"), "das_string ends_with match") t |> success(!ends_with(ds, "dee"), "das_string ends_with mismatch") - // an empty das literal is a null pointer, and this overload null-checks cmp first, - // so it disagrees with ends_with(string, "") above - t |> success(!ends_with(ds, ""), "das_string ends_with empty cmp is FALSE") + t |> success(ends_with(ds, ""), "das_string ends_with empty cmp is true") t |> success(!ends_with(ds, "zabcdef"), "das_string ends_with cmp longer than str") } } diff --git a/tests/strings/view_binary_safe.das b/tests/strings/view_binary_safe.das index f007e2c4b0..765762de32 100644 --- a/tests/strings/view_binary_safe.das +++ b/tests/strings/view_binary_safe.das @@ -40,7 +40,7 @@ def private str_byte(s : string; idx : int) : int { return int(unsafe(p[idx])) } -def private is_null_str(s : string) : bool => unsafe(reinterpret(s)) == null +def private is_null_str(s : string) : bool => empty(s) // ===== interior NUL ===== @@ -108,8 +108,7 @@ def test_nul_strip_and_trim(t : T?) { t |> equal(length(trim(inner)), 1, "trim behaves the same") var inscope padded <- with_nul(" ", " ") let stripped = strip(padded) - t |> success(!is_null_str(stripped), "a lone NUL between spaces is content, not whitespace") - t |> equal(length(stripped), 0, "and the result reads as the empty string") + t |> equal(length(stripped), 0, "a lone NUL between spaces reads as the empty string") t |> equal(length(trim(padded)), 0, "trim agrees") // the char-set form only trims the right, so the leading space survives and the NUL stops it let rt = rtrim(padded, " ") diff --git a/tutorials/integration/cpp/04_binding_types.cpp b/tutorials/integration/cpp/04_binding_types.cpp index 3f4324b9da..23a1cc9c0e 100644 --- a/tutorials/integration/cpp/04_binding_types.cpp +++ b/tutorials/integration/cpp/04_binding_types.cpp @@ -11,7 +11,6 @@ // and pass these types to/from C++ functions seamlessly. #include "daScript/daScript.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/05_binding_enums.cpp b/tutorials/integration/cpp/05_binding_enums.cpp index 8665c9b063..54f77b0d19 100644 --- a/tutorials/integration/cpp/05_binding_enums.cpp +++ b/tutorials/integration/cpp/05_binding_enums.cpp @@ -11,7 +11,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/bind_enum.h" #include diff --git a/tutorials/integration/cpp/06_interop.cpp b/tutorials/integration/cpp/06_interop.cpp index 4237d04ab6..1dbb179969 100644 --- a/tutorials/integration/cpp/06_interop.cpp +++ b/tutorials/integration/cpp/06_interop.cpp @@ -12,7 +12,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/07_callbacks.cpp b/tutorials/integration/cpp/07_callbacks.cpp index 36c633ae7f..4c3f78f404 100644 --- a/tutorials/integration/cpp/07_callbacks.cpp +++ b/tutorials/integration/cpp/07_callbacks.cpp @@ -9,7 +9,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/simulate/aot.h" #include diff --git a/tutorials/integration/cpp/08_methods.cpp b/tutorials/integration/cpp/08_methods.cpp index 2a24d9b359..d550ec26c7 100644 --- a/tutorials/integration/cpp/08_methods.cpp +++ b/tutorials/integration/cpp/08_methods.cpp @@ -12,7 +12,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/09_operators_and_properties.cpp b/tutorials/integration/cpp/09_operators_and_properties.cpp index ce9e240abc..56d4f1db6d 100644 --- a/tutorials/integration/cpp/09_operators_and_properties.cpp +++ b/tutorials/integration/cpp/09_operators_and_properties.cpp @@ -8,7 +8,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/10_custom_modules.cpp b/tutorials/integration/cpp/10_custom_modules.cpp index 0923fa8078..36a4dc7cba 100644 --- a/tutorials/integration/cpp/10_custom_modules.cpp +++ b/tutorials/integration/cpp/10_custom_modules.cpp @@ -10,7 +10,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/11_context_variables.cpp b/tutorials/integration/cpp/11_context_variables.cpp index 7634c79ac5..4bca67cfd5 100644 --- a/tutorials/integration/cpp/11_context_variables.cpp +++ b/tutorials/integration/cpp/11_context_variables.cpp @@ -8,7 +8,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include diff --git a/tutorials/integration/cpp/12_smart_pointers.cpp b/tutorials/integration/cpp/12_smart_pointers.cpp index c4b9ac492e..a6e2bdf01b 100644 --- a/tutorials/integration/cpp/12_smart_pointers.cpp +++ b/tutorials/integration/cpp/12_smart_pointers.cpp @@ -9,7 +9,6 @@ #include "daScript/daScript.h" #include "daScript/ast/ast_interop.h" -#include "daScript/ast/ast_typefactory_bind.h" #include "daScript/ast/ast_handle.h" #include From f11baa3cdcdc69f60bde0e35df3e9f7abf03ab0c Mon Sep 17 00:00:00 2001 From: Churkin Aleksey Date: Wed, 2 Sep 2026 15:42:11 +0300 Subject: [PATCH 2/2] tests: price the null-string substitution test_four_strings takes four const char *, test_four_pointers takes four void *, and both xor their four arguments, so the pair shares a node shape, an argument count and a body - only the substitution differs. Interpreted, the strings side runs 0.2 to 0.4 ns/op slower across six sample pairs, against a call which spends ten to fifteen ns in dispatch alone - one test and one cmov per argument, absorbed. The absolute figures move with machine load; the ordering did not. Both report 0 B/op and 0 strings/op, so nothing allocates behind the measurement. --- modules/dasUnitTest/test_handles.cpp | 14 ++++++++++++++ tests/handle_types/bench_string_arg_wrap.das | 20 ++++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 tests/handle_types/bench_string_arg_wrap.das diff --git a/modules/dasUnitTest/test_handles.cpp b/modules/dasUnitTest/test_handles.cpp index fabd60ca4f..92650a77cf 100644 --- a/modules/dasUnitTest/test_handles.cpp +++ b/modules/dasUnitTest/test_handles.cpp @@ -569,6 +569,16 @@ int32_t test_escape_retained_first_int () { return g_escape_test_retained ? *(int32_t *)g_escape_test_retained : -1; } +// the pair exists to price the null-string substitution: same node shape, same +// argument count, same work - only the parameter type differs +int64_t testFourStrings ( const char * a, const char * b, const char * c, const char * d ) { + return int64_t(intptr_t(a) ^ intptr_t(b) ^ intptr_t(c) ^ intptr_t(d)); +} + +int64_t testFourPointers ( void * a, void * b, void * c, void * d ) { + return int64_t(intptr_t(a) ^ intptr_t(b) ^ intptr_t(c) ^ intptr_t(d)); +} + int64_t testStringArgLength ( const char * str ) { return str ? int64_t(strlen(str)) : -1; } @@ -607,6 +617,10 @@ Module_UnitTest::Module_UnitTest() : Module("UnitTest") { addAlias(typeFactory::make(lib)); addVectorAnnotation(this,lib,new Point3ArrayAnnotation(lib)); addCtorAndUsing(*this, lib, "Point3Array", "Point3Array"); + addExtern(*this, lib, "test_four_strings", + SideEffects::none, "testFourStrings")->args({"a","b","c","d"}); + addExtern(*this, lib, "test_four_pointers", + SideEffects::none, "testFourPointers")->args({"a","b","c","d"}); addExtern(*this, lib, "test_string_arg_length", SideEffects::none, "testStringArgLength")->arg("str"); addExtern(*this, lib, "testPoint3Array", diff --git a/tests/handle_types/bench_string_arg_wrap.das b/tests/handle_types/bench_string_arg_wrap.das new file mode 100644 index 0000000000..e307a703d7 --- /dev/null +++ b/tests/handle_types/bench_string_arg_wrap.das @@ -0,0 +1,20 @@ +options gen2 +require dastest/testing_boost + +require UnitTest + +[benchmark] +def bench_string_arg_wrap(b : B?) { + let nul_str : string + let lit = "abcd" + var acc = 0l + b |> run("4 string args") { + acc += test_four_strings(nul_str, lit, nul_str, lit) + } + let nul_ptr : void? = null + let some_ptr = unsafe(reinterpret(lit)) + b |> run("4 pointer args") { + acc += test_four_pointers(nul_ptr, some_ptr, nul_ptr, some_ptr) + } + feint("{acc}") +}