yast2-core
|
YCP type. More...
#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 |
![]() | |
Rep () | |
Rep (const Rep &) | |
Rep & | operator= (const Rep &) |
virtual | ~Rep () |
void | ref () const |
void | unref () const |
unsigned | refCount () const |
virtual const char * | repName () const |
virtual std::ostream & | dumpOn (std::ostream &str) 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 void | ref (const Rep *obj_r) |
static void | unref (const Rep *obj_r) |
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) | |
![]() | |
virtual void | ref_to (unsigned) const |
virtual void | unref_to (unsigned) const |
Protected Attributes | |
tkind | m_kind |
bool | m_const |
bool | m_reference |
Private Member Functions | |
REP_BODY (Type) | |
tkind | kind () const |
YCP type.
typedef enum Type::type_kind Type::tkind |
enum Type::type_kind |
|
inlineprotected |
Type::Type | ( | ) |
Type::Type | ( | tkind | kind, |
bytecodeistream & | str | ||
) |
References m_const, m_kind, m_reference, and y2debug.
|
virtual |
|
inline |
set const qualifier
References m_const.
|
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 match(), VariableType::match(), ListType::match(), MapType::match(), BlockType::match(), TupleType::match(), and FunctionType::match().
|
virtual |
check, if the type can be casted (at runtime considered to be - similar to dynamic_cast) to another type
Reimplemented in FunctionType, TupleType, BlockType, MapType, and ListType.
References isAny(), match(), toString(), and y2debug.
|
virtual |
clone this type
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
References m_kind.
Referenced by unflex().
|
virtual |
|
virtual |
Finds a type which contains most information This should be the narrowest such type - TODO
Reimplemented in MapType, and ListType.
References Error, isAny(), isUnspec(), isVoid(), match(), toString(), and y2debug.
|
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(), i_check_binary_op(), and YEBinary::type().
|
virtual |
check equality of the types, without any assumptions like any == unspec
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, and VariableType.
References isBasetype(), and m_kind.
|
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().
|
inlinestatic |
Construct from a string literal type code
s | eg. string("list <string>") |
References fromSignature().
|
static |
Referenced by i_check_binary_op(), i_check_unary_op(), and switch().
|
inline |
Referenced by canCast(), commontype(), detailedtype(), match(), and matchvalue().
|
inlinevirtual |
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
Referenced by basematch(), and equals().
|
inline |
References BooleanT, and m_kind.
Referenced by matchvalue().
|
inline |
References ByteblockT, and m_kind.
Referenced by matchvalue().
|
inline |
return const qualifier
References m_const.
Referenced by basematch(), FlexType::unflex(), and NFlexType::unflex().
|
inline |
References ErrorT, and m_kind.
Referenced by basematch().
|
inline |
References FlexT, m_kind, and NFlexT.
Referenced by FlexType::unflex().
|
inline |
References FloatT, and m_kind.
Referenced by match(), and matchvalue().
|
inline |
References IntegerT, and m_kind.
Referenced by match(), and matchvalue().
|
inline |
Referenced by matchvalue().
|
inline |
Referenced by matchvalue().
|
inline |
References m_kind, and NFlexT.
Referenced by NFlexType::unflex().
|
inline |
Referenced by matchvalue().
|
inline |
return reference qualifier
References m_reference.
Referenced by FlexType::unflex(), and NFlexType::unflex().
|
inline |
References m_kind, and StringT.
Referenced by match(), and matchvalue().
|
inline |
References m_kind, and SymbolT.
Referenced by matchvalue().
|
inline |
Referenced by matchvalue().
|
inline |
References m_kind, and UnspecT.
Referenced by detailedtype(), and match().
|
inline |
Referenced by basematch(), commontype(), detailedtype(), and match().
|
virtual |
Checks match with expected type. Match is not symmetric, e.g integer match any but not vice versa.
expected | Target type against which this is matched, so integer.match(any) -> 0 <0: no match, ==0: full match, >0: propagated match |
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
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().
|
inlinevirtual |
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
|
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.
|
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().
|
inline |
postfix qualifier
References m_reference.
Referenced by toString(), FlexType::toString(), NFlexType::toString(), ListType::toString(), MapType::toString(), BlockType::toString(), TupleType::toString(), and FunctionType::toString().
|
inline |
prefix qualifier
References m_const.
Referenced by toString(), FlexType::toString(), NFlexType::toString(), ListType::toString(), MapType::toString(), BlockType::toString(), TupleType::toString(), and FunctionType::toString().
|
private |
|
static |
enable/disable type checking
|
virtual |
write bytecode out to stream
write out to bytecode stream
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
References m_const, m_kind, m_reference, str, toString(), Bytecode::writeBool(), Bytecode::writeInt32(), and y2debug.
Referenced by FlexType::toStream(), NFlexType::toStream(), VariableType::toStream(), ListType::toStream(), MapType::toStream(), BlockType::toStream(), TupleType::toStream(), and FunctionType::toStream().
|
virtual |
Converts a type code to its YCP notation.
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
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(), toStream(), and toXmlString().
|
virtual |
write xml out to stream
References m_const, m_reference, str, and toXmlString().
|
virtual |
References toString(), and Xmlcode::xmlify().
Referenced by toXml().
|
virtual |
replace any 'FlexT' (number == 0) or 'NFlexT' (number != 0) with 'type'
Reimplemented in FunctionType, TupleType, BlockType, MapType, ListType, VariableType, NFlexType, and FlexType.
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.
|
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.
Referenced by fromSignature(), i_check_compare_op(), main(), switch(), YECompare::type(), YEIs::type(), vt2type(), and while().
|
static |
Referenced by fromSignature(), main(), vt2type(), and while().
Referenced by fromSignature(), and YConst::type().
Referenced by fromSignature(), YConst::type(), and while().
|
static |
Referenced by fromSignature(), YConst::type(), and while().
|
static |
Referenced by fromSignature().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by fromSignature(), and YConst::type().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by fromSignature(), and YConst::type().
Referenced by fromSignature(), YConst::type(), and while().
Referenced by attach_parameter(), YECall::attachParameter(), YEBuiltin::attachSymVariable(), detailedtype(), ListType::detailedtype(), MapType::detailedtype(), YEBuiltin::finalize(), YECall::finalize(), YEFunction::finalize(), fromSignature(), TupleType::parameterType(), FunctionType::parameterType(), Xmlcode::readType(), Bytecode::readType(), YEBuiltin::type(), and vt2type().
|
static |
Referenced by fromSignature().
Referenced by fromSignature(), main(), switch(), vt2type(), and while().
Referenced by fromSignature(), main(), switch(), vt2type(), and while().
|
static |
Referenced by switch(), and YConst::type().
Referenced by fromSignature(), main(), switch(), YELocale::type(), YLocale::type(), and while().
|
protected |
Referenced by asConst(), isConst(), preToString(), toStream(), toXml(), and Type().
|
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(), Type(), and valueType().
|
protected |
Referenced by asReference(), isReference(), postToString(), toStream(), toXml(), and Type().
|
static |
Referenced by switch(), and YConst::type().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
|
static |
Referenced by fromSignature().
Referenced by fromSignature(), main(), vt2type(), and while().
Referenced by fromSignature(), main(), switch(), vt2type(), and while().
Referenced by YEBuiltin::attachSymVariable(), fromSignature(), main(), switch(), vt2type(), and while().
Referenced by fromSignature(), main(), switch(), YETerm::type(), vt2type(), and while().
Referenced by attach_parameter(), YETerm::attachParameter(), YEBuiltin::attachParameter(), YECall::attachParameter(), fromSignature(), i_check_binary_op(), i_check_unary_op(), main(), YBlock::newNamespace(), StaticDeclaration::registerDeclarations(), StaticDeclaration::StaticDeclaration(), switch(), YCode::type(), YEBinary::type(), YConst::type(), YFunction::type(), vt2type(), Y2YCPFunction::wantedParameterType(), while(), and YBlock::YBlock().
|
static |
Referenced by vt2type().
Referenced by attach_parameter(), YECall::finalize(), fromSignature(), main(), switch(), YStatement::type(), YSExpression::type(), YSBlock::type(), YSReturn::type(), YSTypedef::type(), YSFunction::type(), YSBracket::type(), YSIf::type(), YSWhile::type(), YSRepeat::type(), YSDo::type(), YSTextdomain::type(), YSInclude::type(), YSImport::type(), YSFilename::type(), YSSwitch::type(), vt2type(), while(), YEBracket::YEBracket(), and YEBuiltin::YEBuiltin().
Referenced by fromSignature().