From 702506d315fda1d13cf84f14c90e30101d04e9fe Mon Sep 17 00:00:00 2001 From: Andrew Morris Date: Mon, 29 May 2023 14:46:24 +1000 Subject: [PATCH] Simplify builtins --- valuescript_vm/src/builtins/array_builtin.rs | 2 - .../src/builtins/boolean_builtin.rs | 2 - valuescript_vm/src/builtins/debug_builtin.rs | 2 - valuescript_vm/src/builtins/error_builtin.rs | 2 - valuescript_vm/src/builtins/math_builtin.rs | 2 - valuescript_vm/src/builtins/mod.rs | 39 +++++++++++-------- valuescript_vm/src/builtins/number_builtin.rs | 2 - .../src/builtins/range_error_builtin.rs | 2 - valuescript_vm/src/builtins/string_builtin.rs | 2 - valuescript_vm/src/builtins/symbol_builtin.rs | 2 - .../src/builtins/type_error_builtin.rs | 2 - valuescript_vm/src/bytecode_decoder.rs | 2 +- 12 files changed, 24 insertions(+), 37 deletions(-) diff --git a/valuescript_vm/src/builtins/array_builtin.rs b/valuescript_vm/src/builtins/array_builtin.rs index 0ad2367..db34061 100644 --- a/valuescript_vm/src/builtins/array_builtin.rs +++ b/valuescript_vm/src/builtins/array_builtin.rs @@ -15,8 +15,6 @@ use super::{ pub struct ArrayBuiltin {} -pub static ARRAY_BUILTIN: ArrayBuiltin = ArrayBuiltin {}; - impl BuiltinObject for ArrayBuiltin { fn bo_name() -> &'static str { "Array" diff --git a/valuescript_vm/src/builtins/boolean_builtin.rs b/valuescript_vm/src/builtins/boolean_builtin.rs index d6d1eba..87f725a 100644 --- a/valuescript_vm/src/builtins/boolean_builtin.rs +++ b/valuescript_vm/src/builtins/boolean_builtin.rs @@ -11,8 +11,6 @@ use super::builtin_object::BuiltinObject; pub struct BooleanBuiltin {} -pub static BOOLEAN_BUILTIN: BooleanBuiltin = BooleanBuiltin {}; - impl BuiltinObject for BooleanBuiltin { fn bo_name() -> &'static str { "Boolean" diff --git a/valuescript_vm/src/builtins/debug_builtin.rs b/valuescript_vm/src/builtins/debug_builtin.rs index 30e15a7..ba8b3c1 100644 --- a/valuescript_vm/src/builtins/debug_builtin.rs +++ b/valuescript_vm/src/builtins/debug_builtin.rs @@ -9,8 +9,6 @@ use super::builtin_object::BuiltinObject; pub struct DebugBuiltin {} -pub static DEBUG_BUILTIN: DebugBuiltin = DebugBuiltin {}; - impl BuiltinObject for DebugBuiltin { fn bo_name() -> &'static str { "Debug" diff --git a/valuescript_vm/src/builtins/error_builtin.rs b/valuescript_vm/src/builtins/error_builtin.rs index a54e770..23c1739 100644 --- a/valuescript_vm/src/builtins/error_builtin.rs +++ b/valuescript_vm/src/builtins/error_builtin.rs @@ -16,8 +16,6 @@ use super::builtin_object::BuiltinObject; pub struct ErrorBuiltin {} -pub static ERROR_BUILTIN: ErrorBuiltin = ErrorBuiltin {}; - impl BuiltinObject for ErrorBuiltin { fn bo_name() -> &'static str { "Error" diff --git a/valuescript_vm/src/builtins/math_builtin.rs b/valuescript_vm/src/builtins/math_builtin.rs index 01376fd..43eb6a2 100644 --- a/valuescript_vm/src/builtins/math_builtin.rs +++ b/valuescript_vm/src/builtins/math_builtin.rs @@ -10,8 +10,6 @@ use super::builtin_object::BuiltinObject; pub struct MathBuiltin {} -pub static MATH_BUILTIN: MathBuiltin = MathBuiltin {}; - impl BuiltinObject for MathBuiltin { fn bo_name() -> &'static str { "Math" diff --git a/valuescript_vm/src/builtins/mod.rs b/valuescript_vm/src/builtins/mod.rs index 22ab1c2..b9e2e32 100644 --- a/valuescript_vm/src/builtins/mod.rs +++ b/valuescript_vm/src/builtins/mod.rs @@ -12,21 +12,28 @@ pub mod type_error_builtin; use valuescript_common::BUILTIN_COUNT; -use crate::ValTrait; +use crate::vs_value::{ToVal, Val}; -pub static BUILTIN_VALS: [&'static (dyn ValTrait + Sync); BUILTIN_COUNT] = [ - &debug_builtin::DEBUG_BUILTIN, - &math_builtin::MATH_BUILTIN, - &string_builtin::STRING_BUILTIN, - &number_builtin::NUMBER_BUILTIN, - &boolean_builtin::BOOLEAN_BUILTIN, - &array_builtin::ARRAY_BUILTIN, - &number_builtin::IS_FINITE, - &number_builtin::IS_NAN, - &number_builtin::PARSE_FLOAT, - &number_builtin::PARSE_INT, - &error_builtin::ERROR_BUILTIN, - &type_error_builtin::TYPE_ERROR_BUILTIN, - &range_error_builtin::RANGE_ERROR_BUILTIN, - &symbol_builtin::SYMBOL_BUILTIN, +use self::{ + array_builtin::ArrayBuiltin, boolean_builtin::BooleanBuiltin, debug_builtin::DebugBuiltin, + error_builtin::ErrorBuiltin, math_builtin::MathBuiltin, number_builtin::NumberBuiltin, + range_error_builtin::RangeErrorBuiltin, string_builtin::StringBuiltin, + symbol_builtin::SymbolBuiltin, type_error_builtin::TypeErrorBuiltin, +}; + +pub static BUILTIN_VALS: [fn() -> Val; BUILTIN_COUNT] = [ + || DebugBuiltin {}.to_val(), + || MathBuiltin {}.to_val(), + || StringBuiltin {}.to_val(), + || NumberBuiltin {}.to_val(), + || BooleanBuiltin {}.to_val(), + || ArrayBuiltin {}.to_val(), + || number_builtin::IS_FINITE.to_val(), + || number_builtin::IS_NAN.to_val(), + || number_builtin::PARSE_FLOAT.to_val(), + || number_builtin::PARSE_INT.to_val(), + || ErrorBuiltin {}.to_val(), + || TypeErrorBuiltin {}.to_val(), + || RangeErrorBuiltin {}.to_val(), + || SymbolBuiltin {}.to_val(), ]; diff --git a/valuescript_vm/src/builtins/number_builtin.rs b/valuescript_vm/src/builtins/number_builtin.rs index 9797dc4..e15588f 100644 --- a/valuescript_vm/src/builtins/number_builtin.rs +++ b/valuescript_vm/src/builtins/number_builtin.rs @@ -14,8 +14,6 @@ use super::builtin_object::BuiltinObject; pub struct NumberBuiltin {} -pub static NUMBER_BUILTIN: NumberBuiltin = NumberBuiltin {}; - impl BuiltinObject for NumberBuiltin { fn bo_name() -> &'static str { "Number" diff --git a/valuescript_vm/src/builtins/range_error_builtin.rs b/valuescript_vm/src/builtins/range_error_builtin.rs index 240ee42..dd1f042 100644 --- a/valuescript_vm/src/builtins/range_error_builtin.rs +++ b/valuescript_vm/src/builtins/range_error_builtin.rs @@ -15,8 +15,6 @@ use super::builtin_object::BuiltinObject; pub struct RangeErrorBuiltin {} -pub static RANGE_ERROR_BUILTIN: RangeErrorBuiltin = RangeErrorBuiltin {}; - impl BuiltinObject for RangeErrorBuiltin { fn bo_name() -> &'static str { "RangeError" diff --git a/valuescript_vm/src/builtins/string_builtin.rs b/valuescript_vm/src/builtins/string_builtin.rs index c927a50..5b5f30f 100644 --- a/valuescript_vm/src/builtins/string_builtin.rs +++ b/valuescript_vm/src/builtins/string_builtin.rs @@ -15,8 +15,6 @@ use super::range_error_builtin::ToRangeError; pub struct StringBuiltin {} -pub static STRING_BUILTIN: StringBuiltin = StringBuiltin {}; - impl BuiltinObject for StringBuiltin { fn bo_name() -> &'static str { "String" diff --git a/valuescript_vm/src/builtins/symbol_builtin.rs b/valuescript_vm/src/builtins/symbol_builtin.rs index a5c9789..a730e4a 100644 --- a/valuescript_vm/src/builtins/symbol_builtin.rs +++ b/valuescript_vm/src/builtins/symbol_builtin.rs @@ -10,8 +10,6 @@ use super::builtin_object::BuiltinObject; pub struct SymbolBuiltin {} -pub static SYMBOL_BUILTIN: SymbolBuiltin = SymbolBuiltin {}; - impl BuiltinObject for SymbolBuiltin { fn bo_name() -> &'static str { "Symbol" diff --git a/valuescript_vm/src/builtins/type_error_builtin.rs b/valuescript_vm/src/builtins/type_error_builtin.rs index ec3c4c1..7551402 100644 --- a/valuescript_vm/src/builtins/type_error_builtin.rs +++ b/valuescript_vm/src/builtins/type_error_builtin.rs @@ -15,8 +15,6 @@ use super::builtin_object::BuiltinObject; pub struct TypeErrorBuiltin {} -pub static TYPE_ERROR_BUILTIN: TypeErrorBuiltin = TypeErrorBuiltin {}; - impl BuiltinObject for TypeErrorBuiltin { fn bo_name() -> &'static str { "TypeError" diff --git a/valuescript_vm/src/bytecode_decoder.rs b/valuescript_vm/src/bytecode_decoder.rs index 21ff02e..208b435 100644 --- a/valuescript_vm/src/bytecode_decoder.rs +++ b/valuescript_vm/src/bytecode_decoder.rs @@ -143,7 +143,7 @@ impl BytecodeDecoder { Val::Void => Val::Undefined, val => val, }, - BytecodeType::Builtin => Val::Static(BUILTIN_VALS[self.decode_varsize_uint()]), + BytecodeType::Builtin => BUILTIN_VALS[self.decode_varsize_uint()](), BytecodeType::Class => VsClass { constructor: self.decode_val(registers), instance_prototype: self.decode_val(registers),