diff options
author | martijnv | 2001-03-28 11:18:57 +0000 |
---|---|---|
committer | martijnv | 2001-03-28 11:18:57 +0000 |
commit | f27ab4de351bed1b2e96d8edae28172c82d62765 (patch) | |
tree | 722db5f4c6b8291f8fe9cd878bce938a743e318b | |
parent | uniqueness support is added to generics (diff) |
minor changes to files associated with dynamics. Most notably is the
use of the TypeVarHeap.
git-svn-id: https://svn.cs.ru.nl/repos/clean-compiler/trunk@347 1f8540f1-abd5-4d5b-9d24-4c5ce8603e2d
-rw-r--r-- | frontend/convertDynamics.icl | 44 | ||||
-rw-r--r-- | frontend/type_io.dcl | 8 | ||||
-rw-r--r-- | frontend/type_io.icl | 488 | ||||
-rw-r--r-- | frontend/type_io_common.dcl | 2 | ||||
-rw-r--r-- | frontend/type_io_common.icl | 2 |
5 files changed, 303 insertions, 241 deletions
diff --git a/frontend/convertDynamics.icl b/frontend/convertDynamics.icl index 6d485cd..1ac9847 100644 --- a/frontend/convertDynamics.icl +++ b/frontend/convertDynamics.icl @@ -52,33 +52,53 @@ F a b = b //write_tcl_file :: !Int {#DclModule} CommonDefs !*File [String] -> (.Bool,.File) -write_tcl_file :: !Int {#DclModule} CommonDefs !*File [String] -> (.Bool,.File) -write_tcl_file main_dcl_module_n dcl_mods=:{[main_dcl_module_n] = main_dcl_module} common_defs tcl_file directly_imported_dcl_modules - #! tcl_file - = write_type_info common_defs tcl_file - #! tcl_file - = write_type_info directly_imported_dcl_modules tcl_file +write_tcl_file :: !Int {#DclModule} CommonDefs !*File [String] !*TypeHeaps -> (.Bool,.File,!*TypeHeaps) +write_tcl_file main_dcl_module_n dcl_mods=:{[main_dcl_module_n] = main_dcl_module} common_defs tcl_file directly_imported_dcl_modules type_heaps + # write_type_info_state2 + = { WriteTypeInfoState | + wtis_type_heaps = type_heaps + , wtis_n_type_vars = 0 + }; + # (j,tcl_file) + = fposition tcl_file +// | True +// = abort ("TypeVar " +++ toString j) + + #! (tcl_file,write_type_info_state) + = write_type_info common_defs tcl_file write_type_info_state2 + #! (tcl_file,write_type_info_state) + = write_type_info directly_imported_dcl_modules tcl_file write_type_info_state + + #! (type_heaps,_) + = f write_type_info_state //!type_heaps; + + #! tcl_file = fwritei (size main_dcl_module.dcl_common.com_type_defs) tcl_file #! tcl_file = fwritei (size main_dcl_module.dcl_common.com_cons_defs) tcl_file - = (True,tcl_file) + = (True,tcl_file,type_heaps) + +where + f write_type_info_state=:{wtis_type_heaps} + = (wtis_type_heaps,{write_type_info_state & wtis_type_heaps = abort "convertDynamics.icl"}); //---> ("dcl",size main_dcl_module.dcl_common.com_type_defs, "icl", size common_defs.com_type_defs); + convertDynamicPatternsIntoUnifyAppls :: {! GlobalTCType} !{# CommonDefs} !Int !*{! Group} !*{#FunDef} !*PredefinedSymbols !*VarHeap !*TypeHeaps !*ExpressionHeap /* TD */ (Optional !*File) {# DclModule} !IclModule /* TD */ [String] -> (!*{! Group}, !*{#FunDef}, !*PredefinedSymbols, !*{#{# CheckedTypeDef}}, !ImportedConstructors, !*VarHeap, !*TypeHeaps, !*ExpressionHeap, /* TD */ (Optional !*File)) convertDynamicPatternsIntoUnifyAppls global_type_instances common_defs main_dcl_module_n groups fun_defs predefined_symbols var_heap type_heaps expr_heap /* TD */ tcl_file dcl_mods icl_mod /* TD */ directly_imported_dcl_modules // TD ... - # tcl_file + # (tcl_file,type_heaps) = case tcl_file of No - -> No + -> (No,type_heaps) (Yes tcl_file) - # (ok,tcl_file) - = write_tcl_file main_dcl_module_n dcl_mods icl_mod.icl_common tcl_file /* TD */ directly_imported_dcl_modules + # (ok,tcl_file,type_heaps) + = write_tcl_file main_dcl_module_n dcl_mods icl_mod.icl_common tcl_file /* TD */ directly_imported_dcl_modules type_heaps | not ok -> abort "convertDynamicPatternsIntoUnifyAppls: error writing tcl file" - -> Yes tcl_file + -> (Yes tcl_file,type_heaps) // ... TD diff --git a/frontend/type_io.dcl b/frontend/type_io.dcl index 1ab9684..5c92fbd 100644 --- a/frontend/type_io.dcl +++ b/frontend/type_io.dcl @@ -8,9 +8,15 @@ import scanner, general, Heap, typeproperties, utilities, checksupport import StdEnv +:: WriteTypeInfoState + = { + wtis_type_heaps :: !.TypeHeaps + , wtis_n_type_vars :: !Int + }; + class WriteTypeInfo a where - write_type_info :: a !*File -> !*File + write_type_info :: a !*File !*WriteTypeInfoState -> (!*File,!*WriteTypeInfoState) instance WriteTypeInfo CommonDefs, Char, [a] | WriteTypeInfo a diff --git a/frontend/type_io.icl b/frontend/type_io.icl index a12dfec..69b7332 100644 --- a/frontend/type_io.icl +++ b/frontend/type_io.icl @@ -22,108 +22,99 @@ import type_io_common //import DebugUtilities; F a b :== b; -/* -class NormaliseTypeDef a -where - normalise_type_def :: a -> a -*/ -//import RWSDebug - -/* -instance NormaliseTypeDef TypeRhs -where - normalise_type_def (AlgType defined_symbols) - // algebraic data types are further normalized by an alphabetical sort on the - // constructor names. - = AlgType (sortBy (\{ds_ident={id_name=id_name1}} {ds_ident={id_name=id_name2}} -> id_name1 < id_name2) defined_symbols) - normalise_type_def i - = i - -//1.3 -instance NormaliseTypeDef TypeDef rhs | NormaliseTypeDef rhs -//3.1 -/*2.0 -instance NormaliseTypeDef (TypeDef rhs) | NormaliseTypeDef rhs -0.2*/ -where - normalise_type_def type_def=:{td_args,td_arity} - = type_def -*/ +:: WriteTypeInfoState + = { + wtis_type_heaps :: !.TypeHeaps + , wtis_n_type_vars :: !Int + }; class WriteTypeInfo a where - write_type_info :: a !*File -> !*File + write_type_info :: a !*File !*WriteTypeInfoState -> (!*File,!*WriteTypeInfoState) instance WriteTypeInfo CommonDefs where - write_type_info {com_type_defs,com_cons_defs,com_selector_defs} tcl_file - # tcl_file - = write_type_info com_type_defs tcl_file - # tcl_file - = write_type_info com_cons_defs tcl_file - # tcl_file - = write_type_info com_selector_defs tcl_file - = tcl_file + write_type_info {com_type_defs,com_cons_defs,com_selector_defs} tcl_file wtis + # (tcl_file,wtis) + = write_type_info com_type_defs tcl_file wtis + # (tcl_file,wtis) + = write_type_info com_cons_defs tcl_file wtis + # (tcl_file,wtis) + = write_type_info com_selector_defs tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo SelectorDef where - write_type_info {sd_type} tcl_file - # tcl_file - = write_type_info sd_type tcl_file - = tcl_file + write_type_info {sd_type} tcl_file wtis + # (tcl_file,wtis) + = write_type_info sd_type tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo ConsDef where - write_type_info {cons_symb,cons_type,cons_arg_vars,cons_priority,cons_index,cons_type_index,cons_exi_vars} tcl_file - # tcl_file - = write_type_info cons_symb tcl_file - # tcl_file - = write_type_info cons_type tcl_file - # tcl_file - = write_type_info cons_arg_vars tcl_file - # tcl_file - = write_type_info cons_priority tcl_file + write_type_info {cons_symb,cons_type,cons_arg_vars,cons_priority,cons_index,cons_type_index,cons_exi_vars} tcl_file wtis=:{wtis_n_type_vars} + // normalize ... + # (th_vars,wtis) + = sel_type_var_heap wtis + # (_,(_,th_vars)) + = mapSt normalize_type_var cons_exi_vars (wtis_n_type_vars,th_vars) + # wtis + = { wtis & + wtis_type_heaps = { wtis.wtis_type_heaps & th_vars = th_vars } + } + // ... normalize - # tcl_file - = write_type_info cons_index tcl_file - # tcl_file - = write_type_info cons_type_index tcl_file - # tcl_file - = write_type_info cons_exi_vars tcl_file + # (tcl_file,wtis) + = write_type_info cons_symb tcl_file wtis + # (tcl_file,wtis) + = write_type_info cons_type tcl_file wtis + # (tcl_file,wtis) + = write_type_info cons_arg_vars tcl_file wtis +// # (tcl_file,wtis) +// = write_type_info cons_priority tcl_file wtis + + # (tcl_file,wtis) + = write_type_info cons_index tcl_file wtis + # (tcl_file,wtis) + = write_type_info cons_type_index tcl_file wtis + # (tcl_file,wtis) + = write_type_info cons_exi_vars tcl_file wtis - = tcl_file + = (tcl_file,wtis) +/* instance WriteTypeInfo Priority where - write_type_info (Prio assoc i) tcl_file + write_type_info (Prio assoc i) tcl_file wtis # tcl_file = fwritec PrioCode tcl_file - # tcl_file - = write_type_info assoc tcl_file - # tcl_file - = write_type_info i tcl_file - = tcl_file - write_type_info NoPrio tcl_file - # tcl_file - = fwritec NoPrioCode tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info assoc tcl_file wtis + # (tcl_file,wtis) + = write_type_info i tcl_file wtis + = (tcl_file,wtis) + write_type_info NoPrio tcl_file wtis + # tcl_file + = fwritec NoPrioCode tcl_file + = (tcl_file,wtis) instance WriteTypeInfo Assoc where - write_type_info LeftAssoc tcl_file + write_type_info LeftAssoc tcl_file wtis # tcl_file - = fwritec LeftAssocCode tcl_file - = tcl_file + = fwritec LeftAssocCode tcl_file + = (tcl_file,wtis) - write_type_info RightAssoc tcl_file + write_type_info RightAssoc tcl_file wtis # tcl_file = fwritec RightAssocCode tcl_file - = tcl_file + = (tcl_file,wtis) - write_type_info NoAssoc tcl_file + write_type_info NoAssoc tcl_file wtis # tcl_file - = fwritec NoAssocCode tcl_file - = tcl_file + = fwritec NoAssocCode tcl_file + = (tcl_file,wtis) +*/ //1.3 instance WriteTypeInfo TypeDef TypeRhs @@ -132,232 +123,273 @@ instance WriteTypeInfo TypeDef TypeRhs instance WriteTypeInfo (TypeDef TypeRhs) 0.2*/ where - write_type_info {td_name,td_arity,td_args,td_rhs} tcl_file - #! tcl_file - = write_type_info td_name tcl_file - #! tcl_file - = write_type_info td_arity tcl_file - #! tcl_file - = write_type_info td_args tcl_file - #! tcl_file - = write_type_info td_rhs tcl_file - = tcl_file + write_type_info {td_name,td_arity,td_args,td_rhs} tcl_file wtis + // normalize ... + # (th_vars,wtis) + = sel_type_var_heap wtis + # (_,(n_type_vars,th_vars)) + = mapSt normalize_type_var td_args (0,th_vars) + # wtis + = { wtis & + wtis_type_heaps = { wtis.wtis_type_heaps & th_vars = th_vars } + , wtis_n_type_vars = n_type_vars + } + // ... normalize + # (tcl_file,wtis) + = write_type_info td_name tcl_file wtis + # (tcl_file,wtis) + = write_type_info td_arity tcl_file wtis + # (tcl_file,wtis) + = write_type_info td_args tcl_file wtis + # (tcl_file,wtis) + = write_type_info td_rhs tcl_file wtis + + = (tcl_file,wtis) + +normalize_type_var :: !ATypeVar (!Int,!*TypeVarHeap) -> (!Int,(!Int,!*TypeVarHeap)) +normalize_type_var td_arg=:{atv_variable={tv_info_ptr}} (id,th_vars) + # th_vars + = writePtr tv_info_ptr (TVI_Normalized id) th_vars + = (id,(inc id,th_vars)); + +sel_type_var_heap :: !*WriteTypeInfoState -> (!*TypeVarHeap,!*WriteTypeInfoState) +sel_type_var_heap wtis=:{wtis_type_heaps} + # (th_vars,wtis_type_heaps) + = sel wtis_type_heaps + = (th_vars,{ wtis & wtis_type_heaps = wtis_type_heaps} ) + + where + sel wtis_type_heaps=:{th_vars} + = (th_vars,{ wtis_type_heaps & th_vars = newHeap } ) + instance WriteTypeInfo ATypeVar where - write_type_info {atv_annotation,atv_variable} tcl_file - #! tcl_file - = write_type_info atv_annotation tcl_file - #! tcl_file - = write_type_info atv_variable tcl_file - = tcl_file + write_type_info {atv_annotation,atv_variable} tcl_file wtis + # (tcl_file,wtis) + = write_type_info atv_annotation tcl_file wtis + # (tcl_file,wtis) + = write_type_info atv_variable tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo Annotation where - write_type_info AN_Strict tcl_file - = fwritec '!' tcl_file - write_type_info AN_None tcl_file - = fwritec ' ' tcl_file + write_type_info AN_Strict tcl_file wtis + = (fwritec '!' tcl_file,wtis) + write_type_info AN_None tcl_file wtis + = (fwritec ' ' tcl_file,wtis) instance WriteTypeInfo TypeVar where - write_type_info {tv_name} tcl_file - // writing tv_name as number suffices - = write_type_info tv_name tcl_file - + write_type_info {tv_info_ptr} tcl_file wtis + # (th_vars,wtis) + = sel_type_var_heap wtis + # ( v,th_vars) + = readPtr tv_info_ptr th_vars + # tcl_file + = fwritei (get_type_var_nf_number v) tcl_file + + # wtis + = { wtis & + wtis_type_heaps = { wtis.wtis_type_heaps & th_vars = th_vars } + } + = (tcl_file,wtis) + where + get_type_var_nf_number (TVI_Normalized i) = i + instance WriteTypeInfo TypeRhs where - write_type_info (AlgType defined_symbols) tcl_file - #! tcl_file - = fwritec AlgTypeCode tcl_file; + write_type_info (AlgType defined_symbols) tcl_file wtis + # tcl_file + = fwritec AlgTypeCode tcl_file # defined_symbols = (sortBy (\{ds_ident={id_name=id_name1}} {ds_ident={id_name=id_name2}} -> id_name1 < id_name2) defined_symbols) - # tcl_file - = write_type_info defined_symbols tcl_file + # (tcl_file,wtis) + = write_type_info defined_symbols tcl_file wtis - = tcl_file + = (tcl_file,wtis) - write_type_info (SynType _) tcl_file - #! tcl_file + write_type_info (SynType _) tcl_file wtis + # tcl_file = fwritec SynTypeCode tcl_file; // unimplemented - = tcl_file + = (tcl_file,wtis) - write_type_info (RecordType {rt_fields}) tcl_file + write_type_info (RecordType {rt_fields}) tcl_file wtis #! tcl_file = fwritec RecordTypeCode tcl_file; - = write_type_info rt_fields tcl_file + = write_type_info rt_fields tcl_file wtis - write_type_info (AbstractType _) tcl_file + write_type_info (AbstractType _) tcl_file wtis #! tcl_file = fwritec AbstractTypeCode tcl_file; // unimplemented - = tcl_file + = (tcl_file,wtis) instance WriteTypeInfo DefinedSymbol where - write_type_info {ds_ident,ds_arity,ds_index} tcl_file - # tcl_file - = write_type_info ds_ident tcl_file - # tcl_file - = write_type_info ds_arity tcl_file - # tcl_file - = write_type_info ds_index tcl_file - = tcl_file + write_type_info {ds_ident,ds_arity,ds_index} tcl_file wtis + # (tcl_file,wtis) + = write_type_info ds_ident tcl_file wtis + # (tcl_file,wtis) + = write_type_info ds_arity tcl_file wtis + # (tcl_file,wtis) + = write_type_info ds_index tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo Ident where - write_type_info {id_name} tcl_file + write_type_info {id_name} tcl_file wtis # tcl_file = fwritei (size id_name) tcl_file - = fwrites id_name tcl_file + = (fwrites id_name tcl_file,wtis) instance WriteTypeInfo FieldSymbol where - write_type_info {fs_name,fs_var,fs_index} tcl_file - # tcl_file - = write_type_info fs_name tcl_file - # tcl_file - = write_type_info fs_var tcl_file - # tcl_file - = write_type_info fs_index tcl_file - = tcl_file + write_type_info {fs_name,fs_var,fs_index} tcl_file wtis + # (tcl_file,wtis) + = write_type_info fs_name tcl_file wtis + # (tcl_file,wtis) + = write_type_info fs_var tcl_file wtis + # (tcl_file,wtis) + = write_type_info fs_index tcl_file wtis + = (tcl_file,wtis) // NEW -> instance WriteTypeInfo SymbolType where - write_type_info {st_vars,st_args,st_arity,st_result} tcl_file - # tcl_file - = write_type_info st_vars tcl_file - # tcl_file - = write_type_info st_args tcl_file - # tcl_file - = write_type_info st_arity tcl_file - # tcl_file - = write_type_info st_result tcl_file - = tcl_file + write_type_info {st_vars,st_args,st_arity,st_result} tcl_file wtis + # (tcl_file,wtis) + = write_type_info st_vars tcl_file wtis + # (tcl_file,wtis) + = write_type_info st_args tcl_file wtis + # (tcl_file,wtis) + = write_type_info st_arity tcl_file wtis + # (tcl_file,wtis) + = write_type_info st_result tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo AType where - write_type_info {at_annotation,at_type} tcl_file - # tcl_file - = write_type_info at_annotation tcl_file - # tcl_file - = write_type_info at_type tcl_file - = tcl_file + write_type_info {at_annotation,at_type} tcl_file wtis + # (tcl_file,wtis) + = write_type_info at_annotation tcl_file wtis + # (tcl_file,wtis) + = write_type_info at_type tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo Type where - write_type_info (TA type_symb_ident atypes) tcl_file + write_type_info (TA type_symb_ident atypes) tcl_file wtis # tcl_file = fwritec TypeTACode tcl_file - # tcl_file - = write_type_info type_symb_ident tcl_file - # tcl_file - = write_type_info atypes tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type_symb_ident tcl_file wtis + # (tcl_file,wtis) + = write_type_info atypes tcl_file wtis + = (tcl_file,wtis) - write_type_info (atype1 --> atype2) tcl_file + write_type_info (atype1 --> atype2) tcl_file wtis # tcl_file = fwritec TypeArrowCode tcl_file - # tcl_file - = write_type_info atype1 tcl_file - # tcl_file - = write_type_info atype2 tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info atype1 tcl_file wtis + # (tcl_file,wtis) + = write_type_info atype2 tcl_file wtis + = (tcl_file,wtis) - write_type_info (cons_variable :@: atypes) tcl_file + write_type_info (cons_variable :@: atypes) tcl_file wtis # tcl_file = fwritec TypeConsApplyCode tcl_file - # tcl_file - = write_type_info cons_variable tcl_file - # tcl_file - = write_type_info atypes tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info cons_variable tcl_file wtis + # (tcl_file,wtis) + = write_type_info atypes tcl_file wtis + = (tcl_file,wtis) - write_type_info tb=:(TB basic_type) tcl_file - # tcl_file + write_type_info tb=:(TB basic_type) tcl_file wtis + # (tcl_file,wtis) = case basic_type of - BT_Int -> fwritec BT_IntCode tcl_file - BT_Char -> fwritec BT_CharCode tcl_file - BT_Real -> fwritec BT_RealCode tcl_file - BT_Bool -> fwritec BT_BoolCode tcl_file - BT_Dynamic -> fwritec BT_DynamicCode tcl_file - BT_File -> fwritec BT_FileCode tcl_file - BT_World -> fwritec BT_WorldCode tcl_file + BT_Int -> (fwritec BT_IntCode tcl_file,wtis) + BT_Char -> (fwritec BT_CharCode tcl_file,wtis) + BT_Real -> (fwritec BT_RealCode tcl_file,wtis) + BT_Bool -> (fwritec BT_BoolCode tcl_file,wtis) + BT_Dynamic -> (fwritec BT_DynamicCode tcl_file,wtis) + BT_File -> (fwritec BT_FileCode tcl_file,wtis) + BT_World -> (fwritec BT_WorldCode tcl_file,wtis) BT_String type # tcl_file = fwritec BT_StringCode tcl_file - # tcl_file - = write_type_info type tcl_file - -> tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type tcl_file wtis + -> (tcl_file,wtis) + = (tcl_file,wtis) - write_type_info (GTV type_var) tcl_file + write_type_info (GTV type_var) tcl_file wtis # tcl_file = fwritec TypeGTVCode tcl_file - # tcl_file - = write_type_info type_var tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type_var tcl_file wtis + = (tcl_file,wtis) - write_type_info (TV type_var) tcl_file + write_type_info (TV type_var) tcl_file wtis # tcl_file = fwritec TypeTVCode tcl_file - # tcl_file - = write_type_info type_var tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type_var tcl_file wtis + = (tcl_file,wtis) - write_type_info (TQV type_var) tcl_file + write_type_info (TQV type_var) tcl_file wtis # tcl_file = fwritec TypeTQVCode tcl_file - # tcl_file - = write_type_info type_var tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type_var tcl_file wtis + = (tcl_file,wtis) - write_type_info TE tcl_file + write_type_info TE tcl_file wtis # tcl_file = fwritec TypeTECode tcl_file - = tcl_file + = (tcl_file,wtis) instance WriteTypeInfo ConsVariable where - write_type_info (CV type_var) tcl_file + write_type_info (CV type_var) tcl_file wtis # tcl_file = fwritec ConsVariableCVCode tcl_file - # tcl_file - = write_type_info type_var tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info type_var tcl_file wtis + = (tcl_file,wtis) - write_type_info (TempCV temp_var_id) tcl_file + write_type_info (TempCV temp_var_id) tcl_file wtis # tcl_file = fwritec ConsVariableTempCVCode tcl_file - # tcl_file - = write_type_info temp_var_id tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info temp_var_id tcl_file wtis + = (tcl_file,wtis) - write_type_info (TempQCV temp_var_id) tcl_file + write_type_info (TempQCV temp_var_id) tcl_file wtis # tcl_file = fwritec ConsVariableTempQCVCode tcl_file - # tcl_file - = write_type_info temp_var_id tcl_file - = tcl_file + # (tcl_file,wtis) + = write_type_info temp_var_id tcl_file wtis + = (tcl_file,wtis) instance WriteTypeInfo TypeSymbIdent where - write_type_info {type_name,type_arity} tcl_file - # tcl_file - = write_type_info type_name tcl_file - # tcl_file - = write_type_info type_arity tcl_file - = tcl_file + write_type_info {type_name,type_arity} tcl_file wtis + # (tcl_file,wtis) + = write_type_info type_name tcl_file wtis + # (tcl_file,wtis) + = write_type_info type_arity tcl_file wtis + = (tcl_file,wtis) /*2.0 instance WriteTypeInfo String where - write_type_info s tcl_file + write_type_info s tcl_file wtis # tcl_file = fwritei (size s) tcl_file = fwrites s tcl_file @@ -369,8 +401,8 @@ where // basic and structural write_type_info's instance WriteTypeInfo Int where - write_type_info i tcl_file - = fwritei i tcl_file + write_type_info i tcl_file wtis + = (fwritei i tcl_file,wtis) //1.3 instance WriteTypeInfo {#b} | select_u, size_u, WriteTypeInfo b @@ -379,39 +411,39 @@ instance WriteTypeInfo {#b} | select_u, size_u, WriteTypeInfo b instance WriteTypeInfo {#b} | WriteTypeInfo b & Array {#} b 0.2*/ where - write_type_info unboxed_array tcl_file + write_type_info unboxed_array tcl_file wtis # s_unboxed_array = size unboxed_array # tcl_file = fwritei s_unboxed_array tcl_file - = write_type_info_loop 0 s_unboxed_array tcl_file + = write_type_info_loop 0 s_unboxed_array tcl_file wtis where - write_type_info_loop i limit tcl_file + write_type_info_loop i limit tcl_file wtis | i == limit - = tcl_file - # tcl_file - = write_type_info unboxed_array.[i] tcl_file - = write_type_info_loop (inc i) limit tcl_file + = (tcl_file,wtis) + # (tcl_file,wtis) + = write_type_info unboxed_array.[i] tcl_file wtis + = write_type_info_loop (inc i) limit tcl_file wtis instance WriteTypeInfo [a] | WriteTypeInfo a where - write_type_info l tcl_file + write_type_info l tcl_file wtis # tcl_file = fwritei (length l) tcl_file - = write_type_info_loop l tcl_file + = write_type_info_loop l tcl_file wtis where - write_type_info_loop [] tcl_file - = tcl_file - write_type_info_loop [x:xs] tcl_file - # tcl_file - = write_type_info x tcl_file - = write_type_info_loop xs tcl_file + write_type_info_loop [] tcl_file wtis + = (tcl_file,wtis) + write_type_info_loop [x:xs] tcl_file wtis + # (tcl_file,wtis) + = write_type_info x tcl_file wtis + = write_type_info_loop xs tcl_file wtis instance WriteTypeInfo Char where - write_type_info c tcl_file + write_type_info c tcl_file wtis # tcl_file = fwritec c tcl_file; - = tcl_file; + = (tcl_file,wtis); diff --git a/frontend/type_io_common.dcl b/frontend/type_io_common.dcl index 65b0225..ef22a29 100644 --- a/frontend/type_io_common.dcl +++ b/frontend/type_io_common.dcl @@ -2,6 +2,7 @@ definition module type_io_common from StdChar import toChar +/* // Priority PrioCode :== toChar 0 NoPrioCode :== toChar 1 @@ -10,6 +11,7 @@ NoPrioCode :== toChar 1 LeftAssocCode :== toChar 2 RightAssocCode :== toChar 3 NoAssocCode :== toChar 4 +*/ // TypeRhs AlgTypeCode :== (toChar 5) diff --git a/frontend/type_io_common.icl b/frontend/type_io_common.icl index ed5c18e..209dc2d 100644 --- a/frontend/type_io_common.icl +++ b/frontend/type_io_common.icl @@ -3,6 +3,7 @@ implementation module type_io_common // common between compiler and static linker from StdChar import toChar +/* // Priority PrioCode :== toChar 0 NoPrioCode :== toChar 1 @@ -11,6 +12,7 @@ NoPrioCode :== toChar 1 LeftAssocCode :== toChar 2 RightAssocCode :== toChar 3 NoAssocCode :== toChar 4 +*/ // TypeRhs AlgTypeCode :== (toChar 5) |