[m-rev.] diff: mangle erlang variable names

Peter Wang wangp at students.csse.unimelb.edu.au
Fri Jun 22 12:10:30 AEST 2007


Estimated hours taken: 0.25
Branches: main

compiler/elds_to_erlang.m:
	Mangle Erlang variable names by replacing weird characters with the
	decimal ASCII code.

Index: compiler/elds_to_erlang.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/elds_to_erlang.m,v
retrieving revision 1.20
diff -u -r1.20 elds_to_erlang.m
--- compiler/elds_to_erlang.m	19 Jun 2007 01:10:52 -0000	1.20
+++ compiler/elds_to_erlang.m	22 Jun 2007 02:08:32 -0000
@@ -712,13 +712,21 @@
 :- pred output_var_string(string::in, io::di, io::uo) is det.
 
 output_var_string(String, !IO) :-
-    % XXX this assumes all Mercury variable names are a subset of Erlang
-    % variable names
-    % However, the compiler can produce some illegal variable names
-    % which we should mangle e.g. TypeClassInfo_for_+_8
-    io.write_string(String, !IO),
+    % The compiler can produce some illegal variable names e.g.
+    % 'TypeClassInfo_for_+_8' so we need to mangle.  We assume the first
+    % character is okay for Erlang (uppercase or underscore).
+    string.foldl(output_var_string_2, String, !IO),
     space(!IO).
 
+:- pred output_var_string_2(char::in, io::di, io::uo) is det.
+
+output_var_string_2(C, !IO) :-
+    (if char.is_alnum_or_underscore(C) then
+        io.write_char(C, !IO)
+    else
+        io.write_int(char.to_int(C), !IO)
+    ).
+
 :- pred output_pred_proc_id(module_info::in, pred_proc_id::in,
     io::di, io::uo) is det.
 
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list