Add console.log, avoid printing undefined result

This commit is contained in:
Andrew Morris
2023-08-22 09:29:11 +10:00
parent 12382a6573
commit 2f9eee0a2b
4 changed files with 60 additions and 1 deletions

View File

@@ -0,0 +1,52 @@
use std::fmt;
use std::rc::Rc;
use crate::native_function::{native_fn, NativeFunction};
use crate::vs_class::VsClass;
use crate::vs_value::{LoadFunctionResult, ToVal, Val};
use super::builtin_object::BuiltinObject;
pub struct ConsoleBuiltin {}
impl BuiltinObject for ConsoleBuiltin {
fn bo_name() -> &'static str {
"console"
}
fn bo_sub(key: &str) -> Val {
match key {
"log" => LOG.to_val(),
_ => Val::Undefined,
}
}
fn bo_load_function() -> LoadFunctionResult {
LoadFunctionResult::NotAFunction
}
fn bo_as_class_data() -> Option<Rc<VsClass>> {
None
}
}
impl fmt::Display for ConsoleBuiltin {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "[object console]")
}
}
static LOG: NativeFunction = native_fn(|_this, params| {
for (i, p) in params.iter().enumerate() {
if i > 0 {
print!(" ");
}
print!("{}", p);
}
println!();
Ok(Val::Undefined)
});

View File

@@ -2,6 +2,7 @@ mod array_builtin;
mod bigint_builtin;
mod boolean_builtin;
mod builtin_object;
mod console_builtin;
mod debug_builtin;
pub mod error_builtin;
pub mod internal_error_builtin;
@@ -21,7 +22,7 @@ use crate::{
use self::{
array_builtin::ArrayBuiltin, bigint_builtin::BigIntBuiltin, boolean_builtin::BooleanBuiltin,
debug_builtin::DebugBuiltin, error_builtin::ErrorBuiltin,
console_builtin::ConsoleBuiltin, debug_builtin::DebugBuiltin, error_builtin::ErrorBuiltin,
internal_error_builtin::InternalErrorBuiltin, math_builtin::MathBuiltin,
number_builtin::NumberBuiltin, range_error_builtin::RangeErrorBuiltin,
string_builtin::StringBuiltin, symbol_builtin::SymbolBuiltin,
@@ -46,4 +47,5 @@ pub static BUILTIN_VALS: [fn() -> Val; BUILTIN_COUNT] = [
|| SymbolBuiltin {}.to_val(),
|| VsSymbol::ITERATOR.to_val(),
|| BigIntBuiltin {}.to_val(),
|| ConsoleBuiltin {}.to_val(),
];