Add error message for unnamed structs
This commit is contained in:
parent
4a8010a3a0
commit
04518e4ff3
|
@ -8306,6 +8306,11 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
||||||
}
|
}
|
||||||
|
else if (ins->mDst.IsSByte())
|
||||||
|
{
|
||||||
|
// Upper byte will retain sign
|
||||||
|
ShiftRegisterLeftByte(proc, ins, dreg, lshift);
|
||||||
|
}
|
||||||
else if (ins->mSrc[index].IsUByte())
|
else if (ins->mSrc[index].IsUByte())
|
||||||
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue));
|
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue));
|
||||||
else
|
else
|
||||||
|
@ -8344,6 +8349,11 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
||||||
}
|
}
|
||||||
|
else if (ins->mDst.IsSByte())
|
||||||
|
{
|
||||||
|
// Upper byte will retain sign
|
||||||
|
ShiftRegisterLeftByte(proc, ins, dreg, lshift);
|
||||||
|
}
|
||||||
else if (ins->mSrc[index].IsUByte())
|
else if (ins->mSrc[index].IsUByte())
|
||||||
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue));
|
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue));
|
||||||
else
|
else
|
||||||
|
@ -8357,6 +8367,15 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
}
|
}
|
||||||
|
else if (ins->mSrc[index].IsSByte() && ins->mSrc[index].mRange.mMinValue >= -42 && ins->mSrc[index].mRange.mMaxValue <= 42)
|
||||||
|
{
|
||||||
|
// Will retain sign
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ASL, ASMIM_IMPLIED));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_CLC, ASMIM_IMPLIED));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
@ -8379,6 +8398,11 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_IMMEDIATE, 0));
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 1));
|
||||||
}
|
}
|
||||||
|
else if (ins->mDst.IsSByte())
|
||||||
|
{
|
||||||
|
// Upper byte will retain sign
|
||||||
|
ShiftRegisterLeftByte(proc, ins, dreg, lshift);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
ShiftRegisterLeft(proc, ins, dreg, lshift);
|
ShiftRegisterLeft(proc, ins, dreg, lshift);
|
||||||
return dreg;
|
return dreg;
|
||||||
|
@ -8400,6 +8424,24 @@ int NativeCodeBasicBlock::ShortMultiply(InterCodeProcedure* proc, NativeCodeProc
|
||||||
else
|
else
|
||||||
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue) * 5);
|
ShiftRegisterLeftFromByte(proc, ins, dreg, lshift, int(ins->mSrc[index].mRange.mMaxValue) * 5);
|
||||||
}
|
}
|
||||||
|
else if (ins->mSrc[index].IsSByte() && ins->mSrc[index].mRange.mMinValue >= -25 && ins->mSrc[index].mRange.mMaxValue <= 25)
|
||||||
|
{
|
||||||
|
// Will retain sign
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ASL, ASMIM_IMPLIED));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ASL, ASMIM_IMPLIED));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_CLC, ASMIM_IMPLIED));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_ADC, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_STA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
|
||||||
|
if (ins->mDst.IsSByte())
|
||||||
|
{
|
||||||
|
// Upper byte will retain sign
|
||||||
|
ShiftRegisterLeftByte(proc, ins, dreg, lshift);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ShiftRegisterLeft(proc, ins, dreg, lshift);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
mIns.Push(NativeCodeInstruction(ins, ASMIT_LDA, ASMIM_ZERO_PAGE, dreg + 0));
|
||||||
|
@ -11424,6 +11466,9 @@ void NativeCodeBasicBlock::RelationalOperator(InterCodeProcedure* proc, const In
|
||||||
{
|
{
|
||||||
InterOperator op = ins->mOperator;
|
InterOperator op = ins->mOperator;
|
||||||
|
|
||||||
|
bool scmp = (op == IA_CMPGES) || (op == IA_CMPLES) || (op == IA_CMPGS) || (op == IA_CMPLS) || (op == IA_CMPEQ) || (op == IA_CMPNE);
|
||||||
|
bool ucmp = (op == IA_CMPGEU) || (op == IA_CMPLEU) || (op == IA_CMPGU) || (op == IA_CMPLU) || (op == IA_CMPEQ) || (op == IA_CMPNE);
|
||||||
|
|
||||||
if (ins->mSrc[0].mType == IT_FLOAT)
|
if (ins->mSrc[0].mType == IT_FLOAT)
|
||||||
{
|
{
|
||||||
if (ins->mSrc[0].mTemp < 0 || ins->mSrc[1].mTemp < 0)
|
if (ins->mSrc[0].mTemp < 0 || ins->mSrc[1].mTemp < 0)
|
||||||
|
@ -11881,7 +11926,9 @@ void NativeCodeBasicBlock::RelationalOperator(InterCodeProcedure* proc, const In
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (InterTypeSize[ins->mSrc[0].mType] == 1)
|
else if (InterTypeSize[ins->mSrc[0].mType] == 1 ||
|
||||||
|
scmp && ins->mSrc[0].IsSByte() && ins->mSrc[1].IsSByte() ||
|
||||||
|
ucmp && ins->mSrc[0].IsUByte() && ins->mSrc[1].IsUByte())
|
||||||
{
|
{
|
||||||
NativeCodeBasicBlock* eblock = nproc->AllocateBlock();
|
NativeCodeBasicBlock* eblock = nproc->AllocateBlock();
|
||||||
NativeCodeBasicBlock* nblock = nproc->AllocateBlock();
|
NativeCodeBasicBlock* nblock = nproc->AllocateBlock();
|
||||||
|
|
|
@ -174,6 +174,8 @@ Declaration* Parser::ParseStructDeclaration(uint64 flags, DecType dt, Declaratio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
mErrors->Error(mScanner->mLocation, EERR_UNIMPLEMENTED, "Unnamed structs are not implemented");
|
||||||
|
|
||||||
if (!dec->mIdent || !dec->mScope)
|
if (!dec->mIdent || !dec->mScope)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue