Subject: Re: catch() / evalcost From: Michael Sporn <sporn@mathematik.hu-berlin.de> Date: Fri, 12 Mar 1999 16:56:55 +0100 (MET) Type: Feature State: Unclassified Hmm, netter Ausdruck, ich hab noch mal ueber die Sache nachgedacht und gemerkt, dass meine Aeusserungen auch nich so ganz astrein waren ;). Selbst bei unsigned is naemlich a+x-x==a, egal, wie gross x is. Das heisst, das Problem kam daher, dass der interpreter ohne assign_eval_cost() zu einem anderen objekt gewechselt is. Ich bin mal die instructions durchgegangen und fand, dass das bei apply() und funcall() auf closures anderer objekte passiert. In den mapping-iterier-funktionen wird die eval_cost wohl auch ignoriert (dann in call_lambda() bzw. apply()). Und das alles fiel mir schon nach oberflaechlicher Suche auf. Um vergessene assign_eval_cost()'s zu vermeiden, waere wahrscheinlich eine zentrale routine der Art switch_to_object(ob) optimal (also current_object ueberall readonly), aber man koennte die eval_cost vielleicht auch generell in push_control_stack() zuweisen. Waehrend des catch() sollte die assigned_eval_cost aber trotzdem hochgesetzt werden (is einfach logischer).