Added example functions lineno() and errorprintf()
git-svn-id: http://picoc.googlecode.com/svn/trunk@405 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
8f9095b3a4
commit
441f8b4073
|
@ -724,6 +724,15 @@ void Cautorun (struct ParseState *Parser, struct Value *ReturnValue, struct Valu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Clineno (struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) {
|
||||||
|
ReturnValue->Val->Integer = Parser->Line;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cerrormsg (struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) {
|
||||||
|
PlatformErrorPrefix(Parser);
|
||||||
|
LibPrintf(Parser, ReturnValue, Param, NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
/* list of all library functions and their prototypes */
|
/* list of all library functions and their prototypes */
|
||||||
struct LibraryFunction PlatformLibrary[] =
|
struct LibraryFunction PlatformLibrary[] =
|
||||||
{
|
{
|
||||||
|
@ -782,6 +791,8 @@ struct LibraryFunction PlatformLibrary[] =
|
||||||
{ Cnnmatchblob, "int nnmatchblob(int)" },
|
{ Cnnmatchblob, "int nnmatchblob(int)" },
|
||||||
{ Cnnlearnblob, "void nnlearnblob(int)" },
|
{ Cnnlearnblob, "void nnlearnblob(int)" },
|
||||||
{ Cautorun, "void autorun(int)" },
|
{ Cautorun, "void autorun(int)" },
|
||||||
|
{ Clineno, "int lineno()" },
|
||||||
|
{ Cerrormsg, "void errormsg(char *)" },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,10 +10,21 @@ void Ctest (struct ParseState *Parser, struct Value *ReturnValue, struct Value *
|
||||||
Param[0]->Val->Integer = 1234;
|
Param[0]->Val->Integer = 1234;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Clineno (struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) {
|
||||||
|
ReturnValue->Val->Integer = Parser->Line;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Cerrormsg (struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs) {
|
||||||
|
PlatformErrorPrefix(Parser);
|
||||||
|
LibPrintf(Parser, ReturnValue, Param, NumArgs);
|
||||||
|
}
|
||||||
|
|
||||||
/* list of all library functions and their prototypes */
|
/* list of all library functions and their prototypes */
|
||||||
struct LibraryFunction PlatformLibrary[] =
|
struct LibraryFunction PlatformLibrary[] =
|
||||||
{
|
{
|
||||||
{ Ctest, "void test(int)" },
|
{ Ctest, "void test(int)" },
|
||||||
|
{ Clineno, "int lineno()" },
|
||||||
|
{ Cerrormsg, "void errorprintf(char *,...)" },
|
||||||
{ NULL, NULL }
|
{ NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
2
picoc.h
2
picoc.h
|
@ -379,6 +379,7 @@ void PrintInt(long Num, int FieldWidth, int ZeroPad, int LeftJustify, struct Out
|
||||||
void PrintStr(const char *Str, struct OutputStream *Stream);
|
void PrintStr(const char *Str, struct OutputStream *Stream);
|
||||||
void PrintFP(double Num, struct OutputStream *Stream);
|
void PrintFP(double Num, struct OutputStream *Stream);
|
||||||
void PrintType(struct ValueType *Typ, struct OutputStream *Stream);
|
void PrintType(struct ValueType *Typ, struct OutputStream *Stream);
|
||||||
|
void LibPrintf(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs);
|
||||||
|
|
||||||
/* platform.c */
|
/* platform.c */
|
||||||
void ProgramFail(struct ParseState *Parser, const char *Message, ...);
|
void ProgramFail(struct ParseState *Parser, const char *Message, ...);
|
||||||
|
@ -389,6 +390,7 @@ void PlatformScanFile(const char *FileName);
|
||||||
char *PlatformGetLine(char *Buf, int MaxLen);
|
char *PlatformGetLine(char *Buf, int MaxLen);
|
||||||
int PlatformGetCharacter();
|
int PlatformGetCharacter();
|
||||||
void PlatformPutc(unsigned char OutCh, union OutputStreamInfo *);
|
void PlatformPutc(unsigned char OutCh, union OutputStreamInfo *);
|
||||||
|
void PlatformErrorPrefix(struct ParseState *Parser);
|
||||||
void PlatformPrintf(const char *Format, ...);
|
void PlatformPrintf(const char *Format, ...);
|
||||||
void PlatformVPrintf(const char *Format, va_list Args);
|
void PlatformVPrintf(const char *Format, va_list Args);
|
||||||
void PlatformExit();
|
void PlatformExit();
|
||||||
|
|
23
platform.c
23
platform.c
|
@ -42,18 +42,23 @@ void PrintSourceTextErrorLine(const char *FileName, const char *SourceText, int
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* exit with a message */
|
/* display the source line and line number to identify an error */
|
||||||
void ProgramFail(struct ParseState *Parser, const char *Message, ...)
|
void PlatformErrorPrefix(struct ParseState *Parser)
|
||||||
{
|
{
|
||||||
va_list Args;
|
|
||||||
|
|
||||||
if (Parser != NULL)
|
if (Parser != NULL)
|
||||||
#ifdef FANCY_ERROR_REPORTING
|
#ifdef FANCY_ERROR_REPORTING
|
||||||
PrintSourceTextErrorLine(Parser->FileName, Parser->SourceText, Parser->Line, Parser->CharacterPos);
|
PrintSourceTextErrorLine(Parser->FileName, Parser->SourceText, Parser->Line, Parser->CharacterPos);
|
||||||
#else
|
#else
|
||||||
PlatformPrintf("%s:%d: ", Parser->FileName, Parser->Line);
|
PlatformPrintf("%s:%d: ", Parser->FileName, Parser->Line);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* exit with a message */
|
||||||
|
void ProgramFail(struct ParseState *Parser, const char *Message, ...)
|
||||||
|
{
|
||||||
|
va_list Args;
|
||||||
|
|
||||||
|
PlatformErrorPrefix(Parser);
|
||||||
va_start(Args, Message);
|
va_start(Args, Message);
|
||||||
PlatformVPrintf(Message, Args);
|
PlatformVPrintf(Message, Args);
|
||||||
va_end(Args);
|
va_end(Args);
|
||||||
|
@ -64,13 +69,7 @@ void ProgramFail(struct ParseState *Parser, const char *Message, ...)
|
||||||
/* like ProgramFail() but gives descriptive error messages for assignment */
|
/* like ProgramFail() but gives descriptive error messages for assignment */
|
||||||
void AssignFail(struct ParseState *Parser, const char *Format, struct ValueType *Type1, struct ValueType *Type2, int Num1, int Num2, const char *FuncName, int ParamNo)
|
void AssignFail(struct ParseState *Parser, const char *Format, struct ValueType *Type1, struct ValueType *Type2, int Num1, int Num2, const char *FuncName, int ParamNo)
|
||||||
{
|
{
|
||||||
if (Parser != NULL)
|
PlatformErrorPrefix(Parser);
|
||||||
#ifdef FANCY_ERROR_REPORTING
|
|
||||||
PrintSourceTextErrorLine(Parser->FileName, Parser->SourceText, Parser->Line, Parser->CharacterPos);
|
|
||||||
#else
|
|
||||||
PlatformPrintf("%s:%d: ", Parser->FileName, Parser->Line);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PlatformPrintf("can't %s ", (FuncName == NULL) ? "assign" : "set");
|
PlatformPrintf("can't %s ", (FuncName == NULL) ? "assign" : "set");
|
||||||
|
|
||||||
if (Type1 != NULL)
|
if (Type1 != NULL)
|
||||||
|
|
Loading…
Reference in a new issue