From 59cc212ebe00245200e5a2d9f2393fbd1ddb4e94 Mon Sep 17 00:00:00 2001 From: jaortega Date: Sat, 10 Mar 2001 02:30:09 +0000 Subject: format fixings --- mixlib/mix_vm.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'mixlib/mix_vm.c') diff --git a/mixlib/mix_vm.c b/mixlib/mix_vm.c index 6da21e2..0a885d8 100644 --- a/mixlib/mix_vm.c +++ b/mixlib/mix_vm.c @@ -343,6 +343,39 @@ mix_vm_get_address_lineno (const mix_vm_t *vm, mix_address_t addr) return lineno; } +/* Get the address for a given source line number */ +typedef struct +{ + guint lineno; + mix_address_t result; +} addr_traverse_t; + +static gint +get_address_ (gpointer key, gpointer value, gpointer data) +{ + addr_traverse_t *tr = (addr_traverse_t *)data; + if (GPOINTER_TO_UINT (key) == tr->lineno) + { + tr->result = mix_short_new (GPOINTER_TO_UINT (value)); + return TRUE; + } + return (GPOINTER_TO_UINT (key) < tr->lineno)? FALSE:TRUE; +} + +mix_address_t +mix_vm_get_lineno_address (const mix_vm_t *vm, guint lineno) +{ + addr_traverse_t tr; + + g_return_val_if_fail (vm != NULL, MIX_VM_CELL_NO); + if (!vm->line_table) return MIX_VM_CELL_NO; + tr.lineno = lineno; + tr.result = MIX_VM_CELL_NO; + g_tree_traverse (vm->line_table, get_address_, G_IN_ORDER, (gpointer)&tr); + return tr.result; +} + + /* Reposition program counter and reset state so that a loaded program can be restarted. */ -- cgit v1.2.3