Fixing member functions with includes
This commit is contained in:
parent
0b1b4a7d9b
commit
8f39d736d5
|
@ -148,9 +148,13 @@ void Expression::Dump(int ident) const
|
|||
break;
|
||||
case EX_CONSTANT:
|
||||
printf("CONST");
|
||||
if (mDecValue->mIdent)
|
||||
printf(" '%s'", mDecValue->mIdent->mString);
|
||||
break;
|
||||
case EX_VARIABLE:
|
||||
printf("VAR");
|
||||
if (mDecValue->mIdent)
|
||||
printf(" '%s'", mDecValue->mIdent->mString);
|
||||
break;
|
||||
case EX_ASSIGNMENT:
|
||||
printf("ASSIGN<%s>", TokenNames[mToken]);
|
||||
|
@ -777,8 +781,8 @@ Expression* Expression::ConstantFold(Errors * errors)
|
|||
Declaration::Declaration(const Location& loc, DecType type)
|
||||
: mLocation(loc), mEndLocation(loc), mType(type), mScope(nullptr), mData(nullptr), mIdent(nullptr), mQualIdent(nullptr),
|
||||
mSize(0), mOffset(0), mFlags(0), mComplexity(0), mLocalSize(0),
|
||||
mBase(nullptr), mParams(nullptr), mValue(nullptr), mNext(nullptr), mPrev(nullptr), mConst(nullptr),
|
||||
mConstructor(nullptr), mDestructor(nullptr), mCopyConstructor(nullptr), mCopyAssignment(nullptr),
|
||||
mBase(nullptr), mParams(nullptr), mValue(nullptr), mNext(nullptr), mPrev(nullptr), mConst(nullptr),
|
||||
mDefaultConstructor(nullptr), mDestructor(nullptr), mCopyConstructor(nullptr), mCopyAssignment(nullptr),
|
||||
mVectorConstructor(nullptr), mVectorDestructor(nullptr), mVectorCopyConstructor(nullptr), mVectorCopyAssignment(nullptr),
|
||||
mVarIndex(-1), mLinkerObject(nullptr), mCallers(nullptr), mCalled(nullptr), mAlignment(1),
|
||||
mInteger(0), mNumber(0), mMinValue(-0x80000000LL), mMaxValue(0x7fffffffLL), mFastCallBase(0), mFastCallSize(0), mStride(0), mStripe(1),
|
||||
|
@ -1207,11 +1211,18 @@ bool Declaration::IsNumericType(void) const
|
|||
return mType == DT_TYPE_INTEGER || mType == DT_TYPE_BOOL || mType == DT_TYPE_FLOAT || mType == DT_TYPE_ENUM;
|
||||
}
|
||||
|
||||
|
||||
bool Declaration::IsSimpleType(void) const
|
||||
{
|
||||
return mType == DT_TYPE_INTEGER || mType == DT_TYPE_BOOL || mType == DT_TYPE_FLOAT || mType == DT_TYPE_ENUM || mType == DT_TYPE_POINTER;
|
||||
}
|
||||
|
||||
void Declaration::SetDefined(void)
|
||||
{
|
||||
mFlags |= DTF_DEFINED;
|
||||
if (mConst)
|
||||
mConst->mFlags |= DTF_DEFINED;
|
||||
}
|
||||
|
||||
Declaration* TheVoidTypeDeclaration, * TheConstVoidTypeDeclaration, * TheSignedIntTypeDeclaration, * TheUnsignedIntTypeDeclaration, * TheConstCharTypeDeclaration, * TheCharTypeDeclaration, * TheSignedCharTypeDeclaration, * TheUnsignedCharTypeDeclaration;
|
||||
Declaration* TheBoolTypeDeclaration, * TheFloatTypeDeclaration, * TheConstVoidPointerTypeDeclaration, * TheVoidPointerTypeDeclaration, * TheSignedLongTypeDeclaration, * TheUnsignedLongTypeDeclaration;
|
||||
|
|
|
@ -94,8 +94,6 @@ static const uint64 DTF_FPARAM_CONST = (1ULL << 40);
|
|||
static const uint64 DTF_FPARAM_NOCONST = (1ULL << 41);
|
||||
|
||||
static const uint64 DTF_FUNC_THIS = (1ULL << 42);
|
||||
static const uint64 DTF_FUNC_CONSTRUCTOR = (1ULL << 43);
|
||||
static const uint64 DTF_FUNC_DESTRUCTOR = (1ULL << 44);
|
||||
|
||||
static const uint64 DTF_VAR_ALIASING = (1ULL << 48);
|
||||
|
||||
|
@ -223,7 +221,7 @@ public:
|
|||
DecType mType;
|
||||
Token mToken;
|
||||
Declaration * mBase, * mParams, * mNext, * mPrev, * mConst;
|
||||
Declaration * mConstructor, * mDestructor, * mCopyConstructor, * mCopyAssignment;
|
||||
Declaration * mDefaultConstructor, * mDestructor, * mCopyConstructor, * mCopyAssignment;
|
||||
Declaration * mVectorConstructor, * mVectorDestructor, * mVectorCopyConstructor, * mVectorCopyAssignment;
|
||||
|
||||
Expression* mValue;
|
||||
|
@ -251,6 +249,8 @@ public:
|
|||
bool IsNumericType(void) const;
|
||||
bool IsSimpleType(void) const;
|
||||
|
||||
void SetDefined(void);
|
||||
|
||||
Declaration* ToConstType(void);
|
||||
Declaration* ToStriped(int stripe);
|
||||
Declaration* ToStriped(Errors* errors);
|
||||
|
|
|
@ -12026,10 +12026,7 @@ void InterCodeBasicBlock::InnerLoopOptimization(const NumberSet& aliasedParams)
|
|||
block->mInstructions[j++] = ins;
|
||||
}
|
||||
}
|
||||
#ifdef _DEBUG
|
||||
if (j != block->mInstructions.Size())
|
||||
printf("Moved %d %d\n", mIndex, block->mInstructions.Size() - j);
|
||||
#endif
|
||||
|
||||
block->mInstructions.SetSize(j);
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1854,7 +1854,7 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
|
|||
}
|
||||
}
|
||||
|
||||
return vr;
|
||||
return vl;
|
||||
|
||||
case EX_INDEX:
|
||||
{
|
||||
|
@ -2761,6 +2761,7 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
|
|||
}
|
||||
|
||||
Declaration * decResult = nullptr;
|
||||
GrowingArray<InterInstruction*> defins(nullptr);
|
||||
|
||||
if (ftype->mBase->mType == DT_TYPE_STRUCT)
|
||||
{
|
||||
|
@ -2816,7 +2817,11 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
|
|||
wins->mSrc[1].mType = IT_POINTER;
|
||||
wins->mSrc[1].mTemp = ains->mDst.mTemp;
|
||||
wins->mSrc[1].mOperandSize = 2;
|
||||
block->Append(wins);
|
||||
|
||||
if (ftype->mFlags & DTF_FASTCALL)
|
||||
defins.Push(wins);
|
||||
else
|
||||
block->Append(wins);
|
||||
|
||||
atotal = 2;
|
||||
}
|
||||
|
@ -2826,8 +2831,6 @@ InterCodeGenerator::ExValue InterCodeGenerator::TranslateExpression(Declaration*
|
|||
else
|
||||
proc->CallsFunctionPointer();
|
||||
|
||||
GrowingArray<InterInstruction*> defins(nullptr);
|
||||
|
||||
Declaration* pdec = ftype->mParams;
|
||||
Expression* pex = exp->mRight;
|
||||
while (pex)
|
||||
|
@ -4326,7 +4329,7 @@ InterCodeProcedure* InterCodeGenerator::TranslateProcedure(InterCodeModule * mod
|
|||
InterCodeProcedure* proc = new InterCodeProcedure(mod, dec->mLocation, dec->mQualIdent, mLinker->AddObject(dec->mLocation, dec->mQualIdent, dec->mSection, LOT_BYTE_CODE));
|
||||
|
||||
#if 0
|
||||
if (proc->mIdent && !strcmp(proc->mIdent->mString, "test_retparam_value"))
|
||||
if (proc->mIdent && !strcmp(proc->mIdent->mString, "test_member"))
|
||||
exp->Dump(0);
|
||||
#endif
|
||||
#if 0
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -49,6 +49,7 @@ protected:
|
|||
void AddDefaultConstructors(Declaration* pthis);
|
||||
|
||||
void ParseVariableInit(Declaration* ndec);
|
||||
void AddMemberFunction(Declaration* dec, Declaration* mdec);
|
||||
|
||||
Expression * AddFunctionCallRefReturned(Expression * exp);
|
||||
Expression* CleanupExpression(Expression* exp);
|
||||
|
|
|
@ -1397,13 +1397,33 @@ void Scanner::NextRawToken(void)
|
|||
else if ((mCompilerOptions & COPT_CPLUSPLUS) && !strcmp(tkident, "operator"))
|
||||
{
|
||||
NextRawToken();
|
||||
if (mToken == TK_ASSIGN)
|
||||
switch (mToken)
|
||||
{
|
||||
mToken = TK_IDENT;
|
||||
case TK_ASSIGN:
|
||||
mTokenIdent = Ident::Unique("operator=");
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
||||
case TK_ADD:
|
||||
mTokenIdent = Ident::Unique("operator+");
|
||||
break;
|
||||
case TK_SUB:
|
||||
mTokenIdent = Ident::Unique("operator-");
|
||||
break;
|
||||
case TK_MUL:
|
||||
mTokenIdent = Ident::Unique("operator*");
|
||||
break;
|
||||
case TK_DIV:
|
||||
mTokenIdent = Ident::Unique("operator/");
|
||||
break;
|
||||
case TK_MOD:
|
||||
mTokenIdent = Ident::Unique("operator%");
|
||||
break;
|
||||
|
||||
default:
|
||||
mErrors->Error(mLocation, EERR_INVALID_OPERATOR, "Invalid operator token");
|
||||
}
|
||||
|
||||
mToken = TK_IDENT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue