[PATCH v3 02/11] jscript: Add a getter to obtain the function's code, if available.

Gabriel Ivăncescu gabrielopcode at gmail.com
Wed Dec 11 08:08:23 CST 2019


Signed-off-by: Gabriel Ivăncescu <gabrielopcode at gmail.com>
---
 dlls/jscript/function.c | 28 ++++++++++++++++++++++++++++
 dlls/jscript/jscript.h  |  1 +
 2 files changed, 29 insertions(+)

diff --git a/dlls/jscript/function.c b/dlls/jscript/function.c
index 7a44f50..3c3098f 100644
--- a/dlls/jscript/function.c
+++ b/dlls/jscript/function.c
@@ -37,6 +37,7 @@ typedef struct {
 struct _function_vtbl_t {
     HRESULT (*call)(script_ctx_t*,FunctionInstance*,IDispatch*,unsigned,unsigned,jsval_t*,jsval_t*);
     HRESULT (*toString)(FunctionInstance*,jsstr_t**);
+    function_code_t* (*get_code)(FunctionInstance*);
     void (*destructor)(FunctionInstance*);
 };
 
@@ -524,6 +525,13 @@ static HRESULT Function_get_arguments(script_ctx_t *ctx, jsdisp_t *jsthis, jsval
     return S_OK;
 }
 
+function_code_t *Function_get_code(jsdisp_t *jsthis)
+{
+    FunctionInstance *function = function_from_jsdisp(jsthis);
+
+    return function->vtbl->get_code(function);
+}
+
 static void Function_destructor(jsdisp_t *dispex)
 {
     FunctionInstance *function = function_from_jsdisp(dispex);
@@ -638,6 +646,11 @@ static HRESULT NativeFunction_toString(FunctionInstance *func, jsstr_t **ret)
     return S_OK;
 }
 
+static function_code_t *NativeFunction_get_code(FunctionInstance *function)
+{
+    return NULL;
+}
+
 static void NativeFunction_destructor(FunctionInstance *function)
 {
 }
@@ -645,6 +658,7 @@ static void NativeFunction_destructor(FunctionInstance *function)
 static const function_vtbl_t NativeFunctionVtbl = {
     NativeFunction_call,
     NativeFunction_toString,
+    NativeFunction_get_code,
     NativeFunction_destructor
 };
 
@@ -749,6 +763,13 @@ static HRESULT InterpretedFunction_toString(FunctionInstance *func, jsstr_t **re
     return *ret ? S_OK : E_OUTOFMEMORY;
 }
 
+static function_code_t *InterpretedFunction_get_code(FunctionInstance *func)
+{
+    InterpretedFunction *function = (InterpretedFunction*)func;
+
+    return function->func_code;
+}
+
 static void InterpretedFunction_destructor(FunctionInstance *func)
 {
     InterpretedFunction *function = (InterpretedFunction*)func;
@@ -761,6 +782,7 @@ static void InterpretedFunction_destructor(FunctionInstance *func)
 static const function_vtbl_t InterpretedFunctionVtbl = {
     InterpretedFunction_call,
     InterpretedFunction_toString,
+    InterpretedFunction_get_code,
     InterpretedFunction_destructor
 };
 
@@ -842,6 +864,11 @@ static HRESULT BindFunction_toString(FunctionInstance *function, jsstr_t **ret)
     return *ret ? S_OK : E_OUTOFMEMORY;
 }
 
+static function_code_t *BindFunction_get_code(FunctionInstance *function)
+{
+    return NULL;
+}
+
 static void BindFunction_destructor(FunctionInstance *func)
 {
     BindFunction *function = (BindFunction*)func;
@@ -858,6 +885,7 @@ static void BindFunction_destructor(FunctionInstance *func)
 static const function_vtbl_t BindFunctionVtbl = {
     BindFunction_call,
     BindFunction_toString,
+    BindFunction_get_code,
     BindFunction_destructor
 };
 
diff --git a/dlls/jscript/jscript.h b/dlls/jscript/jscript.h
index 5d635b7..7174db8 100644
--- a/dlls/jscript/jscript.h
+++ b/dlls/jscript/jscript.h
@@ -307,6 +307,7 @@ HRESULT Function_invoke(jsdisp_t*,IDispatch*,WORD,unsigned,jsval_t*,jsval_t*) DE
 
 HRESULT Function_value(script_ctx_t*,vdisp_t*,WORD,unsigned,jsval_t*,jsval_t*) DECLSPEC_HIDDEN;
 HRESULT Function_get_value(script_ctx_t*,jsdisp_t*,jsval_t*) DECLSPEC_HIDDEN;
+struct _function_code_t *Function_get_code(jsdisp_t*) DECLSPEC_HIDDEN;
 #define DEFAULT_FUNCTION_VALUE {NULL, Function_value,0, Function_get_value}
 
 HRESULT throw_eval_error(script_ctx_t*,HRESULT,const WCHAR*) DECLSPEC_HIDDEN;
-- 
2.21.0




More information about the wine-devel mailing list