MoonBit bindings for the QuickJS JavaScript engine.
Dependencies
test {
let runtime = Runtime::new()
let context = runtime.new_context()
let result = context.eval("1 + 2")
guard !result.is_exception() else {
let message = context.exception_message()
result.destroy()
fail(message)
}
inspect(result.to_int32(context), content="3")
result.destroy()
context.destroy()
runtime.destroy()
}#external
pub type Contexttest {
let runtime = Runtime::new()
let context = Context::new(runtime)
let value = context.eval("'moon' + 'bit'")
inspect(value.to_string_lossy(context), content="moonbit")
value.destroy()
context.destroy()
runtime.destroy()
}test {
let runtime = Runtime::new()
let context = runtime.new_context()
let value = context.eval("40 + 2")
inspect(value.to_int32(context), content="42")
value.destroy()
context.destroy()
runtime.destroy()
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let failed = context.eval("throw new Error('boom')")
inspect(failed.is_exception(), content="true")
failed.destroy()
inspect(context.exception_message(), content="Error: boom")
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let failed = context.eval("throw new Error('boom')")
inspect(failed.is_exception(), content="true")
failed.destroy()
let exception = context.get_exception()
defer exception.destroy()
inspect(exception.to_string_lossy(context), content="Error: boom")
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let global = context.global_object()
defer global.destroy()
let answer = context.new_int32(42)
defer answer.destroy()
ignore(global.set_property(context, "answer", answer))
let result = context.eval("answer + 1")
defer result.destroy()
inspect(result.to_int32(context), content="43")
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let array = context.new_array()
defer array.destroy()
let first = context.new_string("moon")
defer first.destroy()
let second = context.new_int32(2)
defer second.destroy()
ignore(array.set_index(context, 0, first))
ignore(array.set_index(context, 1, second))
let json = context.json_stringify(array)
defer json.destroy()
inspect(json.to_string_lossy(context), content="[\"moon\",2]")
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let parsed = context.parse_json("{\"name\":\"moonbit\",\"items\":[1,2,3]}")
defer parsed.destroy()
let name = parsed.get_property(context, "name")
defer name.destroy()
inspect(name.to_string_lossy(context), content="moonbit")
let items = parsed.get_property(context, "items")
defer items.destroy()
let third = items.get_index(context, 2)
defer third.destroy()
inspect(third.to_int32(context), content="3")
}#external
pub type Runtimetest {
let runtime = Runtime::new()
let context = runtime.new_context()
let result = context.eval("1 + 2")
inspect(result.to_int32(context), content="3")
result.destroy()
context.destroy()
runtime.destroy()
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let setup = context.eval(
"globalThis.pending = 0; Promise.resolve(41).then(v => { globalThis.pending = v + 1; });",
)
defer setup.destroy()
while runtime.is_job_pending() {
ignore(runtime.execute_pending_job())
}
let result = context.eval("pending")
defer result.destroy()
inspect(result.to_int32(context), content="42")
}#external
pub type Valuetest {
let runtime = Runtime::new()
let context = runtime.new_context()
let value = context.new_bool(true)
inspect(value.to_bool(context), content="true")
value.destroy()
context.destroy()
runtime.destroy()
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let array = context.new_array()
defer array.destroy()
let first = context.new_string("moon")
defer first.destroy()
ignore(array.set_index(context, 0, first))
let read_back = array.get_index(context, 0)
defer read_back.destroy()
inspect(read_back.to_string_lossy(context), content="moon")
}test {
let runtime = Runtime::new()
defer runtime.destroy()
let context = runtime.new_context()
defer context.destroy()
let object = context.new_object()
defer object.destroy()
let answer = context.new_int32(42)
defer answer.destroy()
ignore(object.set_property(context, "answer", answer))
let read_back = object.get_property(context, "answer")
defer read_back.destroy()
inspect(read_back.to_int32(context), content="42")
}let eval_flag_async : Intlet eval_flag_backtrace_barrier : Intlet eval_flag_compile_only : Intlet eval_flag_strict : Intlet eval_type_direct : Intlet eval_type_global : Intlet eval_type_indirect : Intlet eval_type_module : IntMoonBit bindings for the QuickJS JavaScript engine.
Dependencies