Fix some of the Value initializations
This commit is contained in:
parent
7a6bdc8aad
commit
db91d830af
2 changed files with 7 additions and 7 deletions
|
@ -4,11 +4,11 @@
|
||||||
|
|
||||||
Syntax::Syntax(String filename, String modulename, Value expression) {}
|
Syntax::Syntax(String filename, String modulename, Value expression) {}
|
||||||
|
|
||||||
Value Syntax::get_value() {
|
Result<Value> Syntax::get_value(Arena& arena) {
|
||||||
return pod_to_value(_value->expression.get(&*_value));
|
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) {
|
switch (obj->header.tag) {
|
||||||
case Tag::Nil:
|
case Tag::Nil:
|
||||||
return Value();
|
return Value();
|
||||||
|
@ -32,7 +32,7 @@ Result<Value> syntax_unwrap(Arena& arena, Value& val) {
|
||||||
Syntax* syntax = val.to<Syntax>();
|
Syntax* syntax = val.to<Syntax>();
|
||||||
if (syntax == 0) return val.copy(arena);
|
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()); }
|
Result<Value> Nil::copy(Arena& arena) { return Value(Nil()); }
|
||||||
|
|
|
@ -141,7 +141,7 @@ class Syntax : public Object {
|
||||||
return Syntax(TRY(MkGcRoot(obj, arena)));
|
return Syntax(TRY(MkGcRoot(obj, arena)));
|
||||||
}
|
}
|
||||||
|
|
||||||
Value get_value();
|
Result<Value> get_value(Arena& arena);
|
||||||
|
|
||||||
virtual Result<Value> copy(Arena& arena) final;
|
virtual Result<Value> copy(Arena& arena) final;
|
||||||
|
|
||||||
|
@ -214,6 +214,8 @@ class Value {
|
||||||
new (buf) T(std::move(obj));
|
new (buf) T(std::move(obj));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Result<Value> create(Arena& arena, PodObject* obj);
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
bool is() {
|
bool is() {
|
||||||
return dynamic_cast<T*>((Object*)buf) != nullptr;
|
return dynamic_cast<T*>((Object*)buf) != nullptr;
|
||||||
|
@ -233,6 +235,4 @@ class Value {
|
||||||
uint8_t buf[24];
|
uint8_t buf[24];
|
||||||
};
|
};
|
||||||
|
|
||||||
Value pod_to_value(PodObject* obj);
|
|
||||||
|
|
||||||
Result<Value> syntax_unwrap(Value& val);
|
Result<Value> syntax_unwrap(Value& val);
|
||||||
|
|
Loading…
Reference in a new issue