{"push_id":777916278,"size":71,"distinct_size":71,"ref":"refs/heads/master","head":"90462e8c3675ff4a6962e81be7be1beb0637039c","before":"8938d2b6bd4edc97c3dad812da7c83e3bf3cac4f","commits":[{"sha":"444c485152527b864948dfed419148182087a676","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Fix indentation, and update programming style.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/444c485152527b864948dfed419148182087a676"},{"sha":"ee34f02d0e5731607a2bb3a24c4a0528df8c3d06","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Document the --limit-error-contexts compiler option.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/ee34f02d0e5731607a2bb3a24c4a0528df8c3d06"},{"sha":"04dec8c205f554d4dc6a8fee82698a0bb520d0ce","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Carve vartypes.m, prog_detism.m and prog_rename.m out of prog_data.m.\n\nBesides defining most of the types representing the smaller parts of\nparse trees (parts smaller than items), prog_data.m also has many utility\npredicates that operate on values of these types. Carve the three substantial\nclusters of predicates out of prog_data.m, and move them into their own\nmodules, which are each imported by fewer modules than prog_data.m itself.\n\ncompiler/vartypes.m:\n    New module containing the vartypes type and the predicates that operate\n    on it. The new module has *much* better cohesion than the old prog_data.m.\n\n    The vartypes type does not appear in any parse tree; it is used only\n    in the HLDS. So make vartypes.m part of the hlds.m package, not\n    parse_tree.m.\n\n    Move three predicates that perform renamings and substitutions on vartypes\n    here from prog_type_subst.m, since the latter is part of the parse_tree.m\n    package, and thus doesn't have access to hlds.vartypes. Make private\n    the service predicate that these three moved predicates used to rely on,\n    since it has no other callers.\n\ncompiler/prog_detism.m:\n    New module containing utility predicates that operate on determinisms\n    and determinism components.\n\ncompiler/prog_rename.m:\n    New module containing utility predicates that rename variables in\n    various data structures.\n\ncompiler/prog_data.m:\n    Remove the stuff now in the three new modules.\n\ncompiler/prog_type_subst.m:\n    Remove the three predicates now in vartypes.m.\n\ncompiler/mercury_to_mercury.m:\n    Delete an unneded predicate, which was the only part of this module\n    that referred to vartypes.\n\ncompiler/prog_type.m:\ncompiler/builtin_lib_types.m:\ncompiler/type_util.m:\n    Move some utility predicates that refer to vartypes from prog_type.m\n    and builtin_lib_types.m (both part of parse_tree.m) to type_util.m\n    (part of check_hlds.m).\n\ncompiler/parse_tree.m:\ncompiler/hlds.m:\ncompiler/notes/compiler_design.html:\n    Mention the new modules.\n\ncompiler/accumulator.m:\ncompiler/add_class.m:\ncompiler/add_clause.m:\ncompiler/add_foreign_proc.m:\ncompiler/add_heap_ops.m:\ncompiler/add_pragma_type_spec.m:\ncompiler/add_pred.m:\ncompiler/add_trail_ops.m:\ncompiler/arg_info.m:\ncompiler/bytecode_gen.m:\ncompiler/call_gen.m:\ncompiler/clause_to_proc.m:\ncompiler/closure_analysis.m:\ncompiler/code_info.m:\ncompiler/code_loc_dep.m:\ncompiler/common.m:\ncompiler/complexity.m:\ncompiler/const_prop.m:\ncompiler/constraint.m:\ncompiler/continuation_info.m:\ncompiler/coverage_profiling.m:\ncompiler/cse_detection.m:\ncompiler/ctgc.datastruct.m:\ncompiler/ctgc.util.m:\ncompiler/deep_profiling.m:\ncompiler/deforest.m:\ncompiler/delay_construct.m:\ncompiler/delay_partial_inst.m:\ncompiler/dep_par_conj.m:\ncompiler/det_analysis.m:\ncompiler/det_report.m:\ncompiler/det_util.m:\ncompiler/disj_gen.m:\ncompiler/equiv_type_hlds.m:\ncompiler/erl_call_gen.m:\ncompiler/erl_code_gen.m:\ncompiler/erl_code_util.m:\ncompiler/exception_analysis.m:\ncompiler/float_regs.m:\ncompiler/follow_code.m:\ncompiler/follow_vars.m:\ncompiler/format_call.m:\ncompiler/goal_expr_to_goal.m:\ncompiler/goal_path.m:\ncompiler/goal_store.m:\ncompiler/goal_util.m:\ncompiler/headvar_names.m:\ncompiler/hhf.m:\ncompiler/higher_order.m:\ncompiler/hlds_clauses.m:\ncompiler/hlds_goal.m:\ncompiler/hlds_llds.m:\ncompiler/hlds_out_goal.m:\ncompiler/hlds_out_module.m:\ncompiler/hlds_out_pred.m:\ncompiler/hlds_pred.m:\ncompiler/hlds_rtti.m:\ncompiler/inlining.m:\ncompiler/inst_util.m:\ncompiler/instmap.m:\ncompiler/intermod.m:\ncompiler/interval.m:\ncompiler/lambda.m:\ncompiler/lco.m:\ncompiler/live_vars.m:\ncompiler/liveness.m:\ncompiler/lookup_switch.m:\ncompiler/make_goal.m:\ncompiler/mark_tail_calls.m:\ncompiler/ml_accurate_gc.m:\ncompiler/ml_code_gen.m:\ncompiler/ml_code_util.m:\ncompiler/ml_disj_gen.m:\ncompiler/ml_gen_info.m:\ncompiler/ml_lookup_switch.m:\ncompiler/ml_proc_gen.m:\ncompiler/ml_unify_gen.m:\ncompiler/mode_constraints.m:\ncompiler/mode_info.m:\ncompiler/mode_util.m:\ncompiler/modecheck_call.m:\ncompiler/modecheck_conj.m:\ncompiler/modecheck_goal.m:\ncompiler/modecheck_unify.m:\ncompiler/modecheck_util.m:\ncompiler/modes.m:\ncompiler/par_loop_control.m:\ncompiler/pd_info.m:\ncompiler/pd_util.m:\ncompiler/polymorphism.m:\ncompiler/post_typecheck.m:\ncompiler/prog_rep.m:\ncompiler/prop_mode_constraints.m:\ncompiler/purity.m:\ncompiler/qual_info.m:\ncompiler/quantification.m:\ncompiler/rbmm.points_to_graph.m:\ncompiler/rbmm.points_to_info.m:\ncompiler/rbmm.region_liveness_info.m:\ncompiler/rbmm.region_transformation.m:\ncompiler/saved_vars.m:\ncompiler/set_of_var.m:\ncompiler/simplify_goal_call.m:\ncompiler/simplify_goal_conj.m:\ncompiler/simplify_goal_disj.m:\ncompiler/simplify_goal_ite.m:\ncompiler/simplify_goal_scope.m:\ncompiler/simplify_goal_switch.m:\ncompiler/simplify_goal_unify.m:\ncompiler/simplify_info.m:\ncompiler/simplify_proc.m:\ncompiler/size_prof.m:\ncompiler/ssdebug.m:\ncompiler/stack_alloc.m:\ncompiler/stack_layout.m:\ncompiler/stack_opt.m:\ncompiler/stm_expand.m:\ncompiler/store_alloc.m:\ncompiler/structure_reuse.analysis.m:\ncompiler/structure_reuse.direct.choose_reuse.m:\ncompiler/structure_reuse.direct.detect_garbage.m:\ncompiler/structure_reuse.indirect.m:\ncompiler/structure_reuse.lbu.m:\ncompiler/structure_reuse.lfu.m:\ncompiler/structure_sharing.analysis.m:\ncompiler/structure_sharing.domain.m:\ncompiler/switch_detection.m:\ncompiler/table_gen.m:\ncompiler/tabling_analysis.m:\ncompiler/term_constr_build.m:\ncompiler/term_constr_initial.m:\ncompiler/term_constr_util.m:\ncompiler/term_pass1.m:\ncompiler/term_traversal.m:\ncompiler/term_util.m:\ncompiler/trace_gen.m:\ncompiler/trailing_analysis.m:\ncompiler/try_expand.m:\ncompiler/tupling.m:\ncompiler/type_assign.m:\ncompiler/type_constraints.m:\ncompiler/typecheck.m:\ncompiler/typecheck_errors.m:\ncompiler/unify_gen.m:\ncompiler/unify_proc.m:\ncompiler/unique_modes.m:\ncompiler/unneeded_code.m:\ncompiler/untupling.m:\ncompiler/unused_args.m:\ncompiler/var_locn.m:\n    Conform to the above changes, mostly by importing some of the\n    three new modules as well as, or instead of, prog_data.m.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/04dec8c205f554d4dc6a8fee82698a0bb520d0ce"},{"sha":"df4f8236fcc804f2834c8f5e82635ff8dc62986d","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Allow workspaces to be moved.\n\ntools/bootcheck:\n    The contents of tests/mdbrc refer to the pathname of the workspace\n    as it was when the configure script was executed. If the workspace\n    was moved since then, it will refer to an out-of-date, and likely\n    no-longer-existent, set of directories. Override the possibly-obsolete\n    path names with current ones.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/df4f8236fcc804f2834c8f5e82635ff8dc62986d"},{"sha":"ef44f50bee098de759c913a479f8ba96a4c1d18f","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Eliminate the old module_defn item.\n\nAfter my earlier changes to the item list, we used module_defns for only\ntwo things: recording when one module includes another, and recording\nwhen one module imports or uses another. After this diff, both those\npieces of information are stored separately in each item block.\nThis has two benefits.\n\nThe first benefit is that it allows us to use the type system to enforce\nstructural invariants about where include_module, import_module and use_module\ndeclarations may appear. The one invariant that we now enforce is that\noptimization files may not contain either include_module or import_module\ndeclarations, though they may contain use_module declarations. I suspect that\nthere are also similar invariants about interface files, but finding them\nrequires something like this change.\n\nThe second benefit is that it allows traversals of item blocks to scan\nonly the part of the item block that may contain the object of interest.\nWhile reading in interface and optimization files, we used to scan the\nfull item list several times to find included and imported modules; those\nscans can now look at just the relevant information. Since the item lists\nthat need to be processed usually include all the declarations in a\nsubstantial number of other modules, including some (such as list.m) that\nhave LOTS of declarations, the speedup can be substantial. On tools/speedtest,\nthe speedup is 1.5%.\n\ncompiler/prog_item.m:\n    Make the change described above.\n\n    Provide utility predicates on the new types representing include_module,\n    import_module and use_module declarations.\n\n    Move an old utility predicate from here to prog_io.m, since only prog_io.m\n    uses it.\n\ncompiler/module_imports.m:\n    Several fields of the module_imports type contained sets of module names,\n    but stored them as lists. Change these to actual sets, to distinguish them\n    from the lists whose order is actually important. (Basically, the order\n    of processing .trans_opt files is important, but the order in which\n    we read in .int0, .int3, .int2, .int and .opt files isn't.) In several\n    places, this also avoids the need for conversions of lists to sets\n    for set operations, and then back to lists.\n\ncompiler/modules.m:\n    This module had several predicates that processed list of module names.\n    Make these operate on sets of module names instead, and break each of them\n    into two predicates: one that decides whether there is a next module name,\n    and if yes whether it has been processed already, and one to do the actual\n    processing if needed. This avoid the need for excessive indentation.\n\n    The code that discovers what other modules' interface files may need\n    to be read is now simpler due to the updated item_block structure.\n\n    Remove the submodule whose job it was to discover what modules are included\n    in items or item blocks, since that task has now become trivial, and is\n    now done by a utility predicate in prog_item.m. Since this was the second\n    last submodule (of the original eight), the last submodule is now the\n    whole module. Therefore this module now has significantly greater cohesion\n    than it had before.\n\ncompiler/write_module_interface_files.m:\n\ncompiler/prog_io_item.m:\n    Parse include_module, import_module and use_module declarations as\n    markers, not as items.\n\ncompiler/prog_io.m:\n    Expect include_module, import_module and use_module declarations as\n    markers, not as items.\n\ncompiler/split_parse_tree_src.m:\n    Discover included submodules more simply with the updated item_block\n    structure.\n\ncompiler/compile_target_code.m:\n    Put the arguments of the predicates in this module in a more standard\n    order.\n\ncompiler/recompilation.version.m:\n    Conform to the above changes. Note a possible bug.\n\n    Use a bespoke type to replace some bools.\n\ncompiler/check_raw_comp_unit.m:\ncompiler/comp_unit_interface.m:\ncompiler/deps_map.m:\ncompiler/equiv_type.m:\ncompiler/generate_dep_d_files.m:\ncompiler/get_dependencies.m:\ncompiler/hlds_module.m:\ncompiler/intermod.m:\ncompiler/item_util.m:\ncompiler/make.dependencies.m:\ncompiler/make.module_dep_file.m:\ncompiler/make.module_target.m:\ncompiler/make.program_target.m:\ncompiler/make_hlds_passes.m:\ncompiler/mercury_compile.m:\ncompiler/mercury_compile_llds_back_end.m:\ncompiler/mercury_to_mercury.m:\ncompiler/module_deps_graph.m:\ncompiler/module_qual.m:\ncompiler/prog_io_find.m:\ncompiler/read_modules.m:\ncompiler/recompilation.check.m:\ncompiler/recompilation.usage.m:\ncompiler/trans_opt.m:\ncompiler/write_deps_file.m:\n    Conform to the above changes.\n\nmdbcomp/sym_name.m:\n    Provide a utility predicate to get the set of ancestors of a module\n    as a set as well as a list.\n\ntests/invalid/exported_unify3.err_exp:\ntests/invalid/ii_parent.ii_child.err_exp:\n    Update the expected error messages, which refer to line numbers in\n    .int0 files, which have now changed, as we now put all import_module\n    declarations before ordinary items.\n\n    (Error messages shouldn't refer to automatically generated files,\n    but that is a separate concern.)","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/ef44f50bee098de759c913a479f8ba96a4c1d18f"},{"sha":"a4b3c6f5462386c916db83a7f0ec68aae022f67b","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Simplify the code that makes some items abstract for interfaces.\n\ncompiler/comp_unit_interface.m:\ncompiler/write_module_interface_files.m:\n    Each of these modules have code that decided which items to include\n    in interface, either in their original form, or abstracted. Both pieces\n    of code used to executed three switches in sequence on the same item.\n    The overall effect was the composition of the three switches, but\n    readers of the code had to do this composition in their head\n    if they wanted to understand the code.\n\n    Replace both three-switch sequences with a single switch, mainly to make\n    the effect of the code immediately obvious to the reader, and to eliminate\n    the dead code we used to have, when an earlier switch (the first, or\n    maybe second) decided the outcome, and it didn't matter what the later\n    (maybe the second, definitely the third) switches did.\n\n    The new code does fewer tests, but allocates more memory. The net\n    performance effect seems to be a wash. (In two different speed tests,\n    I got one speedup and one slowdown. Strangely, eliminating the extra\n    memory allocation led to slowdown.)\n\n    There are enough differences between how these two modules make their\n    decisions that I don't see a useful way to factor out the commonalities\n    in their needs.\n\ncompiler/item_util.m:\n    Replace the utility predicates needed by the three-switch approach\n    with the ones needed by the new single switch approach.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/a4b3c6f5462386c916db83a7f0ec68aae022f67b"},{"sha":"c50b5a23f8de985659545e0498c36f635187484a","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Improve module_qual.m.\n\nRewrite the comment describing the purpose of the module, in order to\n\n- update the description of what it module qualifies, since it was not modified\n  when the code was modified a long time ago when typeclasses were added,\n- explain what it does NOT module qualify, and why,\n- outline the algorithm it follows.\n\nSimplify the code handling promise goals by using accumulators.\n\nRemove an unnecessarily general predicate.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/c50b5a23f8de985659545e0498c36f635187484a"},{"sha":"82d3141334e163cc620092240b26df983f9316e7","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Fix the context of unused import_module error messages.\n\ncompiler/module_qual.m:\n    When printing error messages about modules imported in the interface\n    but not used in the interface, we used to use the context of the module's\n    `:- module' declaration, not the context of the bad `:- import_module'\n    declarations themselves. Fix that, by generating a separate error message\n    for each unnecessarily interface-imported module, each with its own\n    context.\n\ntests/invalid/bug113.err_exp:\ntests/warning/unused_import.exp:\ntests/warning/unused_interface_import.exp:\n    Update the context (and the wording) of the expected error message.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/82d3141334e163cc620092240b26df983f9316e7"},{"sha":"70cb9869762c54b21d5d32bc63ef741c5b5163f6","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Put the contents of interface files in a better standard order.\n\ncompiler/write_module_interface_files.m:\n    We want to put the contents of interface files into a standard order\n    because this avoids unnecessary recompilations of the modules that\n    import those interface files.\n\n    When we represented parse trees as raw lists of items, the fact that\n    some items (such as section markers) affected the meaning of the following\n    items limited our ability to reorder items, requiring us to reorder items\n    only within \"chunks\" delimited by such semantics-altering items.\n\n    Since those kinds of items are now gone, their job now being done\n    by the structures of parse trees, we can now do better. Our only\n    constraints now are the requirements of the code that reads in the items,\n    which (for example) needs to see the predicate declaration of a predicate\n    before it sees a mode declaration for that predicate.\n\n    This change documents those requirements, and puts the contents of\n    interface files into a standard order that is consistent with them.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/70cb9869762c54b21d5d32bc63ef741c5b5163f6"},{"sha":"ecf0a6cb5e432d4013d3f3d30c9c9c8bf4661ff8","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Add an XXX about a possible improvement.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/ecf0a6cb5e432d4013d3f3d30c9c9c8bf4661ff8"},{"sha":"dbde81460a110a123a24f0ad2e6923f27d8df3f9","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Address Julien's review comments.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/dbde81460a110a123a24f0ad2e6923f27d8df3f9"},{"sha":"a763ea2da42b278d44f4644b838e986a2185b5a9","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Fix the several bugs causing Mantis bug report 391.\n\ncompiler/hlds_out_goal.m:\n    When writing out trace goals, we used to print them out in a format\n    that was convenient for humans to look at, but was not valid Mercury.\n    Fix this bug #1.\n\ncompiler/mercury_to_mercury.m:\n    When writing out the compile time and runtime conditions of trace goals,\n    we printed the strings representing the names of flags and environment\n    variables without quotes, so they couldn't be read back as strings.\n    Fix this bug #2.\n\ncompiler/goal_expr_to_goal.m:\n    When we convert the parse tree representation of a goal to its\n    HLDS representation, we need to rename (actually, renumber)\n    any variables in the clause that were already in use in the clause,\n    either by previous clauses, or by the automatically created HeadVar__N\n    variables. When we converted trace goals to HLDS, we looked up\n    their names using the pre-renumbering variable numbers, and thus\n    got the wrong variable names, and then stored those wrong variable\n    names in the HLDS, and the code in hlds_out_goal.m wrote them out.\n    Fix this bug #3, while making the parallel between what we do for\n    I/O state variables and what we do for state variables for mutables\n    more obvious.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/a763ea2da42b278d44f4644b838e986a2185b5a9"},{"sha":"5138537cbfd369e7e5eb01c36e064b57cbca7e36","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Convert (C->T;E) to (if C then T else E).","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/5138537cbfd369e7e5eb01c36e064b57cbca7e36"},{"sha":"e02edebeb5718fc13ace408b6049d0f3d108ce79","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Address Peter's review comments.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/e02edebeb5718fc13ace408b6049d0f3d108ce79"},{"sha":"16b30fd239add46886fdf88404c886a01e135187","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Fix bootcheck failures in debug grades.\n\ncompiler/structure_sharing.analysis.m:\n    Fix the failures in tests/structure_reuse.\n\n    This pass invokes liveness, which requires that the arg_info slots\n    in pred_infos should be filled in. Invoke generate_arg_info to fill\n    them in. (I don't know why they happened to be already filled in\n    in non-debug grades.)\n\ntests/declarative_debugger/ignore.{inp2,exp2}:\n    Update the line numbers in these files. I updated ignore.{inp,exp}\n    when I cleaned up ignore.m, but didn't update these, which are the\n    input and expected output for debug grades.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/16b30fd239add46886fdf88404c886a01e135187"},{"sha":"fa2799f9ac7542dceaac0ffa123e047af23179e3","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Comment out the always already-expanded parts of trace goals.\n\ncompiler/hlds_out_goal.m:\n    Any io(!IO) and state(mutable, !M) attributes on trace goals are\n    expanded out (used to modify the goal inside the trace scope) when\n    the parse tree is converted into the HLDS. If we put these attributes\n    into .opt files, the module reading them in would expand them out again,\n    which would be an error. However, since humans find them useful, we do\n    still print out these attibutes, but only as comments.\n\n    During the simplification pass at the end of static analysis, we expand\n    out the runtime condition attribute as well. If intermod were invoked\n    after this pass, we would have to do the same for this attribute as well,\n    but it isn't.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/fa2799f9ac7542dceaac0ffa123e047af23179e3"},{"sha":"0219a66f8218c983af2ffbcc9c6b492de1f768f4","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Convert (C->T;E) to (if C then T else E).","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/0219a66f8218c983af2ffbcc9c6b492de1f768f4"},{"sha":"c4d62c0d5350151b8a005b0be8ecc90c564c6a10","author":{"email":"8cfdc1c1c3acce94cb15777e4cf95d35375a9c39@gmail.com","name":"Peter Wang"},"message":"Add test case for writing trace goal parameters in .opt files.\n\ntests/hard_coded/Mercury.options:\ntests/hard_coded/Mmakefile:\ntests/hard_coded/trace_goal_opt.exp:\ntests/hard_coded/trace_goal_opt.m:\ntests/hard_coded/trace_goal_opt_2.m:\n\tAdd test case.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/c4d62c0d5350151b8a005b0be8ecc90c564c6a10"},{"sha":"cf43bb4a9af934280fb8a53ec523792373d05bb6","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Clean up some code that parses goals.\n\ncompiler/prog_io_goal.m:\ncompiler/prog_io_dcg.m:\n    Factor out the common code that handles impure and semipure markers\n    on both DCG and non-DCG goals.\n\n    Use a more consistent set of variable names.\n\n    In prog_io_dcg.m, inline a single-use predicate, convert a very long clause\n    to an explicit disjunction (factoring out some code that was repeated\n    in several clauses), and put utility routines together at the end of the\n    file.\n\n    Document *why* exported predicates are exported.\n\n    Remove long-obsolete comments about disallowing if-then without else\n    \"for the moment\".\n\ncompiler/prog_io_sym_name.m:\ncompiler/superhomogeneous.m:\n    Convert (C->T;E) to (if C then T else E).","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/cf43bb4a9af934280fb8a53ec523792373d05bb6"},{"sha":"9ed0d90e104e4ab3a6298cdfa182bc5e7bd1fdfd","author":{"email":"f5f25150104e445be281fa3e96f4d2bf3a8cb24c@runbox.com","name":"Zoltan Somogyi"},"message":"Fix mantis bug 392.\n\ncompiler/deforest.m:\n    Don't push goals that may have output variables into semidet conjunctions,\n    since that turns them into nondet conjunctions, leading to determinism\n    errors.\n\ntests/hard_coded/bug392.{m,exp}:\n    A tougher version of the mantis test case.\n\ntests/hard_coded/Mmakefile:\ntests/hard_coded/Mercury.options:\n    Enable the new test case, and run it with the options that used to\n    tickle the bug.","distinct":true,"url":"https://api.github.com/repos/marcusmonteiro/mercury/commits/9ed0d90e104e4ab3a6298cdfa182bc5e7bd1fdfd"}]}