Skip to content

Commit

Permalink
Add console.log, avoid printing undefined result
Browse files Browse the repository at this point in the history
  • Loading branch information
voltrevo committed Aug 21, 2023
1 parent 12382a6 commit 2f9eee0
Show file tree
Hide file tree
Showing 4 changed files with 60 additions and 1 deletion.
4 changes: 4 additions & 0 deletions valuescript_common/src/builtins.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ pub enum BuiltinName {
SymbolIterator,

BigInt,

#[allow(non_camel_case_types)]
console,
}

pub const BUILTIN_NAMES: [&str; BuiltinName::COUNT] = [
Expand All @@ -51,6 +54,7 @@ pub const BUILTIN_NAMES: [&str; BuiltinName::COUNT] = [
"Symbol",
"SymbolIterator",
"BigInt",
"console",
];

pub const BUILTIN_COUNT: usize = BuiltinName::COUNT;
Expand Down
52 changes: 52 additions & 0 deletions valuescript_vm/src/builtins/console_builtin.rs
Original file line number Diff line number Diff line change
@@ -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)
});
4 changes: 3 additions & 1 deletion valuescript_vm/src/builtins/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand All @@ -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(),
];
1 change: 1 addition & 0 deletions vstc/src/run_command.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ pub fn run_command(args: &Vec<String>) {
.collect();

match vm.run(bytecode, None, &val_args) {
Ok(Val::Undefined) => {},
Ok(result) => {
println!("{}", result.pretty());
}
Expand Down

0 comments on commit 2f9eee0

Please sign in to comment.