picoc/intrinsic.c
zik.saleeba f8216bb79f Type system now works with the new lexer.
git-svn-id: http://picoc.googlecode.com/svn/trunk@47 21eae674-98b7-11dd-bd71-f92a316d2d60
2009-02-02 05:27:15 +00:00

47 lines
1.1 KiB
C

#include <stdio.h>
#include <string.h>
#include "picoc.h"
void IntrinsicPrintInt(void)
{
printf("%d\n", Parameter[0]->Val->Integer);
}
void IntrinsicPrintf(void)
{
printf("IntrinsicPrintf\n");
}
void IntrinsicSayHello(void)
{
printf("Hello\n");
}
struct IntrinsicFunction
{
void (*Func)(void);
const char *Prototype;
} Intrinsics[] =
{
{ IntrinsicSayHello, "void sayhello()" }, /* -1 */
{ IntrinsicPrintf, "void printf()" }, /* -2 */
{ IntrinsicPrintInt, "void printint(int)" }, /* -3 */
};
void IntrinsicInit(struct Table *GlobalTable)
{
struct ParseState Parser;
int Count;
const char *Identifier;
struct ValueType *ReturnType;
struct Value *NewValue;
for (Count = 0; Count < sizeof(Intrinsics) / sizeof(struct IntrinsicFunction); Count++)
{
LexInit(&Parser, Intrinsics[Count].Prototype, strlen(Intrinsics[Count].Prototype), StrEmpty, Count+1);
TypeParse(&Parser, &ReturnType, &Identifier);
NewValue = ParseFunctionDefinition(&Parser, ReturnType, Identifier, TRUE);
NewValue->Val->FuncDef.Intrinsic = Intrinsics[Count].Func;
}
}