% Table * % % module % 16 env3_16(_env,_l,_ts,_upvals):-_upvals=[_extract_type,_extract_type],((((true),(_l = [fc_Mutable(_f1)|[]],_ts = ['[|]'("Any",[])|['[|]'("Any",[])|[]]]);(_l = '[|]'(_f1,[]),_ts = '[|]'(_t,[]),call_cl(_extract_type,[_env,_f1,_t]);(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),get_(_env,"extract_types",T102),_T101 = T102,call_cl(_T101,[_env,_tail,_t2]);_l = [],_ts = []))))). % 15 env3_15(_env,_l,_ts,_upvals):-_upvals=[_extract_type,_extract_type],((((true),(_l = '[|]'(_f1,_tail),_ts = '[|]'(_t1,_t2),call_cl(_extract_type,[_env,_f1,_t1]),get_(_env,"extract_types",T99),_T98 = T99,call_cl(_T98,[_env,_tail,_t2]));_l = [],_ts = []))). % 14 env3_14(_env,_name,_f,_upvals):-_upvals=[_Env,_debug],(call_cl(_debug,['[|]'("prev",'[|]'(_a,'[|]'(_f,[])))]),get_(_env,"prev",T91),_prev = T91,get_(_prev,"vars",T92),_vars = T92,get_(_Env,"find",T94),_T93 = T94,call_cl(_T93,[_vars,_f,_])). % 13 env3_13(_env,_s,_t,_upvals):-_upvals=[],(get_(_env,_s,T89),_t = T89). % 12 env3_12(_l,_a,_upvals):-_upvals=[_debug],(call_cl(_debug,['[|]'("find",'[|]'(_a,[]))]),get_(_env,"find",T87),_T86 = T87,call_cl(_T86,[_l,_a,_])). % 11 env3_11(_l,_a,_f,_upvals):-_upvals=[_debug],(call_cl(_debug,['[|]'("find",'[|]'(_a,'[|]'(_f,[])))]),_a = fc_Var(_name,_,_),get_(_l,_name,T84),_a = T84). % 10 env3_10(_env,_f,_env2,_upvals):-_upvals=[_set,_list],(get_(_env,"vars",T80),_vars = T80,_f = fc_Var(_name,_,_),(((get_(_list,"has",T82),_T81 = T82,call_cl(_T81,[_vars,fc_Var(_name,_,_)])),(_env2 = _env);call_cl(_set,[_env,"vars",[_f|_vars],_env2])))). % 9 env3_9(_env,_env2,_f,_upvals):-_upvals=[],(get_(_env,"push_on",T78),_T77 = T78,call_cl(_T77,[_env,"vars",_f,_env2])). % 8 env3_8(_env,_str,_f,_env2,_upvals):-_upvals=[_get],(get_(_env,"set",T74),_T73 = T74,call_cl(_get,[_env,_str,_T75]),call_cl(_T73,[_env,_str,[_f|_T75],_env2])). % 7 env3_7(_env,_name,_tc,_env2,_upvals):-_upvals=[_Env,_debug,_Env,_debug,_debug,_list,_debug],(_f2 = fc_Var(_name,_n2,_tc),_f = fc_Var(_name,_n2,_t1),get_(_env,"vars",T65),_l = T65,call_cl(_debug,["\n-"]),((get_(_list,"has",T67),_T66 = T67,call_cl(_T66,[_l,_f]))->(call_cl(_debug,[_l]),(if_(_tc = _t1,(_env2 = _env),(call_cl(_debug,['[|]'("update",'[|]'(_name,'[|]'(_t1,'[|]'(_tc,[]))))]),get_(_Env,"push",T69),_T68 = T69,call_cl(_T68,[_env,_f2,_env2])))));(call_cl(_debug,['[|]'("-",'[|]'(_f,[]))]),(if_(_n2 = "in",(true),(true))),_tc = _t1,get_(_Env,"push",T71),_T70 = T71,call_cl(_T70,[_env,_f,_env2])))). % 6 env3_6(_env,_s,_x,_env2,_upvals):-_upvals=[_table],(get_(_table,"set",T63),_T62 = T63,call_cl(_T62,[_env,_s,_x,_env2])). % 5 env3_5(_env,_name,_val,_env2,_upvals):-_upvals=[_table],(get_(_env,"alias",T54),_t = T54,get_(_table,"set",T57),_T56 = T57,call_cl(_T56,[_t,_name,_val,_T55]),_t2 = _T55,get_(_env,"set",T60),_T59 = T60,call_cl(_T59,[_env,"alias",_t2,_T58]),_env2 = _T58). % 4 env3_4(_env,_f,_env2,_upvals):-_upvals=[_table,_table],(_f = fc_Var(_name,_,_),get_(_table,"get",T46),_T45 = T46,call_cl(_T45,[_env,"vars",_T44]),_t = _T44,get_(_table,"set",T49),_T48 = T49,call_cl(_T48,[_t,_name,_f,_T47]),_t2 = _T47,get_(_env,"set",T52),_T51 = T52,call_cl(_T51,[_env,"vars",_t2,_T50]),_env2 = _T50). % 3 env3_3(_env,_vars,_fcs,_consts,_prev,_upvals):-_upvals=[_table,_table],(((get_(_prev,"types",T28),T28 = _t)->(true);(get_(_table,"new",T30),_T29 = T30,call_cl(_T29,[_t]))),get_(_table,"new",T32),_T31 = T32,call_cl(_T31,[_nil]),new(T33),set_(T33,"vars",_nil,T35),set_(T35,"alias",_nil,T36),set_(T36,"fcs",_fcs,T37),set_(T37,"types",_t,T38),set_(T38,"consts",_consts,T39),set_(T39,"upvals",[],T40),set_(T40,"branch",0.0,T41),set_(T41,"top",[],T42),set_(T42,"prev",_prev,T34),_env = T34). % 2 env3_2(_env,_fcs,_prev,_upvals):-_upvals=[_concat,_Env,_Env],(get_(_Env,"init",T26),_T25 = T26,call_cl(_T25,[_env_vars,[],_fcs,[],_prev]),call_cl(_concat,[_env_vars,_Env,_env])). % find env3_find(_l,_a,_i,_upvals):-_upvals=[],(_a = fc_Var(_name,_,_),get_(_l,_name,T20),_a = T20). % extract_type env3_extract_type(_env,_f,_type,_upvals):-_upvals=[_debug,_debug,_to_table_type,_table,_extract_type_id],(((_f = fc_Num(_s))->(_type = '[|]'("Number",[]));((_f = fc_Str(_))->(_type = '[|]'("String",[]));((_f = fc_Id(_name,_t1))->(call_cl(_extract_type_id,[_env,_f,_type,_info]));((_f = fc_TTable(_args))->(_type = '[|]'("Table",_t2),get_(_table,"new",T17),_T16 = T17,call_cl(_T16,[_t]),call_cl(_to_table_type,[_env,_args,_t,_t2]),call_cl(_debug,['[|]'("type-dict",'[|]'(_f,'[|]'(_type,[])))]));((_f = fc_TTable(_,_))->(_type = '[|]'("Table",[]));((_f = fc_Rel(_,_,_))->(_type = '[|]'("Relation",[]));((_f = fc_Rel(_args,_))->(call_cl(_debug,[_f]),get_(_env,"extract_types",T19),_T18 = T19,call_cl(_T18,[_env,_args,_t]),_type = '[|]'("Relation",_t));((_f = fc_Op(_,_,_,_))->(_type = '[|]'("Math",[]));(_type = '[|]'("Any",[]))))))))))). % extract_type_id env3_extract_type_id(_env,_f,_type,_info,_upvals):-_upvals=[_is_functor,_custom_throw,_debug,_gettype,_has,_debug],(_f = fc_Id(_name,_t1),call_cl(_debug,['[|]'(_name,'[|]'(_t1,[]))]),((get_(_env,"vars",T15),call_cl(_has,[T15,fc_Var(_name,_,_t2)]))->(call_cl(_gettype,[_t1,_type1]),((_t2 = [])->(_type2 = '[|]'("Any",[]));(_type2 = _t2)),((_type2 = '[|]'("Any",[]))->(_type = _type1);((_type1 = '[|]'("Any",[]))->(call_cl(_debug,['[|]'("any",[])]),_type = _type2);((_type2 = _type1)->(_type = _type2);(writeln_('[|]'(_type2,'[|]'(_t1,[]))),call_cl(_custom_throw,["Variable defined with different types",_info]))))));((call_cl(_is_functor,[_name,_env]))->(_type = '[|]'("Functor",[]));((_name = "Cons")->(_type = '[|]'("List",[]));(def(_t1),((_t1 = [])->(_type = '[|]'("Any",[]));(_type = _t1))))))). % gettype env3_gettype(_t1,_type1,_upvals):-_upvals=[],((if_(_t1 = [],(_type1 = '[|]'("Any",[])),(if_(_t1 = '[|]'("NonAlias",[]),(_type1 = '[|]'("Any",[])),(_type1 = _t1)))))). % to_table_type env3_to_table_type(_env,_l,_t,_t2,_upvals):-_upvals=[_debug,_set,_extract_type,_remove_double_string,_debug,_debug],(call_cl(_debug,['[|]'("set;",'[|]'(_l,[]))]),((_l = fc_And(_a,_b))->(throw("-"));((_l = fc_And(_a,_b,_))->(call(env3_to_table_type(_env,_a,_t,_t0),_upvals),call(env3_to_table_type(_env,_b,_t0,_t2),_upvals));((_l = fc_Eq(_a,_b,_info))->(call_cl(_debug,['[|]'("set;",'[|]'(_sa,'[|]'(_tb,[])))]),((_a = fc_Id(_sa,_))->(true);((_a = fc_Str(_s1))->(call_cl(_remove_double_string,[_s1,_sa]));(_sa = ""))),call_cl(_extract_type,[_env,_b,_tb]),call_cl(_set,[_t,_sa,_tb,_t2]),call_cl(_debug,['[|]'(_sa,'[|]'(_tb,[]))]));((_l = fc_Rel(_name,_args,_f1))->(call(env3_to_table_type(_env,fc_Eq(fc_Id(_name,[]),fc_Rel(_args,_f1),_),_t,_t2),_upvals));((_l = _True)->(_t2 = _t);(_t2 = _t,get_(_io,"writeln",T14),_T13 = T14,call_cl(_T13,[_l]),throw("unknown table type")))))))). % remove_double_string env3_remove_double_string(_s1,_sa,_upvals):-_upvals=[_string,_string],(get_(_string,"slice",T9),_T8 = T9,get_(_string,"size",T12),_T11 = T12,call_cl(_T11,[_s1,_T10]),call_cl(_T8,[_s1,1.0,_T10-1.0,_sa])). % is_functor env3_is_functor(_name,_env,_upvals):-_upvals=[_list],(get_(_env,"fcs",T5),_fcs = T5,get_(_list,"find",T7),_T6 = T7,call_cl(_T6,[_fcs,fc_Var(_name,_n,_),_])). % has env3_has(_l,_a,_upvals):-_upvals=[],(_a = fc_Var(_name,_,_),get_(_l,_name,T4),_a = T4). % pause env3_pause(_upvals):-_upvals=[],(read(_x)). % debug env3_debug(_x,_upvals):-_upvals=[],(true). % custom_throw env3_custom_throw(_msg,_info,_upvals):-_upvals=[],(writeln_(_info),((ground(_info))->(_info = fc_Info(_line,_col),str("(line "+_line+", col "+_col+") "+_msg,T1),throw(T1));(throw(_msg)))). % main env3(X):-_custom_throw = clos([],env3_custom_throw),_debug = clos([],env3_debug),_pause = clos([],env3_pause),creq("list",_list),creq("table",_table),creq("types2",_types),get_(_table,"set",T2),_set = T2,get_(_table,"get",T3),_get = T3,_has = clos([],env3_has),_is_functor = clos([_list],env3_is_functor),creq("string",_string),_remove_double_string = clos([_string,_string],env3_remove_double_string),_to_table_type = clos([_debug,_set,_extract_type,_remove_double_string,_debug,_debug],env3_to_table_type),_gettype = clos([],env3_gettype),_extract_type_id = clos([_is_functor,_custom_throw,_debug,_gettype,_has,_debug],env3_extract_type_id),_extract_type = clos([_debug,_debug,_to_table_type,_table,_extract_type_id],env3_extract_type),_find = clos([],env3_find),get_(_table,"concat",T21),_concat = T21,new(T22),set_(T22,"new",clos([_concat,_Env,_Env],env3_2),T24),set_(T24,"init",clos([_table,_table],env3_3),T27),set_(T27,"push",clos([_table,_table],env3_4),T43),set_(T43,"push_alias",clos([_table],env3_5),T53),set_(T53,"set",clos([_table],env3_6),T61),set_(T61,"update",clos([_Env,_debug,_Env,_debug,_debug,_list,_debug],env3_7),T64),set_(T64,"push_on",clos([_get],env3_8),T72),set_(T72,"push_var",clos([],env3_9),T76),set_(T76,"push_if_not_found",clos([_set,_list],env3_10),T79),set_(T79,"find",clos([_debug],env3_11),T83),set_(T83,"has",clos([_debug],env3_12),T85),set_(T85,"get",clos([],env3_13),T88),set_(T88,"prevs",clos([_Env,_debug],env3_14),T90),set_(T90,"extract_types",clos([_extract_type,_extract_type],env3_15),T95),set_(T95,"extract_type_args",clos([_extract_type,_extract_type],env3_16),T100),set_(T100,"extract_type",_extract_type,T23),_Env = T23,X=_Env.