[m-rev.] for review: canonicalise --libgrade grade strings
Peter Wang
wangp at students.cs.mu.OZ.AU
Wed Feb 1 16:56:18 AEDT 2006
Estimated hours taken: 1
Branches: main
compiler/handle_options.m:
Canonicalise the grade strings passed to `--libgrade'. This solves a
problem where "mmc --make libfoo.install --libgrade <bar>" would
install into a grade subdirectory named <bar> in non-canonical form.
Index: compiler/handle_options.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/handle_options.m,v
retrieving revision 1.250
diff -u -r1.250 handle_options.m
--- compiler/handle_options.m 27 Jan 2006 05:52:04 -0000 1.250
+++ compiler/handle_options.m 1 Feb 2006 05:44:16 -0000
@@ -644,6 +644,12 @@
% without checking timestamps.
option_implies(rebuild, make, bool(yes), !Globals),
+ % Canonicalise the arguments to --libgrade options.
+ % Unrecognised grade strings are left as is and will be caught later.
+ globals__lookup_accumulating_option(!.Globals, libgrades, LibGrades0),
+ LibGrades = list__map(canonical_grade_or_identity, LibGrades0),
+ globals__set_option(libgrades, accumulating(LibGrades), !Globals),
+
% If no --lib-linkage option has been specified, default to the
% set of all possible linkages.
globals__lookup_accumulating_option(!.Globals, lib_linkages,
@@ -1941,6 +1947,24 @@
compute_grade(Globals, Grade) :-
globals__get_options(Globals, Options),
compute_grade_components(Options, Components),
+ components_to_grade(Components, Grade).
+
+:- func canonical_grade_or_identity(string) = string is det.
+
+canonical_grade_or_identity(Grade0) =
+ (if canonical_grade(Grade0) = Grade then Grade else Grade0).
+
+:- func canonical_grade(string) = string is semidet.
+
+canonical_grade(GradeString) = Grade :-
+ convert_grade_option(GradeString, map__init, Options),
+ compute_grade_components(Options, Components),
+ components_to_grade(Components, Grade).
+
+:- pred components_to_grade(list(pair(grade_component, string))::in,
+ string::out) is det.
+
+components_to_grade(Components, Grade) :-
(
Components = [],
Grade = "none"
--------------------------------------------------------------------------
mercury-reviews mailing list
post: mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the reviews
mailing list