summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/bb/parse/parse_c/bitbakescanner.l
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/bb/parse/parse_c/bitbakescanner.l')
-rw-r--r--bitbake/lib/bb/parse/parse_c/bitbakescanner.l67
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);
}