Fix some of the Value initializations

This commit is contained in:
Konstantin Nazarov 2024-07-26 20:20:13 +01:00
parent 7a6bdc8aad
commit db91d830af
Signed by: knazarov
GPG key ID: 4CFE0A42FA409C22
2 changed files with 7 additions and 7 deletions

View file

@ -4,11 +4,11 @@
Syntax::Syntax(String filename, String modulename, Value expression) {}
Value Syntax::get_value() {
return pod_to_value(_value->expression.get(&*_value));
Result<Value> Syntax::get_value(Arena& arena) {
return Value::create(arena, _value->expression.get(&*_value));
}
Result<Value> pod_to_value(PodObject* obj, Arena& arena) {
Result<Value> Value::create(Arena& arena, PodObject* obj) {
switch (obj->header.tag) {
case Tag::Nil:
return Value();
@ -32,7 +32,7 @@ Result<Value> syntax_unwrap(Arena& arena, Value& val) {
Syntax* syntax = val.to<Syntax>();
if (syntax == 0) return val.copy(arena);
return syntax->get_value();
return syntax->get_value(arena);
}
Result<Value> Nil::copy(Arena& arena) { return Value(Nil()); }

View file

@ -141,7 +141,7 @@ class Syntax : public Object {
return Syntax(TRY(MkGcRoot(obj, arena)));
}
Value get_value();
Result<Value> get_value(Arena& arena);
virtual Result<Value> copy(Arena& arena) final;
@ -214,6 +214,8 @@ class Value {
new (buf) T(std::move(obj));
}
static Result<Value> create(Arena& arena, PodObject* obj);
template <class T>
bool is() {
return dynamic_cast<T*>((Object*)buf) != nullptr;
@ -233,6 +235,4 @@ class Value {
uint8_t buf[24];
};
Value pod_to_value(PodObject* obj);
Result<Value> syntax_unwrap(Value& val);