Ejemplo n.º 1
0
void test_two_level_stack(void)
{
	names_stack *stack;
	unsigned int check_num;

	check_num = 0;
	stack = stack_new();

	stack_enter(stack);

	check_depth(check_num++, stack, "foo", 0);
	check_depth(check_num++, stack, "bar", 0);
	check_depth(check_num++, stack, "baz", 0);
	check_unsigned_int(stack_frame_size(stack), 0);

	stack_name_add(stack, "foo");
	stack_name_add(stack, "bar");

	check_depth(check_num++, stack, "foo", 1);
	check_depth(check_num++, stack, "bar", 2);
	check_depth(check_num++, stack, "baz", 0);
	check_unsigned_ints(stack_frame_size(stack), 2, "1");

	stack_enter(stack);
	check_unsigned_ints(stack_frame_size(stack), 0, "2");
	stack_name_add(stack, "baz");
	check_unsigned_ints(stack_frame_size(stack), 1, "3");
	stack_name_add(stack, "foo");
	check_unsigned_ints(stack_frame_size(stack), 2, "4");

	check_depth(check_num++, stack, "foo", 2);
	check_depth(check_num++, stack, "bar", 0);
	check_depth(check_num++, stack, "baz", 1);

	stack_leave(stack);
	check_unsigned_ints(stack_frame_size(stack), 2, "5");

	check_depth(check_num++, stack, "foo", 1);
	check_depth(check_num++, stack, "bar", 2);
	check_depth(check_num++, stack, "baz", 0);

	stack_leave(stack);
	check_unsigned_ints(stack_frame_size(stack), 0, "6");

	check_depth(check_num++, stack, "foo", 0);
	check_depth(check_num++, stack, "bar", 0);
	check_depth(check_num++, stack, "baz", 0);

	stack_destroy(stack);
}
Ejemplo n.º 2
0
void stack_destroy(names_stack *stack)
{
	while (stack->names_lists_c) {
		stack_leave(stack);
	}

	if (stack->names_lists_c > 0) {
		if (stack->names_lists[0]) {
			if (stack->names_lists[0]->names) {
				heap_free(stack->names_lists[0]->names);
			}
		}
		heap_free(stack->names_lists);
	}
	heap_free(stack);
}
Ejemplo n.º 3
0
ExceptionHolder* findHolder(int data) {
    while (currentFrame != NULL) {
        ExceptionHolder* holder = currentFrame -> exception;
        if (holder != NULL) {
            int i = 0;

            for (i = 0; i < holder -> size; i++) {
                if ((holder -> exceptions)[i] == data || (holder -> exceptions)[i] == -1) {
                    return holder;
                }
            }
        }
        if (currentFrame -> prev == NULL) {
            printf("An error occured.");
            return NULL;
        } else {
            stack_leave();
        }
    }

    printf("Unhandled Exception.");
    return NULL;
}