FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

GitHub Viewer

#include "daScript/misc/platform.h" #include "daScript/daScript.h" #include "daScript/daScriptC.h" using namespace das; namespace das { struct SimNode_CFuncCall : SimNode_ExtFuncCallBase { SimNode_CFuncCall ( const LineInfo & at, const char * fnName, das_interop_function * FN ) : SimNode_ExtFuncCallBase(at,fnName) { fn = FN; } virtual vec4f DAS_EVAL_ABI eval ( Context & context ) override { DAS_PROFILE_NODE vec4f * args = (vec4f *)(alloca(nArguments * sizeof(vec4f))); evalArgs(context, args); return (*fn)((das_context *)&context,(das_node *)this,args); } das_interop_function * fn; }; class CFunction : public BuiltInFunction { public: __forceinline CFunction(const char * name, const ModuleLibrary &, const char * cppName, das_interop_function * FN ) : BuiltInFunction(name,cppName) { this->callBased = true; this->interopFn = true; fn = FN; } virtual SimNode * makeSimNode ( Context & context, const vector & ) override { const char * fnName = context.code->allocateName(this->name); return context.code->makeNode(BuiltInFunction::at,fnName,fn); } das_interop_function * fn; }; struct CStructureAnnotation : BasicStructureAnnotation { uint32_t sizeOf = 0; uint32_t alignOf = 0; CStructureAnnotation(const string & n, const string & cpn, ModuleLibrary * l) : BasicStructureAnnotation(n,cpn,l) {} virtual size_t getSizeOf() const override { return sizeOf; } virtual size_t getAlignOf() const override { return alignOf; } virtual bool isSmart() const override { return false; } virtual bool hasNonTrivialCtor() const override { return false; } virtual bool hasNonTrivialDtor() const override { return false; } virtual bool hasNonTrivialCopy() const override { return false; } virtual bool isPod() const override { return true; } virtual bool isRawPod() const override { return false; } virtual bool canClone() const override { return true; } virtual SimNode * simulateCopy ( Context & context, const LineInfo & at, SimNode * l, SimNode * r ) const override { return context.code->makeNode(at, l, r, sizeOf); } virtual SimNode * simulateClone ( Context & context, const LineInfo & at, SimNode * l, SimNode * r ) const override { return context.code->makeNode(at, l, r, sizeOf); } }; } das::FileAccessPtr get_file_access( char * pak );//link time resolved dependencies Context * get_context( int stackSize = 0 ); void das_initialize_modules() { NEED_ALL_DEFAULT_MODULES; } extern "C" { uint32_t SIDEEFFECTS_none = uint32_t(SideEffects::none); uint32_t SIDEEFFECTS_unsafe = uint32_t(SideEffects::unsafe); uint32_t SIDEEFFECTS_userScenario = uint32_t(SideEffects::userScenario); uint32_t SIDEEFFECTS_modifyExternal = uint32_t(SideEffects::modifyExternal); uint32_t SIDEEFFECTS_accessExternal = uint32_t(SideEffects::accessExternal); uint32_t SIDEEFFECTS_modifyArgument = uint32_t(SideEffects::modifyArgument); uint32_t SIDEEFFECTS_modifyArgumentAndExternal = uint32_t(SideEffects::modifyArgumentAndExternal); uint32_t SIDEEFFECTS_worstDefault = uint32_t(SideEffects::worstDefault); uint32_t SIDEEFFECTS_accessGlobal = uint32_t(SideEffects::accessGlobal); uint32_t SIDEEFFECTS_invoke = uint32_t(SideEffects::invoke); uint32_t SIDEEFFECTS_inferredSideEffects = uint32_t(SideEffects::inferredSideEffects); void das_initialize() { das_initialize_modules(); Module::Initialize(); } void das_shutdown() { Module::Shutdown(); } das_text_writer * das_text_make_printer() { return (das_text_writer *) new TextPrinter(); } das_text_writer * das_text_make_writer() { return (das_text_writer *) new TextWriter(); } void das_text_release ( das_text_writer * output ) { if ( output ) delete (TextWriter *) output; } void das_text_output ( das_text_writer * output, char * text ) { *((TextWriter *)output) delRef(); } void das_fileaccess_introduce_file ( das_file_access * access, const char * file_name, const char * file_content ) { auto fileInfo = make_unique((char *) file_content, uint32_t(strlen(file_content)), false); ((FileAccess *) access)->setFileInfo(file_name, das::move(fileInfo)); } void das_get_root ( char * root, int maxbuf ) { auto r = getDasRoot(); strncpy ( root, r.c_str(), maxbuf ); } das_program * das_program_compile ( char * program_file, das_file_access * access, das_text_writer * tout, das_module_group * libgroup ) { auto program = compileDaScript(program_file, (FileAccess *) access, *((TextWriter *) tout), *((ModuleGroup *) libgroup)); return (das_program *) program.orphan(); } void das_program_release ( das_program * program ) { if ( program ) ((Program *) program)->delRef(); } int das_program_err_count ( das_program * program ) { auto prog = (Program *) program; return prog->failed() ? int(prog->errors.size()) : 0; } int das_program_context_stack_size ( das_program * program ) { return ((Program *)program)->getContextStackSize(); } int das_program_simulate ( das_program * program, das_context * ctx, das_text_writer * tout ) { if ( ((Program *) program)->simulate(*((Context *)ctx), *((TextWriter *)tout)) ) { return 1; } else { return 0; } } das_error * das_program_get_error ( das_program * program, int index ) { auto prog = (Program *) program; if ( index=int(prog->errors.size()) ) return nullptr; return (das_error *) &(prog->errors[index]); } das_context * das_context_make ( int stackSize ) { return (das_context *) get_context(stackSize); } void das_context_release ( das_context * context ) { if ( context ) delete (Context *) context; } das_function * das_context_find_function ( das_context * context, char * name ) { return (das_function *) ((Context *)context)->findFunction(name); } vec4f das_context_eval_with_catch ( das_context * context, das_function * fun, vec4f * arguments ) { return ((Context *)context)->evalWithCatch((SimFunction *)fun,(vec4f *)arguments); } char * das_context_get_exception ( das_context * context ) { return (char *) ((Context *)context)->getException(); } void das_error_output ( das_error * error, das_text_writer * tout ) { auto err = (Error *) error; *((TextWriter *)tout) at, err->what, err->extra, err->fixme, err->cerr ); } void das_error_report ( das_error * error, char * text, int maxLength ) { auto err = (Error *) error; auto str = reportError(err->at, err->what, err->extra, err->fixme, err->cerr ); strncpy(text, str.c_str(), maxLength); } das_module * das_module_create ( char * name ) { return (das_module *) new Module(name); } void das_module_bind_interop_function ( das_module * mod, das_module_group * lib, das_interop_function * fun, char * name, char * cppName, uint32_t sideffects, char* args ) { auto fn = make_smart(name, *(ModuleLibrary *)lib, cppName, fun); fn->setSideEffects((das::SideEffects) sideffects); vector arguments; MangledNameParser parser; const char * arg = args; while ( *arg ) { auto tt = parser.parseTypeFromMangledName(arg, *(ModuleLibrary*)lib,(Module *)mod); arguments.push_back(tt); while (*arg==' ') arg ++; } fn->constructInterop(arguments); ((Module *)mod)->addFunction(fn, false); } void das_module_bind_alias ( das_module * mod, das_module_group * lib, char * aname, char * tname ) { MangledNameParser parser; auto tt = (const char *) tname; auto at = parser.parseTypeFromMangledName(tt, *(ModuleLibrary*)lib,(Module *)mod); DAS_ASSERT(at->alias.empty() && "already an alias"); at->alias = aname; ((Module *)mod)->addAlias(at); } void das_module_bind_structure ( das_module * mod, das_structure * st ) { ((Module *)mod)->addAnnotation((Annotation *)st); } void das_module_bind_enumeration ( das_module * mod, das_enumeration * en ) { ((Module *)mod)->addEnumeration((Enumeration *)en); } das_structure * das_structure_make ( das_module_group * lib, const char * name, const char * cppname, int sz, int al ) { auto st = make_smart(name,cppname,(ModuleLibrary *)lib); st->sizeOf = sz; st->alignOf = al; return (das_structure *) st.orphan(); } void das_structure_add_field ( das_structure * st, das_module * mod, das_module_group * lib, const char * name, const char * cppname, int offset, const char * tname ) { MangledNameParser parser; auto tt = (const char *) tname; auto at = parser.parseTypeFromMangledName(tt, *(ModuleLibrary*)lib,(Module *)mod); ((CStructureAnnotation *)st)->addFieldEx(name,cppname,offset,at); } das_enumeration * das_enumeration_make ( const char * name, const char * cppname, int ext ) { auto pEnum = make_smart(name); pEnum->cppName = cppname; pEnum->external = ext; return (das_enumeration *) pEnum.orphan(); } void das_enumeration_add_value ( das_enumeration * enu, const char * name, const char * cppName, int value ) { ((Enumeration *)enu)->addIEx(name, cppName, value, LineInfo()); } int das_argument_int ( vec4f arg ) { return cast::to(arg); } float das_argument_float ( vec4f arg ) { return cast::to(arg); } double das_argument_double ( vec4f arg ) { return cast::to(arg); } char * das_argument_string ( vec4f arg ) { char * a = cast::to(arg); return a ? a : ((char *)""); } void * das_argument_ptr ( vec4f arg ) { return cast::to(arg); } vec4f das_result_void () { return v_zero(); } vec4f das_result_int ( int r ) { return cast::from(r); } vec4f das_result_float ( float r ) { return cast::from(r); } vec4f das_result_double ( double r ) { return cast::from(r); } vec4f das_result_string ( char * r ) { return cast::from(r); } vec4f das_result_ptr ( void * r ) { return cast::from(r); } }

Back | FazBrowse Home | New Git URL