mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-17 06:47:17 +00:00
Estimated hours taken: 6 Branches: main compiler/*.m: Convert almost all the compiler modules to use . instead of __ as the module qualifier. In some cases, change the names of predicates and types to make them meaningful without the module qualifier. In particular, most of the types that used to be referred to with an "mlds__" prefix have been changed to have a "mlds_" prefix instead of changing the prefix to "mlds.". There are no algorithmic changes.
93 lines
3.3 KiB
Mathematica
93 lines
3.3 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%---------------------------------------------------------------------------%
|
|
% Copyright (C) 1997-1998, 2003-2006 The University of Melbourne.
|
|
% This file may only be copied under the terms of the GNU General
|
|
% Public License - see the file COPYING in the Mercury distribution.
|
|
%---------------------------------------------------------------------------%
|
|
%
|
|
% File: commit_gen.m.
|
|
% Main authors: conway, fjh, zs.
|
|
%
|
|
% The predicates of this module generate code for performing commits.
|
|
%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module ll_backend.commit_gen.
|
|
:- interface.
|
|
|
|
:- import_module hlds.code_model.
|
|
:- import_module hlds.hlds_goal.
|
|
:- import_module ll_backend.code_info.
|
|
:- import_module ll_backend.llds.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- pred generate_commit(add_trail_ops::in, code_model::in,
|
|
hlds_goal::in, code_tree::out, code_info::in, code_info::out) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module libs.compiler_util.
|
|
:- import_module libs.tree.
|
|
:- import_module ll_backend.code_gen.
|
|
|
|
:- import_module std_util.
|
|
:- import_module string.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
generate_commit(AddTrailOps, OuterCodeModel, Goal, Code, !Info) :-
|
|
Goal = _ - InnerGoalInfo,
|
|
goal_info_get_code_model(InnerGoalInfo, InnerCodeModel),
|
|
(
|
|
OuterCodeModel = model_det,
|
|
(
|
|
InnerCodeModel = model_det,
|
|
code_gen.generate_goal(InnerCodeModel, Goal, Code, !Info)
|
|
;
|
|
InnerCodeModel = model_semi,
|
|
unexpected(this_file, "generate_commit: " ++
|
|
"semidet model in det context")
|
|
;
|
|
InnerCodeModel = model_non,
|
|
code_info.prepare_for_det_commit(AddTrailOps, CommitInfo,
|
|
PreCommit, !Info),
|
|
code_gen.generate_goal(InnerCodeModel, Goal, GoalCode, !Info),
|
|
code_info.generate_det_commit(CommitInfo, Commit, !Info),
|
|
Code = tree(PreCommit, tree(GoalCode, Commit))
|
|
)
|
|
;
|
|
OuterCodeModel = model_semi,
|
|
(
|
|
InnerCodeModel = model_det,
|
|
code_gen.generate_goal(InnerCodeModel, Goal, Code, !Info)
|
|
;
|
|
InnerCodeModel = model_semi,
|
|
code_gen.generate_goal(InnerCodeModel, Goal, Code, !Info)
|
|
;
|
|
InnerCodeModel = model_non,
|
|
code_info.prepare_for_semi_commit(AddTrailOps, CommitInfo,
|
|
PreCommit, !Info),
|
|
code_gen.generate_goal(InnerCodeModel, Goal, GoalCode, !Info),
|
|
code_info.generate_semi_commit(CommitInfo, Commit, !Info),
|
|
Code = tree(PreCommit, tree(GoalCode, Commit))
|
|
)
|
|
;
|
|
OuterCodeModel = model_non,
|
|
code_gen.generate_goal(InnerCodeModel, Goal, Code, !Info)
|
|
).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- func this_file = string.
|
|
|
|
this_file = "commit_gen.m".
|
|
|
|
%---------------------------------------------------------------------------%
|
|
:- end_module commit_gen.
|
|
%---------------------------------------------------------------------------%
|