summaryrefslogtreecommitdiff
path: root/core/ops_builtin.rs
diff options
context:
space:
mode:
authorAaron O'Mullan <aaron.omullan@gmail.com>2021-05-03 01:30:03 +0200
committerGitHub <noreply@github.com>2021-05-02 19:30:03 -0400
commitea917384feb1c800438d13dddac9ee977d2c47fe (patch)
treee3d5069ac4f96713c98519853cfe25e93c32f883 /core/ops_builtin.rs
parentc9ac851b9005e5a1e90016e52b3a10dd1f1012b7 (diff)
refactor(core): convert core.print() to a builtin op (#10436)
Diffstat (limited to 'core/ops_builtin.rs')
-rw-r--r--core/ops_builtin.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/core/ops_builtin.rs b/core/ops_builtin.rs
index 96aca5c53..546d9cf32 100644
--- a/core/ops_builtin.rs
+++ b/core/ops_builtin.rs
@@ -7,6 +7,7 @@ use crate::resources::ResourceId;
use crate::Extension;
use crate::OpState;
use crate::ZeroCopyBuf;
+use std::io::{stdout, Write};
pub(crate) fn init_builtins() -> Extension {
Extension::builder()
@@ -17,6 +18,7 @@ pub(crate) fn init_builtins() -> Extension {
))
.ops(vec![
("op_close", op_sync(op_close)),
+ ("op_print", op_sync(op_print)),
("op_resources", op_sync(op_resources)),
])
.build()
@@ -52,3 +54,20 @@ pub fn op_close(
Ok(())
}
+
+/// Builtin utility to print to stdout/stderr
+pub fn op_print(
+ _state: &mut OpState,
+ args: (String, bool),
+ _zero_copy: Option<ZeroCopyBuf>,
+) -> Result<(), AnyError> {
+ let (msg, is_err) = args;
+ if is_err {
+ eprint!("{}", msg);
+ stdout().flush().unwrap();
+ } else {
+ print!("{}", msg);
+ stdout().flush().unwrap();
+ }
+ Ok(())
+}