#include <Type.h>
Public Types | |
enum | type_kind { UnspecT = 0, ErrorT, AnyT, BooleanT, ByteblockT, FloatT, IntegerT, LocaleT, PathT, StringT, SymbolT, TermT, VoidT, WildcardT, FlexT, VariableT, ListT, MapT, BlockT, TupleT, FunctionT, NilT, NFlexT } |
typedef enum Type::type_kind | tkind |
Public Member Functions | |
Type () | |
Type (tkind kind, bytecodeistream &str) | |
virtual | ~Type () |
virtual string | toString () const |
virtual string | toXmlString () const |
virtual std::ostream & | toStream (std::ostream &str) const |
virtual std::ostream & | toXml (std::ostream &str, int indent) const |
virtual bool | isBasetype () const |
virtual constTypePtr | matchFlex (constTypePtr, unsigned int=0) const |
virtual int | match (constTypePtr expected) const |
virtual int | matchvalue (YCPValue value) const |
virtual bool | canCast (constTypePtr to) const |
virtual TypePtr | clone () const |
virtual constTypePtr | unflex (constTypePtr type, unsigned int number=0) const |
string | preToString () const |
string | postToString () const |
bool | isConst () const |
void | asConst () |
bool | isReference () const |
void | asReference () |
int | basematch (constTypePtr expected) const |
virtual bool | equals (constTypePtr expected) const |
bool | isUnspec () const |
bool | isError () const |
bool | isAny () const |
bool | isBoolean () const |
bool | isByteblock () const |
bool | isFloat () const |
bool | isInteger () const |
bool | isLocale () const |
bool | isPath () const |
bool | isString () const |
bool | isSymbol () const |
bool | isTerm () const |
bool | isVoid () const |
bool | isWildcard () const |
bool | isFlex () const |
bool | isNFlex () const |
bool | isVariable () const |
bool | isList () const |
bool | isMap () const |
bool | isBlock () const |
bool | isTuple () const |
bool | isFunction () const |
bool | isNil () const |
YCPValueType | valueType () const |
virtual constTypePtr | commontype (constTypePtr type) const |
virtual constTypePtr | detailedtype (constTypePtr type) const |
Static Public Member Functions | |
static void | setNocheck (bool nocheck) |
static constTypePtr | vt2type (enum YCPValueType vt) |
static int | nextToken (const char **signature) |
static constTypePtr | fromSignature (const char **signature) |
static constTypePtr | fromSignature (const string &signature) |
static constTypePtr | determineFlexType (constFunctionTypePtr actual, constFunctionTypePtr declared) |
static FunctionTypePtr | Function (constTypePtr return_type) |
Static Public Attributes | |
static const constTypePtr | Unspec = TypePtr ( new Type (UnspecT)) |
static const constTypePtr | Error = TypePtr ( new Type (ErrorT)) |
static const constTypePtr | Any = TypePtr ( new Type (AnyT)) |
static const constTypePtr | Void = TypePtr ( new Type (VoidT)) |
static const constTypePtr | Boolean = TypePtr ( new Type (BooleanT)) |
static const constTypePtr | Byteblock = TypePtr ( new Type (ByteblockT)) |
static const constTypePtr | Float = TypePtr ( new Type (FloatT)) |
static const constTypePtr | Integer = TypePtr ( new Type (IntegerT)) |
static const constTypePtr | Locale = TypePtr ( new Type (LocaleT)) |
static const constTypePtr | Path = TypePtr ( new Type (PathT)) |
static const constTypePtr | String = TypePtr ( new Type (StringT)) |
static const constTypePtr | Symbol = TypePtr ( new Type (SymbolT)) |
static const constTypePtr | Term = TypePtr ( new Type (TermT)) |
static const constTypePtr | Wildcard = TypePtr ( new Type (WildcardT)) |
static const constTypePtr | ConstAny = TypePtr ( new Type (AnyT, true)) |
static const constTypePtr | ConstVoid = TypePtr ( new Type (VoidT, true)) |
static const constTypePtr | ConstBoolean = TypePtr ( new Type (BooleanT, true)) |
static const constTypePtr | ConstByteblock = TypePtr ( new Type (ByteblockT, true)) |
static const constTypePtr | ConstFloat = TypePtr ( new Type (FloatT, true)) |
static const constTypePtr | ConstInteger = TypePtr ( new Type (IntegerT, true)) |
static const constTypePtr | ConstLocale = TypePtr ( new Type (LocaleT, true)) |
static const constTypePtr | ConstPath = TypePtr ( new Type (PathT, true)) |
static const constTypePtr | ConstString = TypePtr ( new Type (StringT, true)) |
static const constTypePtr | ConstSymbol = TypePtr ( new Type (SymbolT, true)) |
static const constTypePtr | ConstTerm = TypePtr ( new Type (TermT, true)) |
static const constTypePtr | ConstList = TypePtr ( new Type (ListT, true)) |
static const constTypePtr | ConstMap = TypePtr ( new Type (MapT, true)) |
static const constTypePtr | Flex = TypePtr ( new FlexType()) |
static const constTypePtr | ConstFlex = TypePtr ( new FlexType (true)) |
static const constTypePtr | NFlex1 = TypePtr ( new NFlexType(1)) |
static const constTypePtr | ConstNFlex1 = TypePtr ( new NFlexType (1, true)) |
static const constTypePtr | NFlex2 = TypePtr ( new NFlexType(2)) |
static const constTypePtr | ConstNFlex2 = TypePtr ( new NFlexType (2, true)) |
static const constTypePtr | NFlex3 = TypePtr ( new NFlexType(3)) |
static const constTypePtr | ConstNFlex3 = TypePtr ( new NFlexType (3, true)) |
static const constTypePtr | NFlex4 = TypePtr ( new NFlexType(4)) |
static const constTypePtr | ConstNFlex4 = TypePtr ( new NFlexType (4, true)) |
static const constTypePtr | ListUnspec = new ListType (Type::Unspec) |
static const constTypePtr | List = new ListType (Type::Any) |
static const constTypePtr | MapUnspec = new MapType (Type::Unspec, Type::Unspec) |
static const constTypePtr | Map = new MapType (Type::Any, Type::Any) |
static const constTypePtr | Variable = new VariableType (Type::Any) |
static const constTypePtr | Block = new BlockType (Type::Any) |
static const constTypePtr | Nil = TypePtr ( new Type (NilT)) |
Protected Member Functions | |
Type (tkind kind, bool as_const=false, bool as_reference=false) | |
Protected Attributes | |
tkind | m_kind |
bool | m_const |
bool | m_reference |
Private Member Functions | |
REP_BODY (Type) | |
tkind | kind () const |
typedef enum Type::type_kind Type::tkind |
enum Type::type_kind |
Type::Type | ( | tkind | kind, | |
bool | as_const = false , |
|||
bool | as_reference = false | |||
) | [inline, protected] |
Type::Type | ( | ) |
Type::Type | ( | tkind | kind, | |
bytecodeistream & | str | |||
) |
References m_const, m_kind, m_reference, and y2debug.
Type::~Type | ( | ) | [virtual] |
void Type::asConst | ( | ) | [inline] |
set const qualifier
References m_const.
void Type::asReference | ( | ) | [inline] |
set reference qualifier
References m_reference.
int Type::basematch | ( | constTypePtr | expected | ) | const |
check if base matches with expected type <0: no match, ==0: full match, >0: propagated match
References AnyT, ErrorT, FlexT, isBasetype(), isConst(), isError(), isVoid(), NFlexT, UnspecT, WildcardT, and y2debug.
Referenced by FunctionType::match(), TupleType::match(), BlockType::match(), MapType::match(), ListType::match(), VariableType::match(), and match().
bool Type::canCast | ( | constTypePtr | to | ) | const [virtual] |
check, if the type can be casted (at runtime considered to be - similar to dynamic_cast) to another type
Reimplemented in ListType, MapType, BlockType, TupleType, and FunctionType.
References isAny(), match(), toString(), and y2debug.
TypePtr Type::clone | ( | ) | const [virtual] |
clone this type
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References m_kind.
Referenced by unflex().
constTypePtr Type::commontype | ( | constTypePtr | type | ) | const [virtual] |
constTypePtr Type::detailedtype | ( | constTypePtr | type | ) | const [virtual] |
Finds a type which contains most information This should be the narrowest such type - TODO
Reimplemented in ListType, and MapType.
References isAny(), isUnspec(), isVoid(), match(), toString(), and y2debug.
constTypePtr Type::determineFlexType | ( | constFunctionTypePtr | actual, | |
constFunctionTypePtr | declared | |||
) | [static] |
determine actual type if declared type contains 'flex' or 'flexN' Returns actual - unchanged or fixed
determine actual type if declared type contains flex type Returns actual - unchanged or fixed or NULL on error
symbol | type of a symbol parameter from YEBuiltin, else isUnspec |
References y2debug, and ycp2error.
Referenced by YEBuiltin::finalize(), and YEBinary::type().
bool Type::equals | ( | constTypePtr | expected | ) | const [virtual] |
check equality of the types, without any assumptions like any == unspec
Reimplemented in VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References isBasetype(), and m_kind.
static constTypePtr Type::fromSignature | ( | const string & | signature | ) | [inline, static] |
Construct from a string literal type code
s | eg. string("list <string>") |
References fromSignature().
constTypePtr Type::fromSignature | ( | const char ** | signature | ) | [static] |
Construct from a string literal type code
Construct from a string literal type code
s | eg. "list <string>" |
References Any, AnyT, BlockT, Boolean, BooleanT, Byteblock, ByteblockT, ConstAny, ConstBoolean, ConstByteblock, ConstFlex, ConstFloat, ConstInteger, ConstLocale, ConstNFlex1, ConstNFlex2, ConstNFlex3, ConstNFlex4, ConstPath, ConstString, ConstSymbol, ConstTerm, ConstVoid, Error, ErrorT, Flex, FlexT, Float, FloatT, FunctionT, Integer, IntegerT, ListT, Locale, LocaleT, MapT, nextToken(), NFlex1, NFlex2, NFlex3, NFlex4, Path, PathT, String, StringT, Symbol, SymbolT, Term, TermT, tr(), TupleT, Unspec, UnspecT, VariableT, Void, VoidT, Wildcard, WildcardT, y2debug, and y2error.
Referenced by fromSig(), fromSignature(), and StaticDeclaration::registerDeclarations().
FunctionTypePtr Type::Function | ( | constTypePtr | return_type | ) | [static] |
bool Type::isAny | ( | ) | const [inline] |
Referenced by canCast(), commontype(), detailedtype(), match(), and matchvalue().
virtual bool Type::isBasetype | ( | ) | const [inline, virtual] |
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
Referenced by basematch(), and equals().
bool Type::isBoolean | ( | ) | const [inline] |
bool Type::isByteblock | ( | ) | const [inline] |
bool Type::isConst | ( | ) | const [inline] |
return const qualifier
References m_const.
Referenced by basematch(), NFlexType::unflex(), and FlexType::unflex().
bool Type::isError | ( | ) | const [inline] |
bool Type::isFlex | ( | ) | const [inline] |
bool Type::isFloat | ( | ) | const [inline] |
bool Type::isInteger | ( | ) | const [inline] |
bool Type::isList | ( | ) | const [inline] |
bool Type::isMap | ( | ) | const [inline] |
bool Type::isNFlex | ( | ) | const [inline] |
bool Type::isPath | ( | ) | const [inline] |
bool Type::isReference | ( | ) | const [inline] |
return reference qualifier
References m_reference.
Referenced by NFlexType::unflex(), and FlexType::unflex().
bool Type::isString | ( | ) | const [inline] |
bool Type::isSymbol | ( | ) | const [inline] |
bool Type::isTerm | ( | ) | const [inline] |
bool Type::isUnspec | ( | ) | const [inline] |
bool Type::isVoid | ( | ) | const [inline] |
int Type::match | ( | constTypePtr | expected | ) | const [virtual] |
check match with expected type <0: no match, ==0: full match, >0: propagated match
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References AnyT, basematch(), FlexT, FloatT, IntegerT, isAny(), isFloat(), isInteger(), isLocale(), isString(), isUnspec(), isVoid(), LocaleT, m_kind, NFlexT, StringT, toString(), UnspecT, WildcardT, and y2debug.
Referenced by canCast(), commontype(), and detailedtype().
virtual constTypePtr Type::matchFlex | ( | constTypePtr | , | |
unsigned int | = 0 | |||
) | const [inline, virtual] |
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
int Type::matchvalue | ( | YCPValue | value | ) | const [virtual] |
check match with value <0: no match, ==0: full match, >0: propagated match
References YCPMap::begin(), YCPMap::end(), isAny(), isBoolean(), isByteblock(), isFloat(), isInteger(), isList(), isMap(), YCPElement::isNull(), isPath(), isString(), isSymbol(), isTerm(), m_kind, YCPList::size(), toString(), YCPList::value(), y2debug, YT_BOOLEAN, YT_BYTEBLOCK, YT_CODE, YT_EXTERNAL, YT_FLOAT, YT_INTEGER, YT_LIST, YT_MAP, YT_PATH, YT_RETURN, YT_STRING, YT_SYMBOL, YT_TERM, and YT_VOID.
int Type::nextToken | ( | const char ** | signature | ) | [static] |
signature parser, get next token
signature parser, get next token >= 0 -> tkind -1 -> const -100 (-x) -> NFlex '&' -> reference '<' '>' ',' '(' ')'
References AnyT, BlockT, BooleanT, ByteblockT, ErrorT, FlexT, FloatT, IntegerT, ListT, LocaleT, MapT, PathT, StringT, SymbolT, TermT, TupleT, UnspecT, VariableT, VoidT, and WildcardT.
Referenced by fromSignature().
string Type::postToString | ( | ) | const [inline] |
postfix qualifier
References m_reference.
Referenced by FunctionType::toString(), TupleType::toString(), BlockType::toString(), MapType::toString(), ListType::toString(), NFlexType::toString(), FlexType::toString(), toString(), and toXmlString().
string Type::preToString | ( | ) | const [inline] |
prefix qualifier
References m_const.
Referenced by FunctionType::toString(), TupleType::toString(), BlockType::toString(), MapType::toString(), ListType::toString(), NFlexType::toString(), FlexType::toString(), toString(), and toXmlString().
Type::REP_BODY | ( | Type | ) | [private] |
static void Type::setNocheck | ( | bool | nocheck | ) | [static] |
enable/disable type checking
std::ostream & Type::toStream | ( | std::ostream & | str | ) | const [virtual] |
write bytecode out to stream
write out to bytecode stream
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References m_const, m_kind, m_reference, toString(), Bytecode::writeBool(), Bytecode::writeInt32(), and y2debug.
string Type::toString | ( | void | ) | const [virtual] |
Converts a type code to its YCP notation.
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References AnyT, BlockT, BooleanT, ByteblockT, ErrorT, FlexT, FloatT, FunctionT, IntegerT, ListT, LocaleT, m_kind, MapT, NFlexT, NilT, PathT, postToString(), preToString(), StringT, SymbolT, TermT, TupleT, UnspecT, VariableT, VoidT, and WildcardT.
Referenced by canCast(), commontype(), detailedtype(), match(), matchvalue(), and toStream().
std::ostream & Type::toXml | ( | std::ostream & | str, | |
int | indent | |||
) | const [virtual] |
write xml out to stream
References m_const, m_reference, and toXmlString().
string Type::toXmlString | ( | ) | const [virtual] |
constTypePtr Type::unflex | ( | constTypePtr | type, | |
unsigned int | number = 0 | |||
) | const [virtual] |
replace any 'FlexT' (number == 0) or 'NFlexT' (number != 0) with 'type'
Reimplemented in FlexType, NFlexType, VariableType, ListType, MapType, BlockType, TupleType, and FunctionType.
References clone().
YCPValueType Type::valueType | ( | ) | const |
References AnyT, BlockT, BooleanT, ByteblockT, ErrorT, FlexT, FloatT, FunctionT, IntegerT, ListT, LocaleT, m_kind, MapT, NFlexT, NilT, PathT, StringT, SymbolT, TermT, TupleT, UnspecT, VariableT, VoidT, WildcardT, YT_BOOLEAN, YT_BYTEBLOCK, YT_CODE, YT_ENTRY, YT_ERROR, YT_FLOAT, YT_INTEGER, YT_LIST, YT_MAP, YT_PATH, YT_STRING, YT_SYMBOL, YT_TERM, and YT_VOID.
constTypePtr Type::vt2type | ( | enum YCPValueType | vt | ) | [static] |
convert YCPValueType to Type
References Any, Block, Boolean, Byteblock, Error, Float, Integer, List, Map, Path, String, Symbol, Term, Unspec, Variable, Void, YT_BOOLEAN, YT_BYTEBLOCK, YT_CODE, YT_ENTRY, YT_EXTERNAL, YT_FLOAT, YT_INTEGER, YT_LIST, YT_MAP, YT_PATH, YT_STRING, YT_SYMBOL, YT_TERM, and YT_VOID.
const constTypePtr Type::Block = new BlockType (Type::Any) [static] |
Referenced by vt2type().
const constTypePtr Type::Boolean = TypePtr ( new Type (BooleanT)) [static] |
Referenced by fromSignature(), main(), YEIs::type(), YECompare::type(), and vt2type().
const constTypePtr Type::Byteblock = TypePtr ( new Type (ByteblockT)) [static] |
Referenced by fromSignature(), main(), and vt2type().
const constTypePtr Type::ConstAny = TypePtr ( new Type (AnyT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstBoolean = TypePtr ( new Type (BooleanT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstByteblock = TypePtr ( new Type (ByteblockT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstFlex = TypePtr ( new FlexType (true)) [static] |
Referenced by fromSignature().
const constTypePtr Type::ConstFloat = TypePtr ( new Type (FloatT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstInteger = TypePtr ( new Type (IntegerT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstList = TypePtr ( new Type (ListT, true)) [static] |
const constTypePtr Type::ConstLocale = TypePtr ( new Type (LocaleT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstMap = TypePtr ( new Type (MapT, true)) [static] |
const constTypePtr Type::ConstNFlex1 = TypePtr ( new NFlexType (1, true)) [static] |
Referenced by fromSignature().
const constTypePtr Type::ConstNFlex2 = TypePtr ( new NFlexType (2, true)) [static] |
Referenced by fromSignature().
const constTypePtr Type::ConstNFlex3 = TypePtr ( new NFlexType (3, true)) [static] |
Referenced by fromSignature().
const constTypePtr Type::ConstNFlex4 = TypePtr ( new NFlexType (4, true)) [static] |
Referenced by fromSignature().
const constTypePtr Type::ConstPath = TypePtr ( new Type (PathT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstString = TypePtr ( new Type (StringT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstSymbol = TypePtr ( new Type (SymbolT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstTerm = TypePtr ( new Type (TermT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::ConstVoid = TypePtr ( new Type (VoidT, true)) [static] |
Referenced by fromSignature(), and YConst::type().
const constTypePtr Type::Error = TypePtr ( new Type (ErrorT)) [static] |
const constTypePtr Type::Flex = TypePtr ( new FlexType()) [static] |
Referenced by fromSignature().
const constTypePtr Type::Float = TypePtr ( new Type (FloatT)) [static] |
Referenced by fromSignature(), main(), and vt2type().
const constTypePtr Type::Integer = TypePtr ( new Type (IntegerT)) [static] |
Referenced by fromSignature(), main(), and vt2type().
const constTypePtr Type::List = new ListType (Type::Any) [static] |
Referenced by vt2type().
const constTypePtr Type::ListUnspec = new ListType (Type::Unspec) [static] |
Referenced by YConst::type().
const constTypePtr Type::Locale = TypePtr ( new Type (LocaleT)) [static] |
Referenced by fromSignature(), main(), YELocale::type(), and YLocale::type().
bool Type::m_const [protected] |
Referenced by asConst(), isConst(), preToString(), toStream(), toXml(), and Type().
tkind Type::m_kind [protected] |
Referenced by clone(), equals(), isAny(), isBlock(), isBoolean(), isByteblock(), isError(), isFlex(), isFloat(), isFunction(), isInteger(), isList(), isLocale(), isMap(), isNFlex(), isNil(), isPath(), isString(), isSymbol(), isTerm(), isTuple(), isUnspec(), isVariable(), isVoid(), isWildcard(), kind(), match(), matchvalue(), toStream(), toString(), toXmlString(), Type(), and valueType().
bool Type::m_reference [protected] |
Referenced by asReference(), isReference(), postToString(), toStream(), toXml(), and Type().
const constTypePtr Type::MapUnspec = new MapType (Type::Unspec, Type::Unspec) [static] |
Referenced by YConst::type().
const constTypePtr Type::NFlex1 = TypePtr ( new NFlexType(1)) [static] |
Referenced by fromSignature().
const constTypePtr Type::NFlex2 = TypePtr ( new NFlexType(2)) [static] |
Referenced by fromSignature().
const constTypePtr Type::NFlex3 = TypePtr ( new NFlexType(3)) [static] |
Referenced by fromSignature().
const constTypePtr Type::NFlex4 = TypePtr ( new NFlexType(4)) [static] |
Referenced by fromSignature().
const constTypePtr Type::Path = TypePtr ( new Type (PathT)) [static] |
Referenced by fromSignature(), main(), and vt2type().
const constTypePtr Type::String = TypePtr ( new Type (StringT)) [static] |
Referenced by fromSignature(), main(), and vt2type().
const constTypePtr Type::Symbol = TypePtr ( new Type (SymbolT)) [static] |
Referenced by YEBuiltin::attachSymVariable(), fromSignature(), main(), and vt2type().
const constTypePtr Type::Term = TypePtr ( new Type (TermT)) [static] |
Referenced by fromSignature(), main(), YETerm::type(), and vt2type().
const constTypePtr Type::Unspec = TypePtr ( new Type (UnspecT)) [static] |
Referenced by YECall::attachParameter(), YEBuiltin::attachParameter(), YETerm::attachParameter(), fromSignature(), main(), YBlock::newNamespace(), StaticDeclaration::registerDeclarations(), StaticDeclaration::StaticDeclaration(), YEBinary::type(), YFunction::type(), YConst::type(), YCode::type(), vt2type(), Y2YCPFunction::wantedParameterType(), and YBlock::YBlock().
const constTypePtr Type::Variable = new VariableType (Type::Any) [static] |
Referenced by vt2type().
const constTypePtr Type::Void = TypePtr ( new Type (VoidT)) [static] |
Referenced by YECall::finalize(), fromSignature(), main(), YSSwitch::type(), YSFilename::type(), YSImport::type(), YSInclude::type(), YSTextdomain::type(), YSDo::type(), YSRepeat::type(), YSWhile::type(), YSIf::type(), YSBracket::type(), YSFunction::type(), YSTypedef::type(), YSReturn::type(), YSBlock::type(), YSExpression::type(), YStatement::type(), vt2type(), YEBracket::YEBracket(), and YEBuiltin::YEBuiltin().
const constTypePtr Type::Wildcard = TypePtr ( new Type (WildcardT)) [static] |
Referenced by fromSignature().