Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -287,12 +287,27 @@ SET(DAS_MODULES_NEED_INC ${NEED_MODULES_PATH}/external_need.inc)
FILE(WRITE ${DAS_MODULES_RESOLVE_INC}.temp "")
FILE(WRITE ${DAS_MODULES_NEED_INC}.temp "")

add_compile_definitions(PRIVATE DAS_MOD_API=)

MACRO(ADD_DAS_LIBRARY lib)
ADD_LIBRARY(${lib} ${ARGN})
# SET_TARGET_PROPERTIES(${lib} PROPERTIES POSITION_INDEPENDENT_CODE ON)
# TARGET_COMPILE_OPTIONS(${lib} PRIVATE -fvisibility=hidden)
ENDMACRO()

SET(DAS_MODULES_LIBS)
SET(DAS_ALL_EXAMPLES)
FILE(GLOB _modules RELATIVE "${PROJECT_SOURCE_DIR}/modules" "modules/*")
FOREACH(_module ${_modules})
MACRO(ADD_MODULE_LIB lib)
MESSAGE("REGISTER DAS MODULE ${lib}")

# temporary `if`, unless all modules not use new API
if(${ARGC} GREATER 1)
ADD_DAS_LIBRARY(${lib} ${ARGN})
TARGET_LINK_LIBRARIES(${lib} PUBLIC libDaScript)
endif()

LIST(APPEND DAS_MODULES_LIBS ${lib})
ENDMACRO()

Expand Down
26 changes: 14 additions & 12 deletions include/daScript/ast/ast.h
Original file line number Diff line number Diff line change
Expand Up @@ -1794,25 +1794,27 @@ namespace das
AstSerializer * serializer_write = nullptr;
inline static DAS_THREAD_LOCAL(DebugAgentInstance *) g_threadLocalDebugAgent;
uint64_t dataWalkerStringLimit = 0;

static daScriptEnvironment *getBound();
static void setBound(daScriptEnvironment *bnd);
static daScriptEnvironment *exchangeBound(daScriptEnvironment *bnd);

static daScriptEnvironment *getOwned();
static void setOwned(daScriptEnvironment *bnd);
static daScriptEnvironment *exchangeOwned(daScriptEnvironment *bnd);

static void ensure();

/*private:*/
inline static DAS_THREAD_LOCAL(daScriptEnvironment *) bound;
inline static DAS_THREAD_LOCAL(daScriptEnvironment *) owned;
static void ensure();
};

struct daScriptEnvironmentGuard {
das::daScriptEnvironment *initialBound;
das::daScriptEnvironment *initialOwned;

daScriptEnvironmentGuard(das::daScriptEnvironment *bound = nullptr, das::daScriptEnvironment *owned = nullptr) {
initialBound = *das::daScriptEnvironment::bound;
initialOwned = *das::daScriptEnvironment::owned;
*das::daScriptEnvironment::bound = bound;
*das::daScriptEnvironment::owned = owned;
}

~daScriptEnvironmentGuard() {
*das::daScriptEnvironment::bound = initialBound;
*das::daScriptEnvironment::owned = initialOwned;
}
daScriptEnvironmentGuard(das::daScriptEnvironment *bound = nullptr, das::daScriptEnvironment *owned = nullptr);
~daScriptEnvironmentGuard();
};
}
22 changes: 19 additions & 3 deletions include/daScript/ast/ast_interop.h
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,8 @@ namespace das
virtual void * getBuiltinAddress() const override { return (void *) &usingFunc; }
};

#define VERIFY_JIT_ARGUMENTS 0
#if VERIFY_JIT_ARGUMENTS
template <typename Func, Func Fn>
struct VerifyFn;

Expand All @@ -195,8 +197,6 @@ namespace das

template <typename ArgT>
static void verifySingleArgumentType(size_t /*idx*/, FunctionPtr /*fn_info*/) {
// todo: enable once everything else is merged
/*
auto & type = fn_info->arguments[idx]->type;
if (type->isVectorType()) {
using CleanType = remove_cv_t<remove_reference_t<ArgT>>;
Expand All @@ -222,9 +222,9 @@ namespace das
"Reference type mismatch %s in function %s. It makes jit work incorrectly. "
"You must be manually changed ref, but not implemented JitConstRefByValue for this type.",
debug_type_name<ArgT>(), fn_info->name.c_str());
*/
}
};
#endif

