Skip to content

Commit

Permalink
Use Optional for Class methods
Browse files Browse the repository at this point in the history
  • Loading branch information
seven1m committed Feb 21, 2025
1 parent 658ebbd commit 38bec76
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 5 deletions.
2 changes: 1 addition & 1 deletion include/natalie/class_object.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ class ClassObject : public ModuleObject {

Type object_type() { return m_object_type; }

Value initialize(Env *, Value, Block *);
Value initialize(Env *, Optional<Value>, Block *);

bool is_singleton() const { return m_is_singleton; }
void set_is_singleton(bool is_singleton) { m_is_singleton = is_singleton; }
Expand Down
2 changes: 1 addition & 1 deletion lib/natalie/compiler/binding_gen.rb
Original file line number Diff line number Diff line change
Expand Up @@ -505,7 +505,7 @@ def generate_name
gen.binding('Binding', 'source_location', 'BindingObject', 'source_location', argc: 0, pass_env: false, pass_block: false, return_type: :Object)

gen.undefine_instance_method('Class', 'module_function')
gen.binding('Class', 'initialize', 'ClassObject', 'initialize', argc: 0..1, pass_env: true, pass_block: true, return_type: :Object, visibility: :private)
gen.binding('Class', 'initialize', 'ClassObject', 'initialize', argc: 0..1, pass_env: true, pass_block: true, return_type: :Object, visibility: :private, pass_null: false)
gen.binding('Class', 'superclass', 'ClassObject', 'superclass', argc: 0, pass_env: true, pass_block: false, return_type: :Object)
gen.binding('Class', 'singleton_class?', 'ClassObject', 'is_singleton', argc: 0, pass_env: false, pass_block: false, return_type: :bool)

Expand Down
5 changes: 2 additions & 3 deletions src/class_object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,10 @@

namespace Natalie {

Value ClassObject::initialize(Env *env, Value superclass, Block *block) {
Value ClassObject::initialize(Env *env, Optional<Value> superclass_arg, Block *block) {
if (m_is_initialized)
env->raise("TypeError", "already initialized class");
if (!superclass)
superclass = GlobalEnv::the()->Object();
auto superclass = superclass_arg.value_or(GlobalEnv::the()->Object());
if (!superclass.is_class())
env->raise("TypeError", "superclass must be an instance of Class (given an instance of {})", superclass.klass()->inspect_str());
superclass.as_class()->initialize_subclass(this, env, "", superclass.as_class()->object_type());
Expand Down

0 comments on commit 38bec76

Please sign in to comment.