162 lines
5.0 KiB
C++
162 lines
5.0 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
|