Fixes for Surveyor SRV-1 platform

git-svn-id: http://picoc.googlecode.com/svn/trunk@398 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
zik.saleeba 2009-11-08 19:23:50 +00:00
parent 83ded6eb54
commit d09e156558
6 changed files with 40 additions and 10 deletions

View file

@ -425,15 +425,19 @@ void LibMalloc(struct ParseState *Parser, struct Value *ReturnValue, struct Valu
ReturnValue->Val->NativePointer = malloc(Param[0]->Val->Integer);
}
#ifndef NO_CALLOC
void LibCalloc(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = calloc(Param[0]->Val->Integer, Param[1]->Val->Integer);
}
#endif
#ifndef NO_REALLOC
void LibRealloc(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = realloc(Param[0]->Val->NativePointer, Param[1]->Val->Integer);
}
#endif
void LibFree(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
@ -603,11 +607,15 @@ struct LibraryFunction CLibrary[] =
{ LibCeil, "float ceil(float)" },
{ LibFloor, "float floor(float)" },
#endif
#ifndef NO_STRING_FUNCTIONS
{ LibMalloc, "void *malloc(int)" },
#ifndef NO_CALLOC
{ LibCalloc, "void *calloc(int,int)" },
{ LibCalloc, "void *realloc(void *,int)" },
#endif
#ifndef NO_REALLOC
{ LibRealloc, "void *realloc(void *,int)" },
#endif
{ LibFree, "void free(void *)" },
#ifndef NO_STRING_FUNCTIONS
{ LibStrcpy, "void strcpy(char *,char *)" },
{ LibStrncpy, "void strncpy(char *,char *,int)" },
{ LibStrcmp, "int strcmp(char *,char *)" },

View file

@ -171,8 +171,26 @@ unsigned long ExpressionCoerceUnsignedInteger(struct Value *Val)
}
}
#ifndef NO_FP
double ExpressionCoerceFP(struct Value *Val)
{
#ifndef BROKEN_FLOAT_CASTS
int IntVal;
unsigned UnsignedVal;
switch (Val->Typ->Base)
{
case TypeInt: IntVal = Val->Val->Integer; return (double)IntVal;
case TypeChar: IntVal = Val->Val->Character; return (double)IntVal;
case TypeShort: IntVal = Val->Val->ShortInteger; return (double)IntVal;
case TypeLong: IntVal = Val->Val->LongInteger; return (double)IntVal;
case TypeUnsignedInt: UnsignedVal = Val->Val->UnsignedInteger; return (double)UnsignedVal;
case TypeUnsignedShort: UnsignedVal = Val->Val->UnsignedShortInteger; return (double)UnsignedVal;
case TypeUnsignedLong: UnsignedVal = Val->Val->UnsignedLongInteger; return (double)UnsignedVal;
case TypeFP: return Val->Val->FP;
default: return 0.0;
}
#else
switch (Val->Typ->Base)
{
case TypeInt: return (double)Val->Val->Integer;
@ -182,12 +200,12 @@ double ExpressionCoerceFP(struct Value *Val)
case TypeUnsignedInt: return (double)Val->Val->UnsignedInteger;
case TypeUnsignedShort: return (double)Val->Val->UnsignedShortInteger;
case TypeUnsignedLong: return (double)Val->Val->UnsignedLongInteger;
#ifndef NO_FP
case TypeFP: return (double)Val->Val->FP;
#endif
default: return 0;
default: return 0.0;
}
#endif
}
#endif
/* assign an integer value */
long ExpressionAssignInt(struct ParseState *Parser, struct Value *DestValue, long FromInt, int After)
@ -574,7 +592,7 @@ void ExpressionInfixOperator(struct ParseState *Parser, struct ExpressionStack *
{
/* array index */
int ArrayIndex;
struct Value *Result;
struct Value *Result = NULL;
if (!IS_NUMERIC_COERCIBLE(TopValue))
ProgramFail(Parser, "array index must be an integer");

2
heap.c
View file

@ -65,7 +65,7 @@ void *HeapAllocStack(int Size)
return NULL;
HeapStackTop = (void *)NewTop;
memset(NewMem, '\0', Size);
memset((void *)NewMem, '\0', Size);
return NewMem;
}

2
lex.c
View file

@ -482,7 +482,7 @@ void *LexTokenise(struct LexState *Lexer, int *TokenLen)
if (ValueSize > 0)
{
/* store a value as well */
memcpy(TokenPos, (void *)GotValue->Val, ValueSize);
memcpy((void *)TokenPos, (void *)GotValue->Val, ValueSize);
TokenPos += ValueSize;
MemUsed += ValueSize;
}

View file

@ -123,7 +123,7 @@ void ParseDeclarationAssignment(struct ParseState *Parser, struct Value *NewVari
for (ArrayIndex = 0; ArrayIndex < NewVariable->Typ->ArraySize; ArrayIndex++)
{
struct Value *ArrayElement;
struct Value *ArrayElement = NULL;
if (Token != TokenComma)
ProgramFail(Parser, "comma expected");
@ -170,7 +170,7 @@ int ParseDeclaration(struct ParseState *Parser, enum LexToken Token)
char *Identifier;
struct ValueType *BasicType;
struct ValueType *Typ;
struct Value *NewVariable;
struct Value *NewVariable = NULL;
TypeParseFront(Parser, &BasicType);
do

View file

@ -93,12 +93,16 @@ extern jmp_buf ExitBuf;
# include "../gps.h"
# include "../i2c.h"
# include "../jpeg.h"
# include "../malloc.h"
# define assert(x)
# undef INTERACTIVE_PROMPT_STATEMENT
# undef INTERACTIVE_PROMPT_LINE
# define INTERACTIVE_PROMPT_STATEMENT "> "
# define INTERACTIVE_PROMPT_LINE "- "
# undef BIG_ENDIAN
# define NO_CALLOC
# define NO_REALLOC
# define BROKEN_FLOAT_CASTS
# else
# ifdef UMON_HOST
# define HEAP_SIZE (128*1024) /* space for the heap and the stack */