void addExternFunc(Module& mod, const FunctionPtr & fx, bool isCmres, SideEffects seFlags);

Expand All @@ -248,7 +248,9 @@ namespace das
fnX->setSideEffects(sideEffects);
fnX->propertyFunction = true;
DAS_ASSERTF(!fnX->result->isSmartPointer(), "property function can't return smart pointer %s::%s", mod.name.c_str(), name);
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
mod.addFunction(fnX,true); // yes, this one can fail. same C++ bound property can be in multiple classes before or after refactor
return fnX;
}
Expand Down Expand Up @@ -278,7 +280,9 @@ namespace das
fnX->setSideEffects(sideEffects);
fnX->propertyFunction = true;
DAS_ASSERTF(!fnX->result->isSmartPointer(), "property function can't return smart pointer %s::%s", mod.name.c_str(), name);
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
mod.addFunction(fnX,true); // yes, this one can fail. same C++ bound property can be in multiple classes before or after refactor
return fnX;
}
Expand All @@ -299,7 +303,9 @@ namespace das
#endif

tempFn(fnX.get());
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
addExternFunc(mod, fnX, SimNodeType::IS_CMRES, seFlags);
return fnX;
}
Expand Down Expand Up @@ -330,7 +336,9 @@ namespace das
fnX->name.c_str(), fnX->name.c_str());
}
}
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
return fnX;
}

Expand All @@ -349,7 +357,9 @@ namespace das
auto fnX = make_smart<ExternalFn<FuncT, fn, SimNodeType, FuncArgT>>(name, lib, cppName);
#endif
tempFn(fnX.get());
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
addExternFunc(mod, fnX, SimNodeType::IS_CMRES, seFlags);
return fnX;
}
Expand All @@ -371,7 +381,9 @@ namespace das
#endif
tempFn(fnX.get());
fnX->result->temporary = true;
#if VERIFY_JIT_ARGUMENTS
VerifyFn<FuncT, fn>::verify(fnX);
#endif
addExternFunc(mod, fnX, SimNodeType::IS_CMRES, seFlags);
return fnX;
}
Expand Down Expand Up @@ -440,5 +452,9 @@ namespace das
addExtern<void (*)(ET&,ET),method_and_equ::invoke>(mod, lib, "&=", SideEffects::modifyArgument,
("das_operator_enum_AND_EQU<" + cppName + ">::invoke").c_str());
}

#ifdef VERIFY_JIT_ARGUMENTS
#undef VERIFY_JIT_ARGUMENTS
#endif
}

