diff options
Diffstat (limited to 'bitbake/lib/bb/parse/parse_c/bitbakescanner.l')
-rw-r--r-- | bitbake/lib/bb/parse/parse_c/bitbakescanner.l | 67 |
1 files changed, 48 insertions, 19 deletions
diff --git a/bitbake/lib/bb/parse/parse_c/bitbakescanner.l b/bitbake/lib/bb/parse/parse_c/bitbakescanner.l index 782bc57a0f..f69a7325c3 100644 --- a/bitbake/lib/bb/parse/parse_c/bitbakescanner.l +++ b/bitbake/lib/bb/parse/parse_c/bitbakescanner.l @@ -83,6 +83,7 @@ extern void bbparseTrace(FILE *TraceFILE, char *zTracePrompt); //static const char* rgbInput; //static size_t cbInput; +extern "C" { int lineError; int errorParse; @@ -93,6 +94,8 @@ enum { errorUnsupportedFeature, }; +} + #define YY_EXTRA_TYPE lex_t* /* Read from buffer */ @@ -112,6 +115,8 @@ static const char* fixup_escapes (const char* sz); C_SP [ \t] COMMENT #.*\n OP_ASSIGN "=" +OP_PREDOT ".=" +OP_POSTDOT "=." OP_IMMEDIATE ":=" OP_PREPEND "=+" OP_APPEND "+=" @@ -166,6 +171,10 @@ PROC \({C_SP}*\) yyextra->accept (T_OP_IMMEDIATE); } {OP_ASSIGN} { BEGIN S_RVALUE; yyextra->accept (T_OP_ASSIGN); } +{OP_PREDOT} { BEGIN S_RVALUE; + yyextra->accept (T_OP_PREDOT); } +{OP_POSTDOT} { BEGIN S_RVALUE; + yyextra->accept (T_OP_POSTDOT); } {OP_COND} { BEGIN S_RVALUE; yyextra->accept (T_OP_COND); } @@ -254,35 +263,55 @@ void lex_t::accept (int token, const char* sz) parse (parser, token, t, this); } +void lex_t::input (char *buf, int *result, int max_size) +{ + printf("lex_t::input %p %d\n", buf, max_size); + *result = fread(buf, 1, max_size, file); + printf("lex_t::input result %d\n", *result); +} + int lex_t::line ()const { + printf("lex_t::line\n"); return yyget_lineno (scanner); } -void parse (FILE* file, PyObject* data) -{ - void* parser = bbparseAlloc (malloc); - yyscan_t scanner; - lex_t lex; - yylex_init (&scanner); +extern "C" { + + void parse (FILE* file, PyObject* data) + { + printf("parse bbparseAlloc\n"); + void* parser = bbparseAlloc (malloc); + yyscan_t scanner; + lex_t lex; + + printf("parse yylex_init\n"); + yylex_init (&scanner); - lex.parser = parser; - lex.scanner = scanner; - lex.file = file; - lex.data = data; - lex.parse = bbparse; - yyset_extra (&lex, scanner); + lex.parser = parser; + lex.scanner = scanner; + lex.file = file; + lex.data = data; + lex.parse = bbparse; + printf("parse yyset_extra\n"); + yyset_extra (&lex, scanner); + printf("parse yylex\n"); + int result = yylex (scanner); + + printf("parse result %d\n", result); - int result = yylex (scanner); + lex.accept (0); + printf("parse lex.accept\n"); + bbparseTrace (NULL, NULL); + printf("parse bbparseTrace\n"); - lex.accept (0); - bbparseTrace (NULL, NULL); + if (result != T_EOF) + printf ("premature end of file\n"); - if (result != T_EOF) - printf ("premature end of file\n"); + yylex_destroy (scanner); + bbparseFree (parser, free); + } - yylex_destroy (scanner); - bbparseFree (parser, free); } |