diff --git a/.gitignore b/.gitignore index 416de9a9c93..40b36975911 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 40e489ad567..83a490d1672 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 00000000000..4c3abba56cd --- /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 00000000000..3871b625325 --- /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 77ccaee1c94..53e90eb8fd3 100644 --- a/dlls/vbscript/vbscript.c +++ b/dlls/vbscript/vbscript.c @@ -20,6 +20,8 @@ #include #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; }