type fixes

This commit is contained in:
Joseph Poirier 2017-08-14 22:50:16 -05:00
parent e1f6569393
commit df15ea775c
No known key found for this signature in database
GPG key ID: 65858A2540EBDA40

View file

@ -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);