4 changes: 2 additions & 2 deletions include/daScript/simulate/heap.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,8 +289,8 @@ namespace das {
virtual void sweep() override { DAS_ASSERT(0 && "not supported"); }
virtual bool isOwnPtr ( char * ptr, uint32_t ) override;
virtual bool isValidPtr ( char *, uint32_t ) override { return true; }
virtual void setInitialSize ( uint32_t size );
virtual int32_t getInitialSize() const;
virtual void setInitialSize ( uint32_t size ) override;
virtual int32_t getInitialSize() const override;
virtual void setGrowFunction ( CustomGrowFunction && fun ) override;
protected:
LinearChunkAllocator model;
Expand Down
5 changes: 2 additions & 3 deletions modules/dasAudio/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,10 @@ IF ((NOT DAS_AUDIO_INCLUDED) AND ((NOT ${DAS_AUDIO_DISABLED}) OR (NOT DEFINED DA
)
ENDIF()

ADD_MODULE_LIB(libDasModuleAudio)
ADD_MODULE_CPP(Audio)
# ADD_MODULE_NATIVE(AUDIO_boost)
ADD_LIBRARY(libDasModuleAudio ${DAS_AUDIO_MODULE_SRC} ${DAS_AUDIO_MODULE_PLATFORM_SRC} ${MIT_HRTF_SRC})
TARGET_LINK_LIBRARIES(libDasModuleAudio ${AUDIO_LIBRARIES})
ADD_MODULE_LIB(libDasModuleAudio ${DAS_AUDIO_MODULE_SRC} ${DAS_AUDIO_MODULE_PLATFORM_SRC} ${MIT_HRTF_SRC})
TARGET_LINK_LIBRARIES(libDasModuleAudio PUBLIC ${AUDIO_LIBRARIES})
# ADD_DEPENDENCIES(libDasModuleAudio)
TARGET_INCLUDE_DIRECTORIES(libDasModuleAudio PUBLIC ${AUDIO_INCLUDE_DIR} ${MIT_HRTF_INCLUDE_DIR})

Expand Down
7 changes: 3 additions & 4 deletions modules/dasAudio/src/dasAudio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -219,8 +219,7 @@ void data_callback(ma_device*, void* pOutput, const void*, ma_uint32 frameCount)
buffer.size = buffer.capacity = frameCount * g_channels;
buffer.lock = 1;
lock_guard<recursive_mutex> guard(*g_mixer_context->contextMutex);
auto saved = *daScriptEnvironment::bound;
*daScriptEnvironment::bound = g_mixer_env;
auto saved = daScriptEnvironment::exchangeBound(g_mixer_env);
g_mixer_context->restart();
g_mixer_context.get()->runWithCatch([&](){
das_invoke_function<void>::invoke<Array&,int32_t,int32_t>(g_mixer_context.get(),nullptr,g_mixer_function,buffer,g_channels,g_rate,fdt);
Expand All @@ -229,7 +228,7 @@ void data_callback(ma_device*, void* pOutput, const void*, ma_uint32 frameCount)
if ( const char* exp = g_mixer_context->getException() ) {
g_mixer_context->to_err(&g_mixer_context->exceptionAt, exp);
}
*daScriptEnvironment::bound = saved;
daScriptEnvironment::setBound(saved);
}

Context & dasAudio_mixerContext ( Context * context, LineInfoArg * at ) {
Expand Down Expand Up @@ -258,7 +257,7 @@ bool dasAudio_init ( TFunc<void,TTemporary<TArray<float>>,int32_t,int32_t,float>
}
g_mixer_context.reset(get_clone_context(&context,uint32_t(ContextCategory::audio_context)));
g_mixer_function = mixer;
g_mixer_env = *daScriptEnvironment::bound;
g_mixer_env = daScriptEnvironment::getBound();
if ( ma_device_start(&g_device) != MA_SUCCESS ) {
ma_device_uninit(&g_device);
g_mixer_context.reset();
Expand Down
3 changes: 1 addition & 2 deletions modules/dasClangBind/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,9 @@ IF ((NOT DAS_CLANG_BIND_INCLUDED) AND (${Clang_FOUND}) AND ((NOT ${DAS_CLANG_BIN
${DAS_CLANG_BIND_DIR}/src/dasClangBind.func_17.cpp
)

ADD_MODULE_LIB(libDasModuleClangBind)
ADD_MODULE_CPP(dasClangBind)
# ADD_MODULE_NATIVE(CLANG_BIND_boost)
ADD_LIBRARY(libDasModuleClangBind ${DAS_CLANG_BIND_MODULE_SRC} ${DAS_CLANG_BIND_MODULE_PLATFORM_SRC})
ADD_MODULE_LIB(libDasModuleClangBind ${DAS_CLANG_BIND_MODULE_SRC} ${DAS_CLANG_BIND_MODULE_PLATFORM_SRC})
IF(APPLE)
TARGET_LINK_LIBRARIES(libDasModuleClangBind ${CLANG_BIND_LIBRARIES} ${LIBCLANG_LIB}/libclang.dylib)
ELSEIF(UNIX)
Expand Down
3 changes: 1 addition & 2 deletions modules/dasPUGIXML/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,9 @@ IF ((NOT DAS_PUGIXML_INCLUDED) AND ((NOT ${DAS_PUGIXML_DISABLED}) OR (NOT DEFINE
${DAS_PUGIXML_DIR}/pugixml/pugiconfig.hpp
)

ADD_MODULE_LIB(libDasModulePUGIXML)
ADD_MODULE_CPP(PUGIXML)
# ADD_MODULE_NATIVE(PUGIXML_boost)
ADD_LIBRARY(libDasModulePUGIXML ${DAS_PUGIXML_MODULE_SRC} ${PUGIXML_SRC})
ADD_MODULE_LIB(libDasModulePUGIXML ${DAS_PUGIXML_MODULE_SRC} ${PUGIXML_SRC})
TARGET_LINK_LIBRARIES(libDasModulePUGIXML ${PUGIXML_LIBRARIES})
# ADD_DEPENDENCIES(libDasModulePUGIXML)
TARGET_INCLUDE_DIRECTORIES(libDasModulePUGIXML PUBLIC ${PUGIXML_INCLUDE_DIR})
Expand Down
3 changes: 1 addition & 2 deletions modules/dasSQLITE/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -63,10 +63,9 @@ IF ((NOT DAS_SQLITE_INCLUDED) AND ((NOT ${DAS_SQLITE_DISABLED}) OR (NOT DEFINED
ADD_DEFINITIONS(-DSQLITE_ENABLE_STMT_SCANSTATUS=1)
ADD_DEFINITIONS(-DSQLITE_ENABLE_SNAPSHOT=1)

ADD_MODULE_LIB(libDasModuleSQLITE)
ADD_MODULE_CPP(dasSQLITE)
# ADD_MODULE_NATIVE(SQLITE_boost)
ADD_LIBRARY(libDasModuleSQLITE ${DAS_SQLITE_MODULE_SRC} ${DAS_SQLITE_SRC})
ADD_MODULE_LIB(libDasModuleSQLITE ${DAS_SQLITE_MODULE_SRC} ${DAS_SQLITE_SRC})
TARGET_INCLUDE_DIRECTORIES(libDasModuleSQLITE PUBLIC ${SQLITE_INCLUDE_DIR})
SETUP_CPP11(libDasModuleSQLITE)

Expand Down
5 changes: 2 additions & 3 deletions modules/dasStbImage/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,10 @@ IF ((NOT DAS_STBIMAGE_INCLUDED) AND (NOT ${DAS_STBIMAGE_DISABLED}))
${DAS_STBIMAGE_DIR}/src/dasStbImage.cpp
)

ADD_MODULE_LIB(libDasModuleStbImage)
ADD_MODULE_CPP(StbImage)
# ADD_MODULE_NATIVE(STBIMAGE_boost)
ADD_LIBRARY(libDasModuleStbImage ${DAS_STBIMAGE_MODULE_SRC} ${DAS_STBIMAGE_MODULE_PLATFORM_SRC})
TARGET_LINK_LIBRARIES(libDasModuleStbImage ${STBIMAGE_LIBRARIES})
ADD_MODULE_LIB(libDasModuleStbImage ${DAS_STBIMAGE_MODULE_SRC} ${DAS_STBIMAGE_MODULE_PLATFORM_SRC})
TARGET_LINK_LIBRARIES(libDasModuleStbImage PUBLIC ${STBIMAGE_LIBRARIES})
# ADD_DEPENDENCIES(libDasModuleStbImage)
TARGET_INCLUDE_DIRECTORIES(libDasModuleStbImage PUBLIC ${STBIMAGE_INCLUDE_DIR})

Expand Down
3 changes: 1 addition & 2 deletions modules/dasStbTrueType/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,9 @@ IF ((NOT DAS_STBTRUETYPE_INCLUDED) AND ((NOT ${DAS_STBTRUETYPE_DISABLED}) OR (NO
${DAS_STBTRUETYPE_DIR}/src/dasStbTrueType.cpp
)

ADD_MODULE_LIB(libDasModuleStbTrueType)
ADD_MODULE_CPP(StbTrueType)
# ADD_MODULE_NATIVE(stbimage_boost)
ADD_LIBRARY(libDasModuleStbTrueType ${DAS_STBTRUETYPE_MODULE_SRC} ${DAS_STBTRUETYPE_MODULE_PLATFORM_SRC})
ADD_MODULE_LIB(libDasModuleStbTrueType ${DAS_STBTRUETYPE_MODULE_SRC} ${DAS_STBTRUETYPE_MODULE_PLATFORM_SRC})
TARGET_LINK_LIBRARIES(libDasModuleStbTrueType ${STBTRUETYPE_LIBRARIES})
# ADD_DEPENDENCIES(libDasModuleStbTrueType)
TARGET_INCLUDE_DIRECTORIES(libDasModuleStbTrueType PUBLIC ${STBTRUETYPE_INCLUDE_DIR})
Expand Down
11 changes: 5 additions & 6 deletions modules/dasStdDlg/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,15 @@ IF ((NOT DAS_STDDLG_INCLUDED) AND ((NOT ${DAS_STDDLG_DISABLED}) OR (NOT DEFINED
)
ENDIF()

ADD_MODULE_LIB(libDasModuleStdDlg)
ADD_MODULE_CPP(StdDlg)
# ADD_MODULE_NATIVE(STDDLG_boost)
ADD_LIBRARY(libDasModuleStdDlg ${DAS_STDDLG_MODULE_SRC} ${DAS_STDDLG_MODULE_PLATFORM_SRC})
TARGET_LINK_LIBRARIES(libDasModuleStdDlg ${STDDLG_LIBRARIES})
ADD_MODULE_LIB(libDasModuleStdDlg ${DAS_STDDLG_MODULE_SRC} ${DAS_STDDLG_MODULE_PLATFORM_SRC})
TARGET_LINK_LIBRARIES(libDasModuleStdDlg PUBLIC ${STDDLG_LIBRARIES})
# ADD_DEPENDENCIES(libDasModuleStdDlg)
TARGET_INCLUDE_DIRECTORIES(libDasModuleStdDlg PUBLIC ${STDDLG_INCLUDE_DIR})

IF(WIN32)
TARGET_LINK_LIBRARIES(libDasModuleStdDlg ShLwApi)
TARGET_LINK_LIBRARIES(libDasModuleStdDlg PUBLIC ShLwApi)
ENDIF()

IF(LINUX_GTK)
Expand All @@ -54,11 +53,11 @@ IF ((NOT DAS_STDDLG_INCLUDED) AND ((NOT ${DAS_STDDLG_DISABLED}) OR (NOT DEFINED
include_directories(${GTK3_INCLUDE_DIRS})
link_directories(${GTK3_LIBRARY_DIRS})
add_definitions(${GTK3_CFLAGS_OTHER})
TARGET_LINK_LIBRARIES(libDasModuleStdDlg ${GTK3_LIBRARIES})
TARGET_LINK_LIBRARIES(libDasModuleStdDlg PUBLIC ${GTK3_LIBRARIES})
ENDIF()

IF(APPLE)
TARGET_LINK_LIBRARIES(libDasModuleStdDlg
TARGET_LINK_LIBRARIES(libDasModuleStdDlg PUBLIC
"-framework AppKit"
)
ENDIF()
Expand Down
4 changes: 2 additions & 2 deletions src/ast/ast_aot_cpp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4218,7 +4218,7 @@ namespace das {
return;
}
Context & context = *pctx;
(*daScriptEnvironment::bound)->g_Program = program; // setting it for the AOT macros
daScriptEnvironment::getBound()->g_Program = program; // setting it for the AOT macros

// mark prologue
PrologueMarker pmarker;
Expand Down Expand Up @@ -4291,7 +4291,7 @@ namespace das {
saveToFile(logger, outputFile + ".cpp", source_content);
}

(*daScriptEnvironment::bound)->g_Program.reset();
daScriptEnvironment::getBound()->g_Program.reset();
}

void Program::aotCpp ( Context & context, TextWriter & logs, bool cross_platform ) {
Expand Down
2 changes: 1 addition & 1 deletion src/ast/ast_infer_type.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2272,7 +2272,7 @@ namespace das {
if ( fromGeneric ) {
ctor->fromGeneric = getOrCreateDummy(var->module);
}
bool export_for_aot = !var->cppLayout && (*daScriptEnvironment::bound && (*daScriptEnvironment::bound)->g_isInAot);
bool export_for_aot = !var->cppLayout && (daScriptEnvironment::getBound() && daScriptEnvironment::getBound()->g_isInAot);
ctor->exports = alwaysExportInitializer || export_for_aot;
extraFunctions.push_back(ctor);
reportAstChanged();
Expand Down
Loading