summaryrefslogtreecommitdiff
path: root/source4/lib/ejs/ejsParser.c
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2005-06-03 07:47:06 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:17:26 -0500
commit0253adcab3157ec73cc96ad74b19faa2c87e067a (patch)
treeeee6899cbb8af08bfd16c68b0b740dbb4346bd06 /source4/lib/ejs/ejsParser.c
parentb82d8c9928f7a39dbc552f99e1128e736d050622 (diff)
downloadsamba-0253adcab3157ec73cc96ad74b19faa2c87e067a.tar.gz
samba-0253adcab3157ec73cc96ad74b19faa2c87e067a.tar.bz2
samba-0253adcab3157ec73cc96ad74b19faa2c87e067a.zip
r7213: Add a small bit to the ejs parser to ignore a #!/path/to/interpreter
as the first line of the script. This allows smbscript to be used as an interpreter. (This used to be commit 875c8164096e7334de25cc57ac4b8bdc39b9c46b)
Diffstat (limited to 'source4/lib/ejs/ejsParser.c')
-rw-r--r--source4/lib/ejs/ejsParser.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/source4/lib/ejs/ejsParser.c b/source4/lib/ejs/ejsParser.c
index 17fe0ce98a..942b08272e 100644
--- a/source4/lib/ejs/ejsParser.c
+++ b/source4/lib/ejs/ejsParser.c
@@ -67,6 +67,7 @@ static int parseId(Ejs *ep, int state, int flags, char **id,
static int parseInc(Ejs *ep, int state, int flags);
static int parseIf(Ejs *ep, int state, int flags, int *done);
static int parseStmt(Ejs *ep, int state, int flags);
+static int parseHashBang(Ejs *ep, int state, int flags);
static void removeNewlines(Ejs *ep, int state);
static void updateResult(Ejs *ep, int state, int flags, MprVar *vp);
@@ -81,6 +82,12 @@ int ejsParse(Ejs *ep, int state, int flags)
switch (state) {
/*
+ * The very start of a script.
+ */
+ case EJS_STATE_BEGIN:
+ state = parseHashBang(ep, state, flags);
+ break;
+ /*
* Any statement, function arguments or conditional expressions
*/
case EJS_STATE_STMT:
@@ -142,6 +149,26 @@ int ejsParse(Ejs *ep, int state, int flags)
/******************************************************************************/
/*
+ * Parse a #!/path/to/interpreter line which we just throw away.
+ */
+
+static int parseHashBang(Ejs *ep, int state, int flags)
+{
+ int tid;
+
+ /* Look for #! */
+
+ tid = ejsLexGetToken(ep, state);
+
+ if (tid != EJS_TOK_HASHBANG) {
+ ejsLexPutbackToken(ep, tid, ep->token);
+ }
+
+ return EJS_STATE_STMT;
+}
+
+/******************************************************************************/
+/*
* Parse any statement including functions and simple relational operations
*/