Jacek Caban : vbscript: Added beginning parser implementation.

Alexandre Julliard julliard at winehq.org
Tue Sep 6 11:35:53 CDT 2011


Module: wine
Branch: master
Commit: 80bcaf8d7ba68aea7090cac2a18e4e7a13147e88
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=80bcaf8d7ba68aea7090cac2a18e4e7a13147e88

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue Sep  6 15:18:40 2011 +0200

vbscript: Added beginning parser implementation.

---

 .gitignore                |    2 +
 dlls/vbscript/Makefile.in |    3 ++
 dlls/vbscript/parse.h     |   28 ++++++++++++++
 dlls/vbscript/parser.y    |   87 +++++++++++++++++++++++++++++++++++++++++++++
 dlls/vbscript/vbscript.c  |   13 ++++++-
 5 files changed, 132 insertions(+), 1 deletions(-)

diff --git a/.gitignore b/.gitignore
index 416de9a..40b3697 100644
--- a/.gitignore
+++ b/.gitignore
@@ -121,6 +121,8 @@ dlls/sti/sti_wia.h
 dlls/sti/sti_wia_p.c
 dlls/urlmon/urlmon_urlmon.h
 dlls/urlmon/urlmon_urlmon_p.c
+dlls/vbscript/parser.tab.c
+dlls/vbscript/parser.tab.h
 dlls/vbscript/vbscript_classes.h
 dlls/windowscodecs/windowscodecs_wincodec.h
 dlls/windowscodecs/windowscodecs_wincodec_p.c
diff --git a/dlls/vbscript/Makefile.in b/dlls/vbscript/Makefile.in
index 40e489a..83a490d 100644
--- a/dlls/vbscript/Makefile.in
+++ b/dlls/vbscript/Makefile.in
@@ -5,6 +5,9 @@ C_SRCS = \
 	vbscript.c \
 	vbscript_main.c
 
+BISON_SRCS = \
+	parser.y
+
 RC_SRCS = vbscript.rc
 
 IDL_H_SRCS = vbscript_classes.idl
diff --git a/dlls/vbscript/parse.h b/dlls/vbscript/parse.h
new file mode 100644
index 0000000..4c3abba
--- /dev/null
+++ b/dlls/vbscript/parse.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+typedef struct {
+    const WCHAR *code;
+    const WCHAR *ptr;
+    const WCHAR *end;
+
+    BOOL parse_complete;
+    HRESULT hres;
+} parser_ctx_t;
+
+HRESULT parse_script(parser_ctx_t*,const WCHAR*);
diff --git a/dlls/vbscript/parser.y b/dlls/vbscript/parser.y
new file mode 100644
index 0000000..3871b62
--- /dev/null
+++ b/dlls/vbscript/parser.y
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2011 Jacek Caban for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+%{
+
+#include "vbscript.h"
+#include "parse.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(vbscript);
+
+
+#define YYLEX_PARAM ctx
+#define YYPARSE_PARAM ctx
+
+static int parser_error(const char*);
+
+static void parse_complete(parser_ctx_t*);
+
+static int parser_lex(void *lval, parser_ctx_t *ctx)
+{
+    FIXME("\n");
+    return 0;
+}
+
+%}
+
+%pure_parser
+%start Program
+
+%token tEOF
+
+%union {
+    const WCHAR *string;
+}
+
+%%
+
+Program : tEOF      { parse_complete(ctx); }
+
+%%
+
+static int parser_error(const char *str)
+{
+    return 0;
+}
+
+static void parse_complete(parser_ctx_t *ctx)
+{
+    ctx->parse_complete = TRUE;
+}
+
+HRESULT parse_script(parser_ctx_t *ctx, const WCHAR *code)
+{
+    ctx->code = ctx->ptr = code;
+    ctx->end = ctx->code + strlenW(ctx->code);
+
+    ctx->parse_complete = FALSE;
+    ctx->hres = S_OK;
+
+    parser_parse(ctx);
+
+    if(FAILED(ctx->hres))
+        return ctx->hres;
+    if(!ctx->parse_complete) {
+        FIXME("parser failed on parsing %s\n", debugstr_w(ctx->ptr));
+        return E_FAIL;
+    }
+
+    return S_OK;
+}
diff --git a/dlls/vbscript/vbscript.c b/dlls/vbscript/vbscript.c
index 77ccaee..53e90eb 100644
--- a/dlls/vbscript/vbscript.c
+++ b/dlls/vbscript/vbscript.c
@@ -20,6 +20,8 @@
 #include <assert.h>
 
 #include "vbscript.h"
+#include "parse.h"
+
 #include "objsafe.h"
 
 #include "wine/debug.h"
@@ -512,9 +514,18 @@ static HRESULT WINAPI VBScriptParse_ParseScriptText(IActiveScriptParse *iface,
         DWORD dwFlags, VARIANT *pvarResult, EXCEPINFO *pexcepinfo)
 {
     VBScript *This = impl_from_IActiveScriptParse(iface);
-    FIXME("(%p)->(%s %s %p %s %s %u %x %p %p)\n", This, debugstr_w(pstrCode),
+    parser_ctx_t parser;
+    HRESULT hres;
+
+    TRACE("(%p)->(%s %s %p %s %s %u %x %p %p)\n", This, debugstr_w(pstrCode),
           debugstr_w(pstrItemName), punkContext, debugstr_w(pstrDelimiter),
           wine_dbgstr_longlong(dwSourceContextCookie), ulStartingLine, dwFlags, pvarResult, pexcepinfo);
+
+    hres = parse_script(&parser, pstrCode);
+    if(FAILED(hres))
+        return hres;
+
+    FIXME("compiling script not implemented\n");
     return E_NOTIMPL;
 }
 




More information about the wine-cvs mailing list