toCString property
String?
get
toCString
reference quickjs.h 705 JS_ToCString static inline const Utf8NullTerminated *JS_ToCString(JSContext *ctx, JSValueConst val1) { return JS_ToCStringLen2(ctx, NULL, val1, 0); } 对应 JS_FreeCString, release 请调用 freeCStringPairPtr 释放 _cstrMap 缓存的 native 指针
Implementation
String? get toCString {
if (isException || isError) {
Console.error('[toCString] dumpError: ${dumpError()}');
return null;
}
// console('[toCString] tag ${_ref.ref.tag}');
// cesu8: 1 代表 non-BMP1 codepoints 2 代表 utf-8 序列
final cstr = JS_ToCStringLen2(_ctx.ref, nullptr, _ref.ref, 1);
if (cstr == nullptr) {
// FIXME: Shell: Assertion failed: (p->ref_count == 0), function free_zero_refcount, file quickjs.c, line 5454.
Console.error('[toCString] JS_ToCStringLen2 == nullptr, ${_ref.ref.tag}');
return null;
}
// exception occurred!
try {
final ptr = cstr.cast<Utf8>();
final str = ptr.toDartString();
_cstrMap[str] = ptr;
return str;
} catch (e, st) {
_ctx.cleanException();
Console.error(
'[toCString] error occurred! ${e.toString()}, ${st.toString()}',
);
_ctx.cleanException();
return null;
}
}