diff options
Diffstat (limited to 'tools/convert')
-rwxr-xr-x | tools/convert | 233 |
1 files changed, 0 insertions, 233 deletions
diff --git a/tools/convert b/tools/convert deleted file mode 100755 index bc43990205..0000000000 --- a/tools/convert +++ /dev/null @@ -1,233 +0,0 @@ -#!/usr/local/bin/perl - -# Conversion of a Caml Light 0.7 file to Caml Special Light. - -# The conversion table - -$convtbl= -"value val -int_of_float truncate -float_of_int float -vect array -fast_really_input unsafe_really_input -io__exit exit -vect_length Array.length -make_vect Array.create -make_matrix Array.create_matrix -concat_vect Array.concat -sub_vect Array.sub -copy_vect Array.copy -fill_vect Array.fill -blit_vect Array.blit -do_vect Array.iter -map_vect Array.map -vect_of_list Array.of_list -list_of_vect Array.to_list -int_of_char Char.code -char_of_int Char.chr -char_for_read Char.escaped -fchar__char_of_int Char.unsafe_chr -hashtbl__do_table Hashtbl.iter -do_table Hashtbl.iter -lexing__create_lexer_channel Lexing.from_channel -lexing__create_lexer_string Lexing.from_string -lexing__create_lexer Lexing.from_function -lexing__get_lexeme Lexing.lexeme -lexing__get_lexeme_char Lexing.lexeme_char -lexing__get_lexeme_start Lexing.lexeme_start -lexing__get_lexeme_end Lexing.lexeme_end -create_lexer_channel Lexing.from_channel -create_lexer_string Lexing.from_string -create_lexer Lexing.from_function -get_lexeme Lexing.lexeme -get_lexeme_char Lexing.lexeme_char -get_lexeme_start Lexing.lexeme_start -get_lexeme_end Lexing.lexeme_end -list_length List.length -rev List.rev -flatten List.flatten -do_list List.iter -map List.map -it_list List.fold_left -list_it List.fold_right -do_list2 List.iter2 -map2 List.map2 -iter2 List.iter2 -it_list2 List.fold_left2 -list_it2 List.fold_right2 -for_all List.for_all -exists List.exists -mem List.mem -assoc List.assoc -mem_assoc List.mem_assoc -assq List.assq -split List.split -combine List.combine -obj__obj Obj.t -obj__repr Obj.repr -obj__magic_obj Obj.magic -obj__magic Obj.magic -obj__is_block Obj.is_block -obj__obj_tag Obj.tag -obj__obj_size Obj.size -obj__obj_field Obj.field -obj__set_obj_field Obj.set_field -obj__obj_block Obj.new_block -obj__update Obj.update -magic_obj Obj.magic -magic Obj.magic -is_block Obj.is_block -obj_tag Obj.tag -obj_size Obj.size -obj_field Obj.field -set_obj_field Obj.set_field -obj_block Obj.new_block -printexc__f Printexc.catch -sort__sort Sort.list -sort Sort.list -string_length String.length -nth_char String.get -set_nth_char String.set -sub_string String.sub -create_string String.create -make_string String.make -fill_string String.fill -blit_string String.blit -string_for_read String.escaped -fstring__nth_char String.unsafe_get -fstring__set_nth_char String.unsafe_set -fstring__blit_string String.unsafe_blit -sys__Sys_error Sys_error -sys__exit exit -sys__command_line Sys.argv -sys__O_RDONLY Sys.Open_rdonly -sys__O_WRONLY Sys.Open_wronly -sys__O_RDWR Sys.Open_rdwr -sys__O_APPEND Sys.Open_append -sys__O_CREAT Sys.Open_creat -sys__O_TRUNC Sys.Open_trunc -sys__O_EXCL Sys.Open_excl -sys__O_BINARY Sys.Open_binary -sys__O_TEXT Sys.Open_text -sys__open Sys.open_desc -sys__close Sys.close_desc -sys__system_command Sys.command -system_command Sys.command -command_line Sys.argv -O_RDONLY Sys.Open_rdonly -O_WRONLY Sys.Open_wronly -O_RDWR Sys.Open_rdwr -O_APPEND Sys.Open_append -O_CREAT Sys.Open_creat -O_TRUNC Sys.Open_trunc -O_EXCL Sys.Open_excl -O_BINARY Sys.Open_binary -O_TEXT Sys.Open_text"; - -# Initialize the table %conv -%conv = split(/\s+/, $convtbl); - -# Parse options -$_ = $ARGV[0]; -$keep_semisemi = 1, shift if /^-semi/; - -# Open input. -$infile = $ARGV[0]; -open(IN, $infile) || die("Cannot open $infile"); -$interface = ($infile =~ /\.mli$/); - -# If it's a .ml or .mll file: we must insert definitions from the .mli -# before the first definition - -if ($infile =~ /^(.*)\.(ml|mll)$/ && open(INTERFACE, "$1.mli")) { - -# Copy and translate the header of the file (first comment and #open decls) -# Stop at first definition - $_ = <IN>; - if (/^\(\*/) { - do convert(); - while (! /\*\)/) { $_ = <IN>; do convert(); } - $_ = <IN>; - } - while(/^$/ || /^#open / || /^{$/) { - do convert(); - $_ = <IN>; - } - $saved = $_; - $copy = 0; - -# Copy and translate manifest definitions from the .mli - while(<INTERFACE>) { - $copy = 1 if /^type .*=/ || /^#open/ || /^exception/; - $copy = 0 if /^type [^=]*$/ || /^value /; - do convert() if $copy; - } - close(INTERFACE); - $_ = $saved; - -# Finish translation of main file - do convert(); - while(<IN>) { - do convert(); - } - -} else { - -# For other kinds of files (.mli, .mly), just copy as is - while(<IN>) { - do convert(); - } -} - -close(IN); - -# Convert and print one line (in $_) -sub convert { - chop; -# Double-semicolon - if (! $keep_semisemi) { - return if /^;;\s*$/; - s/;;//; - } -# Identifiers that have been renamed - s/([A-Za-z][A-Za-z0-9'_]*(__[A-Za-z][A-Za-z0-9'_]*)?)/$conv{$1} || $1/eg; -# 'type glop == tau' - s/((type|and)\s+(\(.*\)\s+|'[a-z]\s+)?[A-Za-z][A-Za-z0-9'_]*\s+)==/\1=/; -# 'and' for values in .mli files -- what a terrible hack! - if ($interface) { s/^ and\b/val/; } -# Open - if (s/#\s*open\s*"([^"]*)"/"open " . do capitalize($1)/e) { - /open ([A-Za-z0-9_']+)/; - return if $opened{$1}; - $opened{$1} = 1; - } -# Module references - s/([A-Za-z][A-Za-z0-9_']*)__/do capitalize($1) . "."/eg; -# Character literals - s/`([^\\]|\\[\\`ntbr]|\\[0-9][0-9][0-9])`/do convert_char($1)/eg; -# Over! - print $_, "\n"; -} - -close(IN); -close(OUT); - -# Capitalize a string -sub capitalize { - local ($_) = @_; - m/^(.)(.*)/; - $hd = $1; - $tl = $2; - $hd =~ tr/a-z/A-Z/; - return $hd . $tl; -} - -# Convert a character literal -sub convert_char { - local ($_) = @_; - s/\\`/`/; - s/'/\\'/; - s/^/'/; - s/$/'/; - return $_; -} |