Jacek Caban : vbscript: Added function arguments compiler implementation.

Alexandre Julliard julliard at winehq.org
Wed Sep 14 12:25:40 CDT 2011


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Sep 14 13:55:57 2011 +0200

vbscript: Added function arguments compiler implementation.

---

 dlls/vbscript/compile.c  |   23 +++++++++++++++++++++--
 dlls/vbscript/vbscript.h |    7 +++++++
 2 files changed, 28 insertions(+), 2 deletions(-)

diff --git a/dlls/vbscript/compile.c b/dlls/vbscript/compile.c
index 651bf7c..386caf7 100644
--- a/dlls/vbscript/compile.c
+++ b/dlls/vbscript/compile.c
@@ -658,9 +658,26 @@ static HRESULT create_function(compile_ctx_t *ctx, function_decl_t *decl, functi
     func->code_ctx = ctx->code;
     func->type = decl->type;
 
+    func->arg_cnt = 0;
     if(decl->args) {
-        FIXME("arguments not implemented\n");
-        return E_NOTIMPL;
+        arg_decl_t *arg;
+        unsigned i;
+
+        for(arg = decl->args; arg; arg = arg->next)
+            func->arg_cnt++;
+
+        func->args = compiler_alloc(ctx->code, func->arg_cnt * sizeof(arg_desc_t));
+        if(!func->args)
+            return E_OUTOFMEMORY;
+
+        for(i = 0, arg = decl->args; arg; arg = arg->next, i++) {
+            func->args[i].name = compiler_alloc_string(ctx->code, arg->name);
+            if(!func->args[i].name)
+                return E_OUTOFMEMORY;
+            func->args[i].by_ref = arg->by_ref;
+        }
+    }else {
+        func->args = NULL;
     }
 
     hres = compile_func(ctx, decl->body, func);
@@ -761,6 +778,8 @@ static vbscode_t *alloc_vbscode(compile_ctx_t *ctx, const WCHAR *source)
     ret->global_code.type = FUNC_GLOBAL;
     ret->global_code.name = NULL;
     ret->global_code.code_ctx = ret;
+    ret->global_code.arg_cnt = 0;
+    ret->global_code.args = NULL;
 
     list_init(&ret->entry);
     return ret;
diff --git a/dlls/vbscript/vbscript.h b/dlls/vbscript/vbscript.h
index d541e9d..0e6d57e 100644
--- a/dlls/vbscript/vbscript.h
+++ b/dlls/vbscript/vbscript.h
@@ -152,6 +152,11 @@ typedef struct {
     instr_arg_t arg2;
 } instr_t;
 
+typedef struct {
+    const WCHAR *name;
+    BOOL by_ref;
+} arg_desc_t;
+
 typedef enum {
     FUNC_GLOBAL,
     FUNC_SUB
@@ -160,6 +165,8 @@ typedef enum {
 struct _function_t {
     function_type_t type;
     const WCHAR *name;
+    arg_desc_t *args;
+    unsigned arg_cnt;
     unsigned code_off;
     vbscode_t *code_ctx;
     function_t *next;




More information about the wine-cvs mailing list