diff --git a/src/arena.cpp b/src/arena.cpp index 49ab0ca..6b6aff8 100644 --- a/src/arena.cpp +++ b/src/arena.cpp @@ -284,7 +284,7 @@ Result Arena::gc_continuation(PodContinuation* obj) { auto nobj = TRY(alloc()); nobj->header.tag = Tag::Error; - nobj->props = TRY(gc_pod(obj->props.get())); + nobj->value = TRY(gc_pod(obj->value.get())); nobj->frame = TRY(gc_pod(obj->frame.get())); return nobj; diff --git a/src/common.cpp b/src/common.cpp index e91190b..34fc173 100644 --- a/src/common.cpp +++ b/src/common.cpp @@ -500,6 +500,17 @@ Result Error::cmp(const Error& rhs) const { return res; } +Result Continuation::create(const Value& value, + const StackFrame& frame) { + auto pod = TRY(arena_alloc()); + pod->header.tag = Tag::Continuation; + + pod->value = value.pod(); + pod->frame = frame.pod(); + + return Continuation(TRY(MkGcRoot(pod))); +} + Result Continuation::copy_value() const { return Value(Continuation(TRY(_value.copy()))); } @@ -507,17 +518,17 @@ Result Continuation::copy() const { return Continuation(TRY(_value.copy())); } -Result Continuation::props() const { - return Value::create(_value->props.get()); +Result Continuation::value() const { + return Value::create(_value->value.get()); } Result Continuation::frame() const { return Value::create(_value->frame.get()); } Result Continuation::cmp(const Continuation& rhs) const { - auto lhs_props = TRY(props()); - auto rhs_props = TRY(rhs.props()); - short res = TRY(lhs_props.cmp(rhs_props)); + auto lhs_value = TRY(value()); + auto rhs_value = TRY(rhs.value()); + short res = TRY(lhs_value.cmp(rhs_value)); if (res != 0) return res; auto lhs_frame = TRY(frame()); diff --git a/src/common.hpp b/src/common.hpp index ea3c594..4631104 100644 --- a/src/common.hpp +++ b/src/common.hpp @@ -1235,18 +1235,10 @@ class Continuation : public Object { return Continuation(TRY(MkGcRoot(obj))); } - static Result create(const Dict& props, - const StackFrame& frame) { - auto pod = TRY(arena_alloc()); - pod->header.tag = Tag::Continuation; + static Result create(const Value& value, + const StackFrame& frame); - pod->props = props.pod(); - pod->frame = frame.pod(); - - return Continuation(TRY(MkGcRoot(pod))); - } - - Result props() const; + Result value() const; Result frame() const; virtual Result copy_value() const final; diff --git a/src/pod.hpp b/src/pod.hpp index 3e8d531..6a12e21 100644 --- a/src/pod.hpp +++ b/src/pod.hpp @@ -213,10 +213,10 @@ class PodError final : public PodObject { }; class PodContinuation final : public PodObject { -public: + public: PodContinuation() : PodObject(Tag::Continuation) {}; - OffPtr props; + OffPtr value; OffPtr frame; };