From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=NO_REAL_NAME autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from discorde.inria.fr (discorde.inria.fr [192.93.2.38]) by yquem.inria.fr (Postfix) with ESMTP id 9F281BC0A for ; Mon, 11 Dec 2006 19:18:19 +0100 (CET) Received: from metis.sjsu.edu (metis.sjsu.edu [130.65.3.15]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id kBBIIIUI019948 for ; Mon, 11 Dec 2006 19:18:19 +0100 Received: from web-mail.sjsu.edu (web-mail.sjsu.edu [130.65.3.14]) by metis.sjsu.edu (8.12.10+Sun/8.13.1) with ESMTP id kBBIIGYa000438 for ; Mon, 11 Dec 2006 10:18:16 -0800 (PST) Received: (from apache@localhost) by web-mail.sjsu.edu (8.11.7+Sun/8.11.7) id kBBIIG418538 for caml-list@yquem.inria.fr; Mon, 11 Dec 2006 10:18:16 -0800 (PST) X-Authentication-Warning: web-mail.sjsu.edu: apache set sender to jhsu1@email.sjsu.edu using -f Received: from 69.226.204.30 ( [69.226.204.30]) as user jhsu1@imap.sjsu.edu/novalidate-cert by web-mail.sjsu.edu with HTTP; Mon, 11 Dec 2006 10:18:15 -0800 Message-ID: <1165861095.457da0e7d507f@web-mail.sjsu.edu> Date: Mon, 11 Dec 2006 10:18:15 -0800 From: jhsu1@email.sjsu.edu To: caml-list@yquem.inria.fr Subject: Hashtbl.find_all Stack overflow MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit User-Agent: Internet Messaging Program (IMP) 3.1 X-Originating-IP: 69.226.204.30 X-Miltered: at discorde with ID 457DA0EA.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; hashtbl:01 stack:01 stack:01 hashtbl:01 vars:01 tpl:01 iter:01 tpl:01 vars:01 iter:01 997:98 accu:02 accu:02 data:02 string:02 I get a stack overflow with the following
let var_lookup = Hashtbl.create 997;;

(* ... *)

let keys h = Hashtbl.fold (fun key data accu -> if not (List.mem key accu) then
key :: accu else accu) h [] in
	let files = keys var_lookup in
		let helper file = (let vars = Hashtbl.find_all var_lookup file in
		let run_tpl var = print_string var in
		List.iter run_tpl vars) in
		List.iter helper files;
Only when Hashtbl.find_all is executed enough times.