diff --git a/arkoala-arkts/.gitlab-ci.yml b/arkoala-arkts/.gitlab-ci.yml index 7fdeedd0abcde8bf289b1888f92df2ca418e6a28..2c3bec8eb4df537c5dad9ebcb2fa7bc49198ec48 100644 --- a/arkoala-arkts/.gitlab-ci.yml +++ b/arkoala-arkts/.gitlab-ci.yml @@ -281,17 +281,3 @@ unmemoize arkoala-arkts/arkui: - !reference [.setup, script] script: - npm run unmemoize --prefix arkoala-arkts/arkui - -unmemoize arkoala-arkts/loader: - allow_failure: true - extends: - - .linux-vm-shell-task - needs: - - install node modules (arkoala) - - install node modules (arkoala-arkts) - - install node modules (incremental) - - install node modules (interop) - before_script: - - !reference [.setup, script] - script: - - npm run unmemoize --prefix arkoala-arkts/loader diff --git a/arkoala-arkts/loader/package.json b/arkoala-arkts/loader/package.json index 13d8d100bfa5221f2da14b336970bc943afc0bcf..e67278fad423f863ecf1a984cc97c16ab002ecb6 100644 --- a/arkoala-arkts/loader/package.json +++ b/arkoala-arkts/loader/package.json @@ -4,16 +4,7 @@ "private": true, "description": "", "scripts": { - "clean": "rimraf build generated unmemoized js_output abc lib", - "compile:plugin": "cd ../../arkoala/ets-plugin && npm run compile", - "link:arkoala": "cd ../arkui && npm run link:arkoala && cp ../arkui/build/arkoala.abc build/abc", - "compile:ets": "npm run compile:plugin && cd src/ets && ets-tsc -p ./etsconfig.json", - "unmemoize": "npm run compile:ets && memo-tsc -b tsconfig-unmemoize.json", - "compile:arkts": "npm run unmemoize && npm run unmemoize --prefix ../arkui && npm run compile:unmemoize --prefix ../../incremental/runtime && bash -x ../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig-run-unmemoized.json --ets-module", - "compile:runner:program:arkts": "bash -x ../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig-run-unmemoized-runner.json", - "compile:runner:arkts": "bash -x ../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig-run-unmemoized-runner.json --ets-module", - "execute:panda": "LD_LIBRARY_PATH=. bash -x ../../incremental/tools/panda/arkts/ark build/abc/unmemoized/src/runner.abc --ark-boot-files build/abc/unmemoized/generated/hello.abc:../arkui/build/arkoala.abc --ark-entry-point ETSGLOBAL::main", - "run": "npm run compile:arkts && npm run compile:runner:program:arkts && npm run link:arkoala && npm run execute:panda", + "clean": "rimraf build", "build:loader:node": "WEBPACK_NO_MINIMIZE=true webpack --config webpack.config.node.js" }, "keywords": [] diff --git a/arkoala/tools/peer-generator/.gitlab-ci.yml b/arkoala/tools/peer-generator/.gitlab-ci.yml index aee1535fb7744a505e30eb8dedf4aad6377b2b6c..01bfd543295d53681c26b991c7823651d2877e57 100644 --- a/arkoala/tools/peer-generator/.gitlab-ci.yml +++ b/arkoala/tools/peer-generator/.gitlab-ci.yml @@ -143,7 +143,7 @@ - !reference [.setup, script] - npm run panda:sdk:install --prefix arkoala-arkts script: - - npm run compile:arkts:unmemoized --prefix arkoala-arkts/arkui + - npm run build:arkui-no-common --prefix arkoala-arkts/arkui artifacts: paths: - arkoala-arkts/arkui/build/arkui.abc diff --git a/interop/src/cpp/cangjie/convertors-cj.h b/interop/src/cpp/cangjie/convertors-cj.h index b7bad01bf7c38f543796063b22ebda1e1c7a6dbf..54d5399848a85e228132cc68059cafea60a98230 100644 --- a/interop/src/cpp/cangjie/convertors-cj.h +++ b/interop/src/cpp/cangjie/convertors-cj.h @@ -41,7 +41,7 @@ public: const std::vector>& getImpls() { return implementations; } -}; +}; template struct InteropTypeConverter { @@ -154,7 +154,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P2 p2 = getArgument(_p2); \ P3 p3 = getArgument(_p3); \ return makeResult(impl_##name(p0, p1, p2, p3)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3, 0) #define KOALA_INTEROP_5(name, Ret, P0, P1, P2, P3, P4) \ @@ -214,7 +214,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P5 p5 = getArgument(_p5); \ P6 p6 = getArgument(_p6); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6, 0) #define KOALA_INTEROP_8(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7) \ @@ -238,7 +238,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P6 p6 = getArgument(_p6); \ P7 p7 = getArgument(_p7); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7, 0) #define KOALA_INTEROP_9(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8) \ @@ -264,7 +264,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P7 p7 = getArgument(_p7); \ P8 p8 = getArgument(_p8); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7, p8)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7 "|" #P8, 0) #define KOALA_INTEROP_10(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9) \ @@ -292,7 +292,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P8 p8 = getArgument(_p8); \ P9 p9 = getArgument(_p9); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7 "|" #P8 "|" #P9, 0) #define KOALA_INTEROP_11(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10) \ @@ -322,7 +322,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P9 p9 = getArgument(_p9); \ P10 p10 = getArgument(_p10); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7 "|" #P8 "|" #P9 "|" #P10, 0) #define KOALA_INTEROP_12(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11) \ @@ -354,7 +354,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P10 p10 = getArgument(_p10); \ P11 p11 = getArgument(_p11); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7 "|" #P8 "|" #P9 "|" #P10 "|" #P11, 0) #define KOALA_INTEROP_13(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12) \ @@ -388,7 +388,7 @@ KOALA_INTEROP_EXPORT Ret name( \ P11 p11 = getArgument(_p11); \ P12 p12 = getArgument(_p12); \ return makeResult(impl_##name(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12)); \ -} +} // MAKE_CJ_EXPORT(name, #Ret "|" #P0 "|" #P1 "|" #P2 "|" #P3 "|" #P4 "|" #P5 "|" #P6 "|" #P7 "|" #P8 "|" #P9 "|" #P10 "|" #P11 "|" #P12, 0) #define KOALA_INTEROP_14(name, Ret, P0, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13) \ @@ -833,3 +833,15 @@ KOALA_INTEROP_EXPORT void name(InteropTypeConverter::InteropType _p0, \ P2 p2 = getArgument(_p2); \ impl_##name(nullptr, p0, p1, p2); \ } + +#define KOALA_INTEROP_THROW(vmContext, object, ...) \ + do { \ + /* TODO: implement*/ assert(false); \ + return __VA_ARGS__; \ + } while (0) + +#define KOALA_INTEROP_THROW_STRING(vmContext, message, ...) \ + do { \ + /* TODO: implement*/ assert(false); \ + return __VA_ARGS__; \ + } while (0) diff --git a/interop/src/cpp/common-interop.cc b/interop/src/cpp/common-interop.cc index c52cb340fa45798505436b01921b5f27b2874b0d..834157fe02a9145ceeb74b86e289a7fc35836fe6 100644 --- a/interop/src/cpp/common-interop.cc +++ b/interop/src/cpp/common-interop.cc @@ -289,6 +289,7 @@ void* getImpl(const char* path, const char* name) { KInt impl_LoadVirtualMachine(KVMContext vmContext, KInt vmKind, const KStringPtr& appClassPath, const KStringPtr& nativeLibPath) { static LoadVirtualMachine_t impl = nullptr; if (!impl) impl = reinterpret_cast(getImpl(nativeLibPath.c_str(), "LoadVirtualMachine")); + if (!impl) KOALA_INTEROP_THROW_STRING(vmContext, "Cannot load VM", -1); return impl(vmKind, appClassPath.c_str(), nativeLibPath.c_str(), vmContext); } KOALA_INTEROP_CTX_3(LoadVirtualMachine, KInt, KInt, KStringPtr, KStringPtr) diff --git a/interop/src/cpp/ets/convertors-ets.h b/interop/src/cpp/ets/convertors-ets.h index 4083921f14ded7bae1ac6f6abac36390623f4d84..2c9eef1dff79b5899a508815087f5d991476a6b3 100644 --- a/interop/src/cpp/ets/convertors-ets.h +++ b/interop/src/cpp/ets/convertors-ets.h @@ -1259,4 +1259,18 @@ void getKoalaEtsNapiCallbackDispatcher(ets_class* clazz, ets_method* method); #define KOALA_INTEROP_CALL_VOID_INTS32(venv, id, argc, args) KOALA_INTEROP_CALL_VOID(venv, id, (argc) * sizeof(int32_t), args) #define KOALA_INTEROP_CALL_INT_INTS32(venv, id, argc, args) KOALA_INTEROP_CALL_INT(venv, id, (argc) * sizeof(int32_t), args) +#define KOALA_INTEROP_THROW(vmContext, object, ...) \ + do { \ + EtsEnv* env = reinterpret_cast(vmContext); \ + env->ThrowError(object); \ + return __VA_ARGS__; \ + } while (0) + +#define KOALA_INTEROP_THROW_STRING(vmContext, message, ...) \ + do { \ + EtsEnv* env = reinterpret_cast(vmContext); \ + const static ets_class errorClass = env->FindClass("std/core/Error"); \ + env->ThrowErrorNew(errorClass, message); \ + } while (0) + #endif // KOALA_ETS_NAPI diff --git a/interop/src/cpp/jni/convertors-jni.h b/interop/src/cpp/jni/convertors-jni.h index 83c3311d512dc9987cb8f59dabb6d3d62c82a186..a097a99bbc458218cde1b15fc493ff1d04b0cda3 100644 --- a/interop/src/cpp/jni/convertors-jni.h +++ b/interop/src/cpp/jni/convertors-jni.h @@ -1375,4 +1375,18 @@ void getKoalaJniCallbackDispatcher(jclass* clazz, jmethodID* method); #define KOALA_INTEROP_CALL_VOID_INTS32(venv, id, argc, args) KOALA_INTEROP_CALL_VOID(venv, id, (argc) * sizeof(int32_t), args) #define KOALA_INTEROP_CALL_INT_INTS32(venv, id, argc, args) KOALA_INTEROP_CALL_INT(venv, id, (argc) * sizeof(int32_t), args) +#define KOALA_INTEROP_THROW(vmContext, object, ...) \ + do { \ + JNIEnv* env = reinterpret_cast(vmContext); \ + env->Throw(object); \ + return __VA_ARGS__; \ + } while (0) + +#define KOALA_INTEROP_THROW_STRING(vmContext, message, ...) \ + do { \ + JNIEnv* env = reinterpret_cast(vmContext); \ + const static jclass errorClass = env->FindClass("java/lang/RuntimeException"); \ + env->ThrowNew(errorClass, message); \ + } while (0) + #endif // KOALA_JNI_CALL diff --git a/interop/src/cpp/jsc/convertors-jsc.h b/interop/src/cpp/jsc/convertors-jsc.h index ea04fb0128745192e995cbcd3762abf1cf889ca6..2e404131e7a3295d5384e04e5f95838aef5d62e0 100644 --- a/interop/src/cpp/jsc/convertors-jsc.h +++ b/interop/src/cpp/jsc/convertors-jsc.h @@ -682,3 +682,15 @@ void InitExports(JSGlobalContextRef globalContext); return makeVoid(ctx); \ } \ MAKE_JSC_EXPORT(name) + +#define KOALA_INTEROP_THROW(vmContext, object, ...) \ + do { \ + /* TODO: implement*/ assert(false); \ + return __VA_ARGS__; \ + } while (0) + +#define KOALA_INTEROP_THROW_STRING(vmContext, message, ...) \ + do { \ + assert(false); /* TODO: implement*/ \ + return __VA_ARGS__; \ + } while (0) diff --git a/interop/src/cpp/napi/convertors-napi.h b/interop/src/cpp/napi/convertors-napi.h index 9233f912fbe6f89fc695c4843a426915e3959ac8..8ea1cb64038d3807c46bfb7a27e3dec71016e27d 100644 --- a/interop/src/cpp/napi/convertors-napi.h +++ b/interop/src/cpp/napi/convertors-napi.h @@ -80,7 +80,7 @@ struct InteropTypeConverter { delete buffer; }, (void*)copy, - &result + &result ); if (status != napi_ok) { // do smth here @@ -124,6 +124,23 @@ struct InteropTypeConverter { } }; +#define KOALA_INTEROP_THROW(vmcontext, object, ...) \ + do { \ + napi_env env = (napi_env)vmcontext; \ + napi_handle_scope scope = nullptr; \ + napi_status status = napi_open_handle_scope(env, &scope); \ + napi_throw((napi_env)vmcontext, object); \ + napi_close_handle_scope(env, scope); \ + return __VA_ARGS__; \ + } while (0) + +#define KOALA_INTEROP_THROW_STRING(vmContext, message, ...) \ + do { \ + napi_value value; \ + napi_create_string_utf8((napi_env)vmContext, message, strlen(message), &value); \ + KOALA_INTEROP_THROW(vmContext, value, __VA_ARGS__); \ + } while (0) + #define NAPI_ASSERT_INDEX(info, index, result) \ do { \ if (static_cast(index) >= info.Length()) { \ diff --git a/interop/src/cpp/types/signatures.cc b/interop/src/cpp/types/signatures.cc index ae5134785d78bd551634ac6d22b4a7d68e7cf816..833149e54552c2c0cb4f88966a437a25d747ac54 100644 --- a/interop/src/cpp/types/signatures.cc +++ b/interop/src/cpp/types/signatures.cc @@ -35,6 +35,7 @@ KOALA_INTEROP_TYPEDEF(func, lang, "void", "V", "void") \ KOALA_INTEROP_TYPEDEF(func, lang, "KBoolean", "Z", "boolean") \ KOALA_INTEROP_TYPEDEF(func, lang, "OH_Boolean", "Z", "boolean") \ + KOALA_INTEROP_TYPEDEF(func, lang, "Ark_Boolean", "Z", "boolean") \ KOALA_INTEROP_TYPEDEF(func, lang, "int32_t", "I", "int") \ KOALA_INTEROP_TYPEDEF(func, lang, "uint32_t", "I", "int") \ KOALA_INTEROP_TYPEDEF(func, lang, "int", "I", "int") \ @@ -44,7 +45,6 @@ KOALA_INTEROP_TYPEDEF(func, lang, "OH_Int64", "J", "long") \ KOALA_INTEROP_TYPEDEF(func, lang, "Ark_Int32", "I", "int") \ KOALA_INTEROP_TYPEDEF(func, lang, "Ark_Int64", "J", "long") \ - KOALA_INTEROP_TYPEDEF(func, lang, "Ark_Boolean", "I", "int") \ KOALA_INTEROP_TYPEDEF(func, lang, "KNativePointer", "J", "long") \ KOALA_INTEROP_TYPEDEF(func, lang, "Ark_NativePointer", "J", "long") \ KOALA_INTEROP_TYPEDEF(func, lang, "OH_NativePointer", "J", "long") \