X-Git-Url: https://code.kerkeslager.com/?p=fur;a=blobdiff_plain;f=templates%2Fprogram.c;fp=templates%2Fprogram.c;h=25f9acbf4820f7b3b392c458751460668033dff5;hp=b25f7dcc59d358e8eda122b92f0b031631286900;hb=76ffe5adf4f6497945684e700dec15c809897d77;hpb=b47a0017d1dbfda8e8bae7989fff9ccb31897a28 diff --git a/templates/program.c b/templates/program.c index b25f7dc..25f9acb 100644 --- a/templates/program.c +++ b/templates/program.c @@ -333,6 +333,22 @@ void Object_deinitialize(Object* self) } } +typedef uint32_t StackSnapshot; + +StackSnapshot Stack_takeSnapshot(Stack* self) +{ + return (StackSnapshot) self->length; +} + +void Stack_rewind(Stack* self, StackSnapshot snapshot) +{ + while(self->length > snapshot) + { + Object item = Stack_pop(self); + Object_deinitialize(&item); + } +} + void Environment_deinitialize(Environment* self) { EnvironmentNode* next;