diff options
Diffstat (limited to 'frontend/checksupport.dcl')
-rw-r--r-- | frontend/checksupport.dcl | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/frontend/checksupport.dcl b/frontend/checksupport.dcl new file mode 100644 index 0000000..32db0be --- /dev/null +++ b/frontend/checksupport.dcl @@ -0,0 +1,136 @@ +definition module checksupport + +import StdEnv +import syntax, predef + +cIclModIndex :== 0 // MW++ + +CS_NotChecked :== -1 +NotFound :== -1 + +cModuleScope :== 0 +cGlobalScope :== 1 + +cIsNotADclModule :== False // MW++ +cIsADclModule :== True // MW++ + +:: VarHeap :== Heap VarInfo + +:: Heaps = + { hp_var_heap ::!.VarHeap + , hp_expression_heap ::!.ExpressionHeap + , hp_type_heaps ::!.TypeHeaps + } + +:: ErrorAdmin = { ea_file :: !.File, ea_loc :: ![IdentPos], ea_ok :: !Bool } + +:: CheckState = { cs_symbol_table :: !.SymbolTable, cs_predef_symbols :: !.PredefinedSymbols, cs_error :: !.ErrorAdmin } + +// SymbolTable :== {# SymbolTableEntry} + +instance == STE_Kind + +:: ConversionTable :== {# .{# Int }} + +cTypeDefs :== 0 +cConstructorDefs :== 1 +cSelectorDefs :== 2 +cClassDefs :== 3 +cMemberDefs :== 4 +cInstanceDefs :== 5 +cFunctionDefs :== 6 +cMacroDefs :== 7 + +cConversionTableSize :== 8 + +:: CommonDefs = + { com_type_defs :: !.{# CheckedTypeDef} + , com_cons_defs :: !.{# ConsDef} + , com_selector_defs :: !.{# SelectorDef} + , com_class_defs :: !.{# ClassDef} + , com_member_defs :: !.{# MemberDef} + , com_instance_defs :: !.{# ClassInstance} +// , com_instance_types :: !.{ SymbolType} + } + +:: Declaration = + { dcl_ident :: !Ident + , dcl_kind :: !STE_Kind + , dcl_index :: !Index + } + +:: Declarations = + { dcls_import ::![Declaration] + , dcls_local ::![Declaration] + , dcls_explicit ::![(!Declaration, !LineNr)] // MW++ + } + +:: IclModule = + { icl_name :: !Ident + , icl_functions :: !.{# FunDef } + , icl_instances :: !IndexRange + , icl_specials :: !IndexRange + , icl_common :: !.CommonDefs + , icl_declared :: !Declarations +// RWS ... + , icl_imported_objects :: ![ImportedObject] +// ... RWS + } + +:: DclModule = + { dcl_name :: !Ident + , dcl_functions :: !{# FunType } + , dcl_instances :: !IndexRange + , dcl_macros :: !IndexRange + , dcl_class_specials :: !IndexRange + , dcl_specials :: !IndexRange + , dcl_common :: !CommonDefs + , dcl_declared :: !Declarations + , dcl_conversions :: !Optional ConversionTable + , dcl_is_system :: !Bool + } + +class Erroradmin state +where + pushErrorAdmin :: !IdentPos *state -> *state + setErrorAdmin :: !IdentPos *state -> *state + popErrorAdmin :: *state -> *state + +instance Erroradmin ErrorAdmin, CheckState + +newPosition :: !Ident !Position -> IdentPos + +checkError :: !a !b !*ErrorAdmin -> *ErrorAdmin | <<< a & <<< b +checkWarning :: !a !b !*ErrorAdmin -> *ErrorAdmin | <<< a & <<< b + +class envLookUp a :: !a !(Env Ident .b) -> (!Bool,.b) + +instance envLookUp TypeVar, AttributeVar, ATypeVar + +class toIdent a :: !a -> Ident + +instance toIdent ConsDef, TypeDef a, ClassDef, MemberDef, FunDef, SelectorDef // , ClassInstance +instance toIdent SymbIdent, TypeSymbIdent, BoundVar, TypeVar, ATypeVar, Ident + +instance toInt STE_Kind +instance <<< STE_Kind +instance <<< IdentPos + +// MW.. +retrieveAndRemoveImportsFromSymbolTable :: ![(.a,.Declarations)] [Declaration] *(Heap SymbolTableEntry) -> ([Declaration],.Heap SymbolTableEntry); +retrieveAndRemoveImportsOfModuleFromSymbolTable :: ![.Declaration] ![.Declaration] ![.Declaration] !*(Heap SymbolTableEntry) -> ([Declaration],.Heap SymbolTableEntry); +addLocalFunctionDefsToSymbolTable :: Level Index .Index u:(a FunDef) *SymbolTable *ErrorAdmin -> (v:(a FunDef),.SymbolTable,.ErrorAdmin) | Array .a, [u <= v]; +addDefToSymbolTable :: !Level !Index !Ident !STE_Kind !*SymbolTable !*ErrorAdmin -> (!* SymbolTable, !*ErrorAdmin) +addDeclaredSymbolsToSymbolTable :: .Bool .Int ![.Declaration] ![.Declaration] !*CheckState -> .CheckState; +addLocalSymbolsToSymbolTable :: ![.Declaration] Int !*CheckState -> .CheckState; +addImportedFunctionOrMacro :: !Ident .Int !*CheckState -> .CheckState; +addFieldToSelectorDefinition :: !Ident (Global .Int) !*CheckState -> .CheckState; +addImportedSymbol :: !Ident STE_Kind .Int .Int !*CheckState -> .CheckState; +addGlobalDefinitionsToSymbolTable :: ![.Declaration] !*CheckState -> .CheckState; +retrieveImportsFromSymbolTable :: ![Import ImportDeclaration] ![Declaration] !*{#DclModule} !*(Heap SymbolTableEntry) -> *(![Declaration],!*{#DclModule},!*Heap SymbolTableEntry); +removeFieldFromSelectorDefinition :: !Ident .Int .Int !*(Heap SymbolTableEntry) -> .Heap SymbolTableEntry; +removeDeclarationsFromSymbolTable :: ![Declaration] !Int !*(Heap SymbolTableEntry) -> *Heap SymbolTableEntry; +removeLocalIdentsFromSymbolTable :: .Int !.[Ident] !*(Heap SymbolTableEntry) -> .Heap SymbolTableEntry; +removeLocalsFromSymbolTable :: .Level .[Ident] LocalDefs u:(a b) *(Heap SymbolTableEntry) -> (v:(a b),.Heap SymbolTableEntry) | Array .a & select_u , toIdent b, [u <= v]; +removeIdentFromSymbolTable :: !.Int !Ident !*(Heap SymbolTableEntry) -> .Heap SymbolTableEntry; +// ..MW
\ No newline at end of file |