/*
	module owner: Martijn Vervoort
*/
definition module type_io_common

// common between compiler and static linker
/*
import StdEnv
import syntax
import StdOverloaded
*/
from StdOverloaded import class toChar (toChar), class == (==), class +++ (+++)

APPEND_DEFINING_TYPE_MODULE_NAMES_TO_TYPE_NAMES yes no :== yes

/*
// Priority
PrioCode						:== toChar 0
NoPrioCode						:== toChar 1

// Assoc
LeftAssocCode					:== toChar 2
RightAssocCode					:== toChar 3
NoAssocCode						:== toChar 4
*/

// TypeRhs
AlgTypeCode						:== (toChar 5)
SynTypeCode 					:== (toChar 6)
RecordTypeCode					:== (toChar 7)
AbstractTypeCode				:== (toChar 8)
GenericDictionaryTypeCode		:== '\x25'

// Type
//TypeTACode						:== (toChar 9)		// TA
TypeTASCode						:== (toChar 10)		// TAS
TypeArrowCode 					:== (toChar 11)		// -->
TypeConsApplyCode				:== (toChar 12)		// :@:
TypeTBCode						:== (toChar 13)		// TB
TypeGTVCode						:== (toChar 14)		// GTV
TypeTVCode						:== (toChar 15)		// TV
TypeTQVCode						:== (toChar 16)		// TempTQV
TypeTECode						:== (toChar 17)		// TE
GenericFunctionTypeCode			:== '\x24'			// TGenericFunction

// Type; TB
BT_IntCode						:== (toChar 18)	
BT_CharCode						:== (toChar 19)
BT_RealCode						:== (toChar 20)
BT_BoolCode						:== (toChar 21)
BT_DynamicCode					:== (toChar 22)
BT_FileCode						:== (toChar 23)
BT_WorldCode					:== (toChar 24)
BT_StringCode					:== (toChar 25)

// ConsVariable	
ConsVariableCVCode				:== (toChar 26)	
ConsVariableTempCVCode			:== (toChar 27)
ConsVariableTempQCVCode			:== (toChar 28)

// TypeSymbIdent
TypeSymbIdentWithoutDefinition	:== (toChar 29)		// valid only for predefined in PD_PredefinedModule e.g. _String, _List
TypeSymbIdentWithDefinition		:== (toChar 30)		// for all types which have definitions in some .icl-module

// Maybe
MaybeNoneCode					:== (toChar 31)
MaybeJustCode					:== (toChar 32)

// StrictnessList
NotStrictCode					:== (toChar 33)
StrictCode						:== (toChar 34)
StrictListCode					:== (toChar 35)

// used by {compiler,dynamic rts} to make String representation of types
PredefinedModuleName			:== "_predefined"

isPredefinedModuleName name		:== name == PredefinedModuleName

UnderscoreSystemModule			:== "_system"		// implements the predefined module

LowLevelInterfaceModule			:== "StdDynamicLowLevelInterface"

FunctionTypeConstructorAsString	:== " -> "
 
// instance toString GlobalTCType

create_type_string type_name module_name
	:== if (type_name == FunctionTypeConstructorAsString)
			type_name
			(type_name +++ (APPEND_DEFINING_TYPE_MODULE_NAMES_TO_TYPE_NAMES ("'" +++ module_name ) ""))

get_type_name_and_module_name_from_type_string :: !String -> (!String,!String)

