Инструменты пользователя

Инструменты сайта


bug_ref_fn

Это старая версия документа!


Эта страница посвящена поиску бага связанного с вызовом функции init в произвольном модуле из модуля, в котором используются ссылки на функции.

implement Sh93; include «sys.m»; sys: Sys; include «draw.m»; Sh93: module { init: fn(ctxt: ref Draw→Context, argv: list of string); }; SomeT: adt { f: ref fn(); }; empty() { sys→print(«empty\n»); } init(ctxt: ref Draw→Context, argv: list of string) { sys = load Sys Sys→PATH; if (0) { st:= ref SomeT; st.f = empty; st.f(); } file := «echo.dis»; args : list of string; args = «\»test\«» :: args; args = «echo» :: args; c := load Sh93 file; if(c == nil) { err := sys→sprint(«%r»); if(err != «permission denied» && err != «access permission denied» && file[0]!='/' && file[0:2]!=«./»){ c = load Sh93 «/dis/»+file; if(c == nil) { err = sys→sprint(«%r»); } } if(c == nil) { sys→print(«%s: %s\n», «echo», err); return; } } c→init(ctxt, args); if (0) { st:= ref SomeT; st.f = empty; st.f(); } }

bug_ref_fn.1765682916.txt.gz · Последнее изменение: snegovick