diff options
Diffstat (limited to 'frontend')
-rw-r--r-- | frontend/convertDynamics.dcl | 2 | ||||
-rw-r--r-- | frontend/convertDynamics.icl | 3 | ||||
-rw-r--r-- | frontend/convertcases.dcl | 3 | ||||
-rw-r--r-- | frontend/convertcases.icl | 26 | ||||
-rw-r--r-- | frontend/syntax.dcl | 30 |
5 files changed, 37 insertions, 27 deletions
diff --git a/frontend/convertDynamics.dcl b/frontend/convertDynamics.dcl index cfdface..e00a065 100644 --- a/frontend/convertDynamics.dcl +++ b/frontend/convertDynamics.dcl @@ -5,6 +5,8 @@ definition module convertDynamics import syntax, transform +:: TypeCodeVariableInfo +:: DynamicValueAliasInfo convertDynamicPatternsIntoUnifyAppls :: {! GlobalTCType} !{# CommonDefs} !Int !*{! Group} !*{#FunDef} !*PredefinedSymbols !*VarHeap !*TypeHeaps !*ExpressionHeap (Optional *File) {# DclModule} !IclModule /* TD */ [String] -> (!*{! Group}, !*{#FunDef}, !*PredefinedSymbols, !*{#{# CheckedTypeDef}}, !ImportedConstructors, !*VarHeap, !*TypeHeaps, !*ExpressionHeap, Optional *File) diff --git a/frontend/convertDynamics.icl b/frontend/convertDynamics.icl index 9ab46a1..3c04535 100644 --- a/frontend/convertDynamics.icl +++ b/frontend/convertDynamics.icl @@ -17,6 +17,9 @@ import type_io; from type_io_common import class toString (..),instance toString GlobalTCType; 0.2*/ +:: TypeCodeVariableInfo = TCI_TypeTerm | TCI_TypeVar !Expression +:: DynamicValueAliasInfo :== BoundVar + :: *ConversionState = { ci_predef_symb :: !*PredefinedSymbols , ci_var_heap :: !*VarHeap diff --git a/frontend/convertcases.dcl b/frontend/convertcases.dcl index 6eb53ae..7c88870 100644 --- a/frontend/convertcases.dcl +++ b/frontend/convertcases.dcl @@ -5,6 +5,9 @@ definition module convertcases import syntax, transform +:: LetVarInfo +:: LetExpressionInfo + convertCasesOfFunctions :: !*{! Group} !Int !{# {# FunType} } !{# CommonDefs} !*{#FunDef} !*{#{# CheckedTypeDef}} !ImportedConstructors !*VarHeap !*TypeHeaps !*ExpressionHeap -> (!ImportedFunctions, !*{! Group}, !*{#FunDef}, !*{#{# CheckedTypeDef}}, !ImportedConstructors, !*VarHeap, !*TypeHeaps, !*ExpressionHeap) diff --git a/frontend/convertcases.icl b/frontend/convertcases.icl index 775ea55..d6482d7 100644 --- a/frontend/convertcases.icl +++ b/frontend/convertcases.icl @@ -126,6 +126,21 @@ convertCasesInBody (TransformedBody body) (Yes type) group_index common_defs cs , rcs_expr_heap :: !.ExpressionHeap } +:: LetVarInfo = + { lvi_count :: !Int + , lvi_depth :: !Int + , lvi_new :: !Bool + , lvi_var :: !Ident + , lvi_expression :: !Expression + , lvi_previous :: ![PreviousLetVarInfo] + } + +:: PreviousLetVarInfo = + { plvi_count :: !Int + , plvi_depth :: !Int + , plvi_new :: !Bool + } + checkImportedSymbol :: SymbKind VarInfoPtr ([SymbKind], *VarHeap) -> ([SymbKind], *VarHeap) checkImportedSymbol symb_kind symb_type_ptr (collected_imports, var_heap) # (type_info, var_heap) = readPtr symb_type_ptr var_heap @@ -421,6 +436,17 @@ where only if the expr is neither used in the pattern nor in a surrounding expr. */ +:: LetExpressionStatus = LES_Untouched | LES_Moved | LES_Updated !Expression + +:: LetExpressionInfo = + { lei_count :: !Int + , lei_depth :: !Int + , lei_var :: !FreeVar + , lei_expression :: !Expression + , lei_status :: !LetExpressionStatus + , lei_type :: !AType + } + :: DistributeState = { ds_lets :: ![VarInfoPtr] , ds_var_heap :: !.VarHeap diff --git a/frontend/syntax.dcl b/frontend/syntax.dcl index 43198b6..4cad98a 100644 --- a/frontend/syntax.dcl +++ b/frontend/syntax.dcl @@ -599,7 +599,7 @@ pIsSafe :== True :: AP_Kind = APK_Constructor !Index | APK_Macro !Bool // is_dcl_macro -:: TypeCodeVariableInfo = TCI_TypeTerm | TCI_TypeVar !Expression +from convertDynamics import :: TypeCodeVariableInfo, :: DynamicValueAliasInfo :: VarInfo = VI_Empty | VI_Type !AType !(Optional CoercionPosition) | VI_FAType ![ATypeVar] !AType !(Optional CoercionPosition) | VI_Occurrence !Occurrence | VI_UsedVar !Ident | @@ -620,7 +620,7 @@ pIsSafe :== True VI_Record ![AuxiliaryPattern] | VI_Pattern !AuxiliaryPattern | VI_TypeCodeVariable !TypeCodeVariableInfo | - VI_DynamicValueAlias !BoundVar | + VI_DynamicValueAlias !DynamicValueAliasInfo | VI_Body !SymbIdent !TransformedBody ![FreeVar] | /* used during fusion */ VI_Dictionary !SymbIdent ![Expression] !Type | /* used during fusion */ VI_Extended !ExtendedVarInfo !VarInfo | @@ -637,31 +637,7 @@ pIsSafe :== True :: VarInfoPtr :== Ptr VarInfo -:: LetVarInfo = - { lvi_count :: !Int - , lvi_depth :: !Int - , lvi_new :: !Bool - , lvi_var :: !Ident - , lvi_expression :: !Expression - , lvi_previous :: ![PreviousLetVarInfo] - } - -:: PreviousLetVarInfo = - { plvi_count :: !Int - , plvi_depth :: !Int - , plvi_new :: !Bool - } - -:: LetExpressionStatus = LES_Untouched | LES_Moved | LES_Updated !Expression - -:: LetExpressionInfo = - { lei_count :: !Int - , lei_depth :: !Int - , lei_var :: !FreeVar - , lei_expression :: !Expression - , lei_status :: !LetExpressionStatus - , lei_type :: !AType - } +from convertcases import :: LetVarInfo, :: LetExpressionInfo cNotVarNumber :== -1 |