AngelscriptLanguageServer/server/src/Native/angelscript/source/as_datatype.h

162 lines
5.1 KiB
C++

/*
AngelCode Scripting Library
Copyright (c) 2003-2016 Andreas Jonsson
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you
must not claim that you wrote the original software. If you use
this software in a product, an acknowledgment in the product
documentation would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
The original version of this library can be located at:
http://www.angelcode.com/angelscript/
Andreas Jonsson
andreas@angelcode.com
*/
//
// as_datatype.h
//
// This class describes the datatype for expressions during compilation
//
#ifndef AS_DATATYPE_H
#define AS_DATATYPE_H
#include "as_tokendef.h"
#include "as_string.h"
BEGIN_AS_NAMESPACE
struct asSTypeBehaviour;
class asCScriptEngine;
class asCTypeInfo;
class asCScriptFunction;
class asCModule;
class asCObjectType;
class asCEnumType;
struct asSNameSpace;
// TODO: refactor: Reference should not be part of the datatype. This should be stored separately, e.g. in asCExprValue
// MakeReference, MakeReadOnly, IsReference, IsReadOnly should be removed
class asCDataType
{
public:
asCDataType();
asCDataType(const asCDataType &);
~asCDataType();
bool IsValid() const;
asCString Format(asSNameSpace *currNs, bool includeNamespace = false) const;
static asCDataType CreatePrimitive(eTokenType tt, bool isConst);
static asCDataType CreateType(asCTypeInfo *ti, bool isConst);
static asCDataType CreateAuto(bool isConst);
static asCDataType CreateObjectHandle(asCTypeInfo *ot, bool isConst);
static asCDataType CreateNullHandle();
int MakeHandle(bool b, bool acceptHandleForScope = false);
int MakeArray(asCScriptEngine *engine, asCModule *requestingModule);
int MakeReference(bool b);
int MakeReadOnly(bool b);
int MakeHandleToConst(bool b);
void SetIfHandleThenConst(bool b) { ifHandleThenConst = b; }
bool HasIfHandleThenConst() const { return ifHandleThenConst; }
bool IsTemplate() const;
bool IsScriptObject() const;
bool IsPrimitive() const;
bool IsMathType() const;
bool IsObject() const;
bool IsReference() const {return isReference;}
bool IsAuto() const {return isAuto;}
bool IsReadOnly() const;
bool IsIntegerType() const;
bool IsUnsignedType() const;
bool IsFloatType() const;
bool IsDoubleType() const;
bool IsBooleanType() const;
bool IsObjectHandle() const {return isObjectHandle;}
bool IsHandleToAuto() const {return isAuto && isObjectHandle;}
bool IsHandleToConst() const;
bool IsArrayType() const;
bool IsEnumType() const;
bool IsAnyType() const {return tokenType == ttQuestion;}
bool IsHandleToAsHandleType() const {return isHandleToAsHandleType;}
bool IsAbstractClass() const;
bool IsInterface() const;
bool IsFuncdef() const;
bool IsObjectConst() const;
bool IsEqualExceptRef(const asCDataType &) const;
bool IsEqualExceptRefAndConst(const asCDataType &) const;
bool IsEqualExceptConst(const asCDataType &) const;
bool IsNullHandle() const;
bool SupportHandles() const;
bool CanBeInstantiated() const;
bool CanBeCopied() const;
bool operator ==(const asCDataType &) const;
bool operator !=(const asCDataType &) const;
asCDataType GetSubType(asUINT subtypeIndex = 0) const;
eTokenType GetTokenType() const {return tokenType;}
asCTypeInfo *GetTypeInfo() const { return typeInfo; }
int GetSizeOnStackDWords() const;
int GetSizeInMemoryBytes() const;
int GetSizeInMemoryDWords() const;
#ifdef WIP_16BYTE_ALIGN
int GetAlignment() const;
#endif
void SetTokenType(eTokenType tt) {tokenType = tt;}
void SetTypeInfo(asCTypeInfo *ti) {typeInfo = ti;}
asCDataType &operator =(const asCDataType &);
asSTypeBehaviour *GetBehaviour() const;
protected:
// Base object type
eTokenType tokenType;
// Behaviour type
asCTypeInfo *typeInfo;
// Top level
bool isReference:1;
bool isReadOnly:1;
bool isObjectHandle:1;
bool isConstHandle:1;
bool isAuto:1;
bool isHandleToAsHandleType:1; // Used by the compiler to know how to initialize the object
bool ifHandleThenConst:1; // Used when creating template instances to determine if a handle should be const or not
char dummy:1;
};
END_AS_NAMESPACE
#endif