[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