type fixes
This commit is contained in:
parent
e1f6569393
commit
df15ea775c
74
expression.c
74
expression.c
|
@ -136,38 +136,36 @@ void ExpressionStackShow(Picoc *pc, struct ExpressionStack *StackTop)
|
||||||
|
|
||||||
switch (StackTop->Val->Typ->Base) {
|
switch (StackTop->Val->Typ->Base) {
|
||||||
case TypeVoid:
|
case TypeVoid:
|
||||||
printf("void");
|
printf("void");
|
||||||
break;
|
break;
|
||||||
case TypeInt:
|
case TypeInt:
|
||||||
printf("%d:int", StackTop->Val->Val->Integer);
|
printf("%d:int", StackTop->Val->Val->Integer);
|
||||||
break;
|
break;
|
||||||
case TypeShort:
|
case TypeShort:
|
||||||
printf("%d:short", StackTop->Val->Val->ShortInteger);
|
printf("%d:short", StackTop->Val->Val->ShortInteger);
|
||||||
break;
|
break;
|
||||||
case TypeChar:
|
case TypeChar:
|
||||||
printf("%d:char", StackTop->Val->Val->Character);
|
printf("%d:char", StackTop->Val->Val->Character);
|
||||||
break;
|
break;
|
||||||
case TypeLong:
|
case TypeLong:
|
||||||
printf("%ld:long", StackTop->Val->Val->LongInteger);
|
printf("%ld:long", StackTop->Val->Val->LongInteger);
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedShort:
|
case TypeUnsignedShort:
|
||||||
printf("%d:unsigned short", StackTop->Val->Val->UnsignedShortInteger);
|
printf("%d:unsigned short", StackTop->Val->Val->UnsignedShortInteger);
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedInt:
|
case TypeUnsignedInt:
|
||||||
printf("%d:unsigned int", StackTop->Val->Val->UnsignedInteger);
|
printf("%d:unsigned int", StackTop->Val->Val->UnsignedInteger);
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedLong:
|
case TypeUnsignedLong:
|
||||||
printf("%ld:unsigned long", StackTop->Val->Val->UnsignedLongInteger);
|
printf("%ld:unsigned long", StackTop->Val->Val->UnsignedLongInteger);
|
||||||
break;
|
break;
|
||||||
case TypeFP:
|
case TypeFP:
|
||||||
printf("%f:fp", StackTop->Val->Val->FP);
|
printf("%f:fp", StackTop->Val->Val->FP); break;
|
||||||
break;
|
case TypeFunction: printf("%s:function", StackTop->Val->Val->Identifier);
|
||||||
case TypeFunction:
|
break;
|
||||||
printf("%s:function", StackTop->Val->Val->Identifier);
|
|
||||||
break;
|
|
||||||
case TypeMacro:
|
case TypeMacro:
|
||||||
printf("%s:macro", StackTop->Val->Val->Identifier);
|
printf("%s:macro", StackTop->Val->Val->Identifier);
|
||||||
break;
|
break;
|
||||||
case TypePointer:
|
case TypePointer:
|
||||||
if (StackTop->Val->Val->Pointer == NULL)
|
if (StackTop->Val->Val->Pointer == NULL)
|
||||||
printf("ptr(NULL)");
|
printf("ptr(NULL)");
|
||||||
|
@ -245,17 +243,17 @@ long ExpressionCoerceInteger(struct Value *Val)
|
||||||
case TypeShort:
|
case TypeShort:
|
||||||
return (long)Val->Val->ShortInteger;
|
return (long)Val->Val->ShortInteger;
|
||||||
case TypeLong:
|
case TypeLong:
|
||||||
return (long)Val->Val->LongInteger;
|
return (int64_t)Val->Val->LongInteger;
|
||||||
case TypeUnsignedInt:
|
case TypeUnsignedInt:
|
||||||
return (long)Val->Val->UnsignedInteger;
|
return (unsigned long)Val->Val->UnsignedInteger;
|
||||||
case TypeUnsignedShort:
|
case TypeUnsignedShort:
|
||||||
return (long)Val->Val->UnsignedShortInteger;
|
return (unsigned long)Val->Val->UnsignedShortInteger;
|
||||||
case TypeUnsignedLong:
|
case TypeUnsignedLong:
|
||||||
return (long)Val->Val->UnsignedLongInteger;
|
return (uint64_t)Val->Val->UnsignedLongInteger;
|
||||||
case TypeUnsignedChar:
|
case TypeUnsignedChar:
|
||||||
return (long)Val->Val->UnsignedCharacter;
|
return (unsigned long)Val->Val->UnsignedCharacter;
|
||||||
case TypePointer:
|
case TypePointer:
|
||||||
return (long)Val->Val->Pointer;
|
return (uintptr_t)Val->Val->Pointer;
|
||||||
case TypeFP:
|
case TypeFP:
|
||||||
return (long)Val->Val->FP;
|
return (long)Val->Val->FP;
|
||||||
default:
|
default:
|
||||||
|
@ -273,17 +271,17 @@ unsigned long ExpressionCoerceUnsignedInteger(struct Value *Val)
|
||||||
case TypeShort:
|
case TypeShort:
|
||||||
return (unsigned long)Val->Val->ShortInteger;
|
return (unsigned long)Val->Val->ShortInteger;
|
||||||
case TypeLong:
|
case TypeLong:
|
||||||
return (unsigned long)Val->Val->LongInteger;
|
return (uint64_t)Val->Val->LongInteger;
|
||||||
case TypeUnsignedInt:
|
case TypeUnsignedInt:
|
||||||
return (unsigned long)Val->Val->UnsignedInteger;
|
return (unsigned long)Val->Val->UnsignedInteger;
|
||||||
case TypeUnsignedShort:
|
case TypeUnsignedShort:
|
||||||
return (unsigned long)Val->Val->UnsignedShortInteger;
|
return (unsigned long)Val->Val->UnsignedShortInteger;
|
||||||
case TypeUnsignedLong:
|
case TypeUnsignedLong:
|
||||||
return (unsigned long)Val->Val->UnsignedLongInteger;
|
return (uint64_t)Val->Val->UnsignedLongInteger;
|
||||||
case TypeUnsignedChar:
|
case TypeUnsignedChar:
|
||||||
return (unsigned long)Val->Val->UnsignedCharacter;
|
return (unsigned long)Val->Val->UnsignedCharacter;
|
||||||
case TypePointer:
|
case TypePointer:
|
||||||
return (unsigned long)Val->Val->Pointer;
|
return (uintptr_t)Val->Val->Pointer;
|
||||||
case TypeFP:
|
case TypeFP:
|
||||||
return (unsigned long)Val->Val->FP;
|
return (unsigned long)Val->Val->FP;
|
||||||
default:
|
default:
|
||||||
|
@ -342,7 +340,7 @@ long ExpressionAssignInt(struct ParseState *Parser, struct Value *DestValue,
|
||||||
DestValue->Val->Character = (char)FromInt;
|
DestValue->Val->Character = (char)FromInt;
|
||||||
break;
|
break;
|
||||||
case TypeLong:
|
case TypeLong:
|
||||||
DestValue->Val->LongInteger = (long)FromInt;
|
DestValue->Val->LongInteger = (int64_t)FromInt;
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedInt:
|
case TypeUnsignedInt:
|
||||||
DestValue->Val->UnsignedInteger = (unsigned int)FromInt;
|
DestValue->Val->UnsignedInteger = (unsigned int)FromInt;
|
||||||
|
@ -351,7 +349,7 @@ long ExpressionAssignInt(struct ParseState *Parser, struct Value *DestValue,
|
||||||
DestValue->Val->UnsignedShortInteger = (unsigned short)FromInt;
|
DestValue->Val->UnsignedShortInteger = (unsigned short)FromInt;
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedLong:
|
case TypeUnsignedLong:
|
||||||
DestValue->Val->UnsignedLongInteger = (unsigned long)FromInt;
|
DestValue->Val->UnsignedLongInteger = (int64_t)FromInt;
|
||||||
break;
|
break;
|
||||||
case TypeUnsignedChar:
|
case TypeUnsignedChar:
|
||||||
DestValue->Val->UnsignedCharacter = (unsigned char)FromInt;
|
DestValue->Val->UnsignedCharacter = (unsigned char)FromInt;
|
||||||
|
@ -718,8 +716,8 @@ void ExpressionPrefixOperator(struct ParseState *Parser,
|
||||||
ExpressionPushFP(Parser, StackTop, ResultFP);
|
ExpressionPushFP(Parser, StackTop, ResultFP);
|
||||||
} else if (IS_NUMERIC_COERCIBLE(TopValue)) {
|
} else if (IS_NUMERIC_COERCIBLE(TopValue)) {
|
||||||
/* integer prefix arithmetic */
|
/* integer prefix arithmetic */
|
||||||
long ResultInt = 0;
|
int64_t ResultInt = 0;
|
||||||
long TopInt = ExpressionCoerceInteger(TopValue);
|
int64_t TopInt = ExpressionCoerceInteger(TopValue);
|
||||||
switch (Op) {
|
switch (Op) {
|
||||||
case TokenPlus:
|
case TokenPlus:
|
||||||
ResultInt = TopInt;
|
ResultInt = TopInt;
|
||||||
|
@ -811,8 +809,8 @@ void ExpressionPostfixOperator(struct ParseState *Parser,
|
||||||
}
|
}
|
||||||
ExpressionPushFP(Parser, StackTop, ResultFP);
|
ExpressionPushFP(Parser, StackTop, ResultFP);
|
||||||
} else if (IS_NUMERIC_COERCIBLE(TopValue)) {
|
} else if (IS_NUMERIC_COERCIBLE(TopValue)) {
|
||||||
long ResultInt = 0;
|
int64_t ResultInt = 0;
|
||||||
long TopInt = ExpressionCoerceInteger(TopValue);
|
int64_t TopInt = ExpressionCoerceInteger(TopValue);
|
||||||
switch (Op) {
|
switch (Op) {
|
||||||
case TokenIncrement:
|
case TokenIncrement:
|
||||||
ResultInt = ExpressionAssignInt(Parser, TopValue, TopInt+1, true);
|
ResultInt = ExpressionAssignInt(Parser, TopValue, TopInt+1, true);
|
||||||
|
|
Loading…
Reference in a new issue