summaryrefslogtreecommitdiff
path: root/hieroglyph/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'hieroglyph/vm.c')
-rw-r--r--hieroglyph/vm.c38
1 files changed, 27 insertions, 11 deletions
diff --git a/hieroglyph/vm.c b/hieroglyph/vm.c
index 1d86abb..cd4a776 100644
--- a/hieroglyph/vm.c
+++ b/hieroglyph/vm.c
@@ -37,12 +37,12 @@
typedef struct hg_vm_private_s hg_vm_private_t;
struct hg_vm_private_s {
- hg_vm_t instance;
- hg_error_t error;
- hg_emulation_type_t current_level;
- hg_object_t *io[HG_FILE_TYPE_END];
- hg_stack_t *stack[HG_STACK_TYPE_END];
- hg_object_t *dict;
+ hg_vm_t instance;
+ hg_error_t error;
+ hg_emulationtype_t current_level;
+ hg_object_t *io[HG_FILE_TYPE_END];
+ hg_stack_t *stack[HG_STACK_TYPE_END];
+ hg_object_t *dict;
};
@@ -277,7 +277,7 @@ hg_vm_t *
hg_vm_new(void)
{
hg_vm_private_t *retval = g_new0(hg_vm_private_t, 1);
- hg_stack_type_t i;
+ hg_stacktype_t i;
/* initialize VM */
retval->current_level = HG_EMU_BEGIN;
@@ -308,9 +308,25 @@ hg_vm_new(void)
void
hg_vm_destroy(hg_vm_t *vm)
{
+ hg_vm_private_t *priv;
+ hg_filetype_t i;
+ hg_stacktype_t j;
+
hg_return_if_fail (vm != NULL);
- /* XXX */
+ priv = (hg_vm_private_t *)vm;
+
+ for (i = 0; i < HG_FILE_TYPE_END; i++) {
+ if (priv->io[i])
+ hg_object_free(vm, priv->io[i]);
+ }
+ for (j = 0; j < HG_STACK_TYPE_END; j++) {
+ if (priv->stack[j])
+ hg_stack_free(vm, priv->stack[j]);
+ }
+ if (priv->dict)
+ hg_object_free(vm, priv->dict);
+
g_free(vm);
}
@@ -482,7 +498,7 @@ hg_vm_finalize(hg_vm_t *vm)
return TRUE;
}
-hg_emulation_type_t
+hg_emulationtype_t
hg_vm_get_emulation_level(hg_vm_t *vm)
{
hg_vm_private_t *priv;
@@ -495,8 +511,8 @@ hg_vm_get_emulation_level(hg_vm_t *vm)
}
gboolean
-hg_vm_set_emulation_level(hg_vm_t *vm,
- hg_emulation_type_t level)
+hg_vm_set_emulation_level(hg_vm_t *vm,
+ hg_emulationtype_t level)
{
hg_vm_private_t *priv;