aboutsummaryrefslogtreecommitdiff
path: root/frontend
diff options
context:
space:
mode:
Diffstat (limited to 'frontend')
-rw-r--r--frontend/convertDynamics.dcl2
-rw-r--r--frontend/convertDynamics.icl3
-rw-r--r--frontend/convertcases.dcl3
-rw-r--r--frontend/convertcases.icl26
-rw-r--r--frontend/syntax.dcl30
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