Commit 2602d558 authored by Martin Wierich's avatar Martin Wierich
Browse files

including porting facilities

parent a0fcf6a6
...@@ -3,7 +3,7 @@ implementation module check ...@@ -3,7 +3,7 @@ implementation module check
import StdEnv import StdEnv
import syntax, typesupport, parse, checksupport, utilities, checktypes, transform, predef import syntax, typesupport, parse, checksupport, utilities, checktypes, transform, predef
import explicitimports, comparedefimp, checkFunctionBodies, containers import explicitimports, comparedefimp, checkFunctionBodies, containers, portToNewSyntax
cPredefinedModuleIndex :== 1 cPredefinedModuleIndex :== 1
cUndef :== (-1) cUndef :== (-1)
...@@ -1444,7 +1444,7 @@ check_module2 mod_name mod_imported_objects mod_imports mod_type icl_global_func ...@@ -1444,7 +1444,7 @@ check_module2 mod_name mod_imported_objects mod_imports mod_type icl_global_func
(dcl_modules, cs) (dcl_modules, cs)
= switch_port_to_new_syntax = switch_port_to_new_syntax
(write_expl_imports_to_file "icl.txt" imports.si_explicit dcl_modules cs) (writeExplImportsToFile "icl.txt" imports.si_explicit dcl_modules cs)
(dcl_modules, cs) (dcl_modules, cs)
imports_ikh imports_ikh
= ikhInsert` False nr_of_modules imports ikhEmpty = ikhInsert` False nr_of_modules imports ikhEmpty
...@@ -2393,13 +2393,9 @@ Ste_Empty :== STE_Empty ...@@ -2393,13 +2393,9 @@ Ste_Empty :== STE_Empty
dummy_decl dummy_decl
=: { dcl_ident = { id_name = "", id_info = nilPtr }, dcl_pos = NoPos, dcl_kind = STE_Empty, dcl_index = cUndef } =: { dcl_ident = { id_name = "", id_info = nilPtr }, dcl_pos = NoPos, dcl_kind = STE_Empty, dcl_index = cUndef }
// BEGIN only for portToNewSyntax
// BEGIN only for portToNewSyntax
// BEGIN only for portToNewSyntax
// BEGIN only for portToNewSyntax
// BEGIN only for portToNewSyntax
// BEGIN only for portToNewSyntax
possibly_write_expl_imports_of_main_dcl_mod_to_file imports_ikh dcl_modules cs possibly_write_expl_imports_of_main_dcl_mod_to_file imports_ikh dcl_modules cs
| switch_port_to_new_syntax False True
= abort "possibly_write_expl_imports_of_main_dcl_mod_to_file is only used for portToNewSyntax"
#! x_main_dcl_module_n #! x_main_dcl_module_n
= cs.cs_x.x_main_dcl_module_n = cs.cs_x.x_main_dcl_module_n
= case ikhSearch x_main_dcl_module_n imports_ikh of = case ikhSearch x_main_dcl_module_n imports_ikh of
...@@ -2407,179 +2403,5 @@ possibly_write_expl_imports_of_main_dcl_mod_to_file imports_ikh dcl_modules cs ...@@ -2407,179 +2403,5 @@ possibly_write_expl_imports_of_main_dcl_mod_to_file imports_ikh dcl_modules cs
// the main dcl module is not part of the currently checked module component // the main dcl module is not part of the currently checked module component
-> (dcl_modules, cs) -> (dcl_modules, cs)
Yes {si_explicit} Yes {si_explicit}
-> write_expl_imports_to_file "dcl.txt" si_explicit dcl_modules cs -> writeExplImportsToFile "dcl.txt" si_explicit dcl_modules cs
write_expl_imports_to_file file_name si_explicit dcl_modules cs
| switch_port_to_new_syntax False True
= abort "write_expl_imports_to_file is only used for portToNewSyntax"
# (file, cs)
= openFile file_name cs
(dcl_modules, file)
= foldSt (write_expl_import (flatten (map fst si_explicit))) (reverse si_explicit) (dcl_modules, file)
= (dcl_modules, closeFile file cs)
write_expl_import all_expl_imp_decls (declarations, _) (dcl_modules, file)
# (declaration_strings, dcl_modules)
= mapFilterYesSt (decl_to_opt_string all_expl_imp_decls) (reverse declarations) dcl_modules
= (dcl_modules, fwriteNewSyntax declaration_strings file)
// only for portToNewSyntax
decl_to_opt_string all_expl_imp_decls decl=:{dcl_ident, dcl_index, dcl_kind=STE_Imported ste_kind def_mod_index}
dcl_modules
= imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index ste_kind def_mod_index
dcl_modules
decl_to_opt_string _ {dcl_ident, dcl_kind=STE_FunctionOrMacro _} dcl_modules
= (Yes dcl_ident.id_name, dcl_modules)
decl_to_opt_string all_expl_imp_decls decl dcl_modules
= abort ("decl_to_opt_string failed"--->decl)
// only for portToNewSyntax
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index STE_Constructor def_mod_index
dcl_modules
= (No, dcl_modules)
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index STE_Member def_mod_index
dcl_modules
= (No, dcl_modules)
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index STE_DclFunction def_mod_index
dcl_modules
= (Yes dcl_ident.id_name, dcl_modules)
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index STE_Class def_mod_index
dcl_modules
= (Yes ("class "+++dcl_ident.id_name+++"(..)"), dcl_modules)
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index (STE_Instance _) def_mod_index
dcl_modules
# ({ins_type}, dcl_modules)
= dcl_modules![def_mod_index].dcl_common.com_instance_defs.[dcl_index]
= (Yes ("instance "+++dcl_ident.id_name+++" "+++
separated " " (map type_to_string ins_type.it_types)), dcl_modules)
imported_decl_to_opt_string all_expl_imp_decls dcl_ident dcl_index STE_Type def_mod_index
dcl_modules
# ({td_rhs}, dcl_modules)
= dcl_modules![def_mod_index].dcl_common.com_type_defs.[dcl_index]
dcl_string
= ":: "+++(case td_rhs of
AlgType constructors
-> dcl_ident.id_name+++constructor_bracket def_mod_index all_expl_imp_decls constructors
RecordType _
-> dcl_ident.id_name+++"{..}"
_
-> dcl_ident.id_name)
= (Yes dcl_string, dcl_modules)
// only for portToNewSyntax
type_to_string (TA {type_name} _) = possibly_replace_predef_symbols type_name.id_name
type_to_string (TB type) = toString type
type_to_string (TV {tv_name}) = tv_name.id_name
type_to_string x = abort ("bug nr 945 in module check"--->x)
possibly_replace_predef_symbols s
| s=="_list"
= "[]"
| s % (0,5) == "_tuple"
= (toString ['(':repeatn ((toInt (s%(6, (size s) - 1))) - 1) ','])+++")"
| s=="_array"
= "{}"
| s=="_!array"
= "{!}"
| s=="_#array"
= "{#}"
= s
instance toString BasicType
where
toString BT_Int = "Int"
toString BT_Char = "Char"
toString BT_Real = "Real"
toString BT_Bool = "Bool"
toString BT_Dynamic = "Dynamic"
toString BT_File = "File"
toString BT_World = "World"
toString _ = abort "bug nr 346 in module check"
// only for portToNewSyntax
separated _ []
= ""
separated separator [h:t]
= foldl (\l r->l+++separator+++r) h t
constructor_bracket def_mod_index all_expl_imp_decls constructors
# expl_imp_constructor_strings
= [ ds_ident.id_name \\ {ds_ident} <- constructors
| is_expl_imported_constructor def_mod_index ds_ident all_expl_imp_decls ]
| isEmpty expl_imp_constructor_strings
= ""
= "("+++separated "," expl_imp_constructor_strings+++")"
// only for portToNewSyntax
is_expl_imported_constructor def_mod_index ds_ident []
= False
is_expl_imported_constructor def_mod_index ds_ident [{dcl_ident, dcl_kind=STE_Imported STE_Constructor def_mod_index2}:_]
| dcl_ident==ds_ident && def_mod_index==def_mod_index2
= True
// GOTO next alternative
is_expl_imported_constructor def_mod_index ds_ident [h:t]
= is_expl_imported_constructor def_mod_index ds_ident t
fwriteNewSyntax importStrings file
| isEmpty importStrings
= fwrites "import @#$@@!!" file
# with_commas = (map (\s->s+++", ") (butLast importStrings))++[last importStrings+++";"]
lines = split_in_lines 12 with_commas [] []
lines = [hd lines:[["\t":line]\\ line<-tl lines]]
line_strings = [ foldl (+++) " " (line++["\n"]) \\ line<-lines ]
= fwrites (foldl (+++) "import" line_strings) file
where
max_line_length = 80
split_in_lines i [] inner_accu outer_accu
# accu = if (isEmpty inner_accu) outer_accu [reverse inner_accu:outer_accu]
= reverse accu
split_in_lines i [h:t] inner_accu outer_accu
# s = size h
| s+i>max_line_length
| isEmpty inner_accu
= split_in_lines (s+i) t [h] outer_accu
= split_in_lines (s+cTabWidth) t [h] [inner_accu:outer_accu]
= split_in_lines (s+i) t [h:inner_accu] outer_accu
// only for portToNewSyntax
butLast [] = []
butLast [x] = []
butLast [h:t] = [h: butLast t]
// MW: fake..
openFile file_name cs
# world = bigBang
(ok, newFile, world) = fopen file_name FWriteText world
cs = forget world cs
cs = case ok of
True -> cs
_ # cs_error = checkError "" ("can't open file \""+++file_name+++" in current directory.") cs.cs_error
-> { cs & cs_error=cs_error }
= (newFile, cs)
closeFile file cs
# world = bigBang
(ok, world) = fclose file world
= forget world cs
bigBang :: .World
bigBang = cast 1
// creates a world from scratch
forget :: !.x !.y -> .y
forget x y = y
cast :: !.a -> .b
cast a
= code
{
pop_a 0
}
// ..fake
// END only for portToNewSyntax
// END only for portToNewSyntax
// END only for portToNewSyntax
// END only for portToNewSyntax
// END only for portToNewSyntax
// END only for portToNewSyntax
// END only for portToNewSyntax
...@@ -11,10 +11,6 @@ switch_import_syntax one_point_three two_point_zero :== one_point_three ...@@ -11,10 +11,6 @@ switch_import_syntax one_point_three two_point_zero :== one_point_three
SwitchFusion fuse dont_fuse :== dont_fuse SwitchFusion fuse dont_fuse :== dont_fuse
switch_port_to_new_syntax port dont_port :== dont_port
cTabWidth :== switch_port_to_new_syntax 4 (abort "cTabWidth is only used for portToNewSyntax")
:: Ident = :: Ident =
{ id_name :: !String { id_name :: !String
, id_info :: !SymbolPtr , id_info :: !SymbolPtr
......
...@@ -7,9 +7,6 @@ import scanner, general, Heap, typeproperties, utilities ...@@ -7,9 +7,6 @@ import scanner, general, Heap, typeproperties, utilities
PA_BUG on off :== on PA_BUG on off :== on
switch_import_syntax one_point_three two_point_zero :== one_point_three switch_import_syntax one_point_three two_point_zero :== one_point_three
SwitchFusion fuse dont_fuse :== dont_fuse SwitchFusion fuse dont_fuse :== dont_fuse
switch_port_to_new_syntax port dont_port :== dont_port
cTabWidth :== switch_port_to_new_syntax 4 (abort "cTabWidth is only used for portToNewSyntax")
:: Ident = :: Ident =
{ id_name :: !String { id_name :: !String
......
...@@ -4,6 +4,7 @@ import StdEnv ...@@ -4,6 +4,7 @@ import StdEnv
import frontend import frontend
import backendinterface import backendinterface
import CoclSystemDependent import CoclSystemDependent
import portToNewSyntax
//import RWSDebug //import RWSDebug
:: CoclOptions = :: CoclOptions =
...@@ -188,6 +189,18 @@ compileModule options commandLineArgs {dcl_modules,functions_and_macros,predef_s ...@@ -188,6 +189,18 @@ compileModule options commandLineArgs {dcl_modules,functions_and_macros,predef_s
Yes syntaxTree Yes syntaxTree
# dcl_modules=syntaxTree.fe_dcls # dcl_modules=syntaxTree.fe_dcls
# functions_and_macros = syntaxTree.fe_icl.icl_functions # functions_and_macros = syntaxTree.fe_icl.icl_functions
# (porting_ok, files)
= switch_port_to_new_syntax
(createPortedFiles options.moduleName options.searchPaths files)
(False, files)
error = switch_port_to_new_syntax
(case porting_ok of
True
-> error
False
-> error <<< "Error: couldn't write ported versions of module "
<<< options.moduleName <<< '\n')
error
# (success,var_heap,error, files) # (success,var_heap,error, files)
= backEndInterface outputPath (map appendRedirection commandLineArgs) predef_symbols syntaxTree main_dcl_module_n var_heap error files = backEndInterface outputPath (map appendRedirection commandLineArgs) predef_symbols syntaxTree main_dcl_module_n var_heap error files
-> (success,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,var_heap,error, files) -> (success,dcl_modules,functions_and_macros,n_functions_and_macros_in_dcl_modules,var_heap,error, files)
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment