Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
ba32e0e2
提交
ba32e0e2
authored
6月 28, 2017
作者:
Andrey Volk
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FS-10435 [mod_v8] Update mod_v8 to support future v8 engine version change
上级
3fef65b7
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
105 行增加
和
1 行删除
+105
-1
javascript.hpp
src/mod/languages/mod_v8/include/javascript.hpp
+13
-0
mod_v8.cpp
src/mod/languages/mod_v8/mod_v8.cpp
+23
-0
fsglobal.cpp
src/mod/languages/mod_v8/src/fsglobal.cpp
+4
-0
jsbase.cpp
src/mod/languages/mod_v8/src/jsbase.cpp
+23
-0
jsmain.cpp
src/mod/languages/mod_v8/src/jsmain.cpp
+42
-1
没有找到文件。
src/mod/languages/mod_v8/include/javascript.hpp
浏览文件 @
ba32e0e2
...
@@ -33,6 +33,10 @@
...
@@ -33,6 +33,10 @@
#include <stdint.h>
#include <stdint.h>
#include <v8.h>
#include <v8.h>
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
#include <libplatform/libplatform.h>
#include <v8-util.h>
#endif
#include <string>
#include <string>
#include <vector>
#include <vector>
...
@@ -202,7 +206,11 @@ private:
...
@@ -202,7 +206,11 @@ private:
JSMain
*
js
;
/* The "owner" of this instance */
JSMain
*
js
;
/* The "owner" of this instance */
/* The callback that happens when the V8 GC cleans up object instances */
/* The callback that happens when the V8 GC cleans up object instances */
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
static
void
WeakCallback
(
const
v8
::
WeakCallbackInfo
<
JSBase
>&
data
);
#else
static
void
WeakCallback
(
const
v8
::
WeakCallbackData
<
v8
::
Object
,
JSBase
>&
data
);
static
void
WeakCallback
(
const
v8
::
WeakCallbackData
<
v8
::
Object
,
JSBase
>&
data
);
#endif
/* Internal basic constructor when creating a new instance from JS. It will call the actual user code inside */
/* Internal basic constructor when creating a new instance from JS. It will call the actual user code inside */
static
void
CreateInstance
(
const
v8
::
FunctionCallbackInfo
<
v8
::
Value
>&
args
);
static
void
CreateInstance
(
const
v8
::
FunctionCallbackInfo
<
v8
::
Value
>&
args
);
...
@@ -305,7 +313,12 @@ public:
...
@@ -305,7 +313,12 @@ public:
const
std
::
string
ExecuteScript
(
const
std
::
string
&
filename
,
bool
*
resultIsError
);
const
std
::
string
ExecuteScript
(
const
std
::
string
&
filename
,
bool
*
resultIsError
);
const
std
::
string
ExecuteString
(
const
std
::
string
&
scriptData
,
const
std
::
string
&
fileName
,
bool
*
resultIsError
);
const
std
::
string
ExecuteString
(
const
std
::
string
&
scriptData
,
const
std
::
string
&
fileName
,
bool
*
resultIsError
);
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
static
void
Initialize
(
v8
::
Platform
**
platform
);
/* Initialize the V8 engine */
#else
static
void
Initialize
();
/* Initialize the V8 engine */
static
void
Initialize
();
/* Initialize the V8 engine */
#endif
static
void
Dispose
();
/* Deinitialize the V8 engine */
static
void
Dispose
();
/* Deinitialize the V8 engine */
static
void
Include
(
const
v8
::
FunctionCallbackInfo
<
v8
::
Value
>&
args
);
/* Adds functionality to include another JavaScript from the running script */
static
void
Include
(
const
v8
::
FunctionCallbackInfo
<
v8
::
Value
>&
args
);
/* Adds functionality to include another JavaScript from the running script */
...
...
src/mod/languages/mod_v8/mod_v8.cpp
浏览文件 @
ba32e0e2
...
@@ -120,6 +120,9 @@ typedef struct {
...
@@ -120,6 +120,9 @@ typedef struct {
switch_event_node_t
*
event_node
;
switch_event_node_t
*
event_node
;
set
<
FSEventHandler
*>
*
event_handlers
;
set
<
FSEventHandler
*>
*
event_handlers
;
char
*
xml_handler
;
char
*
xml_handler
;
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
v8
::
Platform
*
v8platform
;
#endif
}
mod_v8_global_t
;
}
mod_v8_global_t
;
static
mod_v8_global_t
globals
=
{
0
};
static
mod_v8_global_t
globals
=
{
0
};
...
@@ -651,12 +654,23 @@ static int v8_parse_and_execute(switch_core_session_t *session, const char *inpu
...
@@ -651,12 +654,23 @@ static int v8_parse_and_execute(switch_core_session_t *session, const char *inpu
free
(
path
);
free
(
path
);
}
}
// Create a string containing the JavaScript source code.
// Create a string containing the JavaScript source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
ScriptCompiler
::
Source
*
source
=
new
ScriptCompiler
::
Source
(
String
::
NewFromUtf8
(
isolate
,
script_data
));
#else
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
isolate
,
script_data
);
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
isolate
,
script_data
);
#endif
TryCatch
try_catch
;
TryCatch
try_catch
;
// Compile the source code.
// Compile the source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
v8
::
ScriptCompiler
::
CompileOptions
options
=
v8
::
ScriptCompiler
::
kNoCompileOptions
;
Handle
<
v8
::
Script
>
v8_script
=
v8
::
ScriptCompiler
::
Compile
(
context
,
source
,
options
).
ToLocalChecked
();
//Handle<v8::Script> v8_script = v8::ScriptCompiler::Compile(context, source,/* String::NewFromUtf8(isolate, script_file),*/ v8::ScriptCompiler::kProduceCodeCache).ToLocalChecked();
//source->GetCachedData();
#else
Handle
<
Script
>
v8_script
=
Script
::
Compile
(
source
,
Local
<
Value
>::
New
(
isolate
,
String
::
NewFromUtf8
(
isolate
,
script_file
)));
Handle
<
Script
>
v8_script
=
Script
::
Compile
(
source
,
Local
<
Value
>::
New
(
isolate
,
String
::
NewFromUtf8
(
isolate
,
script_file
)));
#endif
if
(
try_catch
.
HasCaught
())
{
if
(
try_catch
.
HasCaught
())
{
v8_error
(
isolate
,
&
try_catch
);
v8_error
(
isolate
,
&
try_catch
);
...
@@ -1007,7 +1021,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_v8_load)
...
@@ -1007,7 +1021,12 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_v8_load)
return
SWITCH_STATUS_FALSE
;
return
SWITCH_STATUS_FALSE
;
}
}
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
globals
.
v8platform
=
NULL
;
JSMain
::
Initialize
(
&
globals
.
v8platform
);
#else
JSMain
::
Initialize
();
JSMain
::
Initialize
();
#endif
/* Make all "built in" modules available to load on demand */
/* Make all "built in" modules available to load on demand */
v8_mod_init_built_in
(
FSCoreDB
::
GetModuleInterface
());
v8_mod_init_built_in
(
FSCoreDB
::
GetModuleInterface
());
...
@@ -1045,6 +1064,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_v8_shutdown)
...
@@ -1045,6 +1064,10 @@ SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_v8_shutdown)
delete
globals
.
event_handlers
;
delete
globals
.
event_handlers
;
switch_mutex_destroy
(
globals
.
event_mutex
);
switch_mutex_destroy
(
globals
.
event_mutex
);
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
delete
globals
.
v8platform
;
#endif
switch_core_hash_destroy
(
&
module_manager
.
load_hash
);
switch_core_hash_destroy
(
&
module_manager
.
load_hash
);
switch_core_destroy_memory_pool
(
&
module_manager
.
pool
);
switch_core_destroy_memory_pool
(
&
module_manager
.
pool
);
...
...
src/mod/languages/mod_v8/src/fsglobal.cpp
浏览文件 @
ba32e0e2
...
@@ -478,7 +478,11 @@ JS_GLOBAL_FUNCTION_IMPL_STATIC(Include)
...
@@ -478,7 +478,11 @@ JS_GLOBAL_FUNCTION_IMPL_STATIC(Include)
if
(
js_file
.
length
()
>
0
)
{
if
(
js_file
.
length
()
>
0
)
{
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
info
.
GetIsolate
(),
js_file
.
c_str
());
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
info
.
GetIsolate
(),
js_file
.
c_str
());
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
info
[
i
]
->
ToString
());
#else
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
info
[
i
]);
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
info
[
i
]);
#endif
info
.
GetReturnValue
().
Set
(
script
->
Run
());
info
.
GetReturnValue
().
Set
(
script
->
Run
());
switch_safe_free
(
path
);
switch_safe_free
(
path
);
return
;
return
;
...
...
src/mod/languages/mod_v8/src/jsbase.cpp
浏览文件 @
ba32e0e2
...
@@ -102,18 +102,33 @@ void JSBase::AddInstance(Isolate *isolate, const Handle<Object>& handle, const H
...
@@ -102,18 +102,33 @@ void JSBase::AddInstance(Isolate *isolate, const Handle<Object>& handle, const H
// Make the handle weak
// Make the handle weak
obj
->
persistentHandle
->
Reset
(
isolate
,
handle
);
obj
->
persistentHandle
->
Reset
(
isolate
,
handle
);
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
obj
->
persistentHandle
->
SetWeak
<
JSBase
>
(
obj
,
WeakCallback
,
WeakCallbackType
::
kParameter
);
#else
obj
->
persistentHandle
->
SetWeak
<
JSBase
>
(
obj
,
WeakCallback
);
obj
->
persistentHandle
->
SetWeak
<
JSBase
>
(
obj
,
WeakCallback
);
#endif
obj
->
persistentHandle
->
MarkIndependent
();
obj
->
persistentHandle
->
MarkIndependent
();
}
}
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
void
JSBase
::
WeakCallback
(
const
WeakCallbackInfo
<
JSBase
>&
data
)
#else
void
JSBase
::
WeakCallback
(
const
WeakCallbackData
<
Object
,
JSBase
>&
data
)
void
JSBase
::
WeakCallback
(
const
WeakCallbackData
<
Object
,
JSBase
>&
data
)
#endif
{
{
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
JSBase
*
wrap
=
(
JSBase
*
)
data
.
GetParameter
();
#else
JSBase
*
wrap
=
data
.
GetParameter
();
JSBase
*
wrap
=
data
.
GetParameter
();
Local
<
Object
>
pobj
=
data
.
GetValue
();
Local
<
Object
>
pobj
=
data
.
GetValue
();
#endif
if
(
wrap
->
autoDestroy
)
{
if
(
wrap
->
autoDestroy
)
{
HandleScope
scope
(
data
.
GetIsolate
());
HandleScope
scope
(
data
.
GetIsolate
());
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
#else
assert
(
pobj
==
*
wrap
->
persistentHandle
);
assert
(
pobj
==
*
wrap
->
persistentHandle
);
#endif
delete
wrap
;
delete
wrap
;
}
else
if
(
!
wrap
->
persistentHandle
->
IsEmpty
())
{
}
else
if
(
!
wrap
->
persistentHandle
->
IsEmpty
())
{
wrap
->
persistentHandle
->
ClearWeak
();
wrap
->
persistentHandle
->
ClearWeak
();
...
@@ -138,7 +153,11 @@ void JSBase::CreateInstance(const v8::FunctionCallbackInfo<Value>& args)
...
@@ -138,7 +153,11 @@ void JSBase::CreateInstance(const v8::FunctionCallbackInfo<Value>& args)
autoDestroy
=
args
[
1
]
->
BooleanValue
();
autoDestroy
=
args
[
1
]
->
BooleanValue
();
}
else
{
}
else
{
// Create a new C++ instance
// Create a new C++ instance
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
Handle
<
External
>
ex
=
Handle
<
External
>::
Cast
(
args
.
Callee
()
->
GetPrivate
(
args
.
GetIsolate
()
->
GetCurrentContext
(),
Private
::
New
(
args
.
GetIsolate
(),
String
::
NewFromUtf8
(
args
.
GetIsolate
(),
"constructor_method"
))).
ToLocalChecked
());
#else
Handle
<
External
>
ex
=
Handle
<
External
>::
Cast
(
args
.
Callee
()
->
GetHiddenValue
(
String
::
NewFromUtf8
(
args
.
GetIsolate
(),
"constructor_method"
)));
Handle
<
External
>
ex
=
Handle
<
External
>::
Cast
(
args
.
Callee
()
->
GetHiddenValue
(
String
::
NewFromUtf8
(
args
.
GetIsolate
(),
"constructor_method"
)));
#endif
if
(
ex
->
Value
())
{
if
(
ex
->
Value
())
{
ConstructorCallback
cb
=
(
ConstructorCallback
)
ex
->
Value
();
ConstructorCallback
cb
=
(
ConstructorCallback
)
ex
->
Value
();
...
@@ -189,7 +208,11 @@ void JSBase::Register(Isolate *isolate, const js_class_definition_t *desc)
...
@@ -189,7 +208,11 @@ void JSBase::Register(Isolate *isolate, const js_class_definition_t *desc)
function
->
InstanceTemplate
()
->
SetAccessor
(
String
::
NewFromUtf8
(
isolate
,
desc
->
properties
[
i
].
name
),
desc
->
properties
[
i
].
get
,
desc
->
properties
[
i
].
set
);
function
->
InstanceTemplate
()
->
SetAccessor
(
String
::
NewFromUtf8
(
isolate
,
desc
->
properties
[
i
].
name
),
desc
->
properties
[
i
].
get
,
desc
->
properties
[
i
].
set
);
}
}
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
function
->
GetFunction
()
->
SetPrivate
(
isolate
->
GetCurrentContext
(),
Private
::
New
(
isolate
,
String
::
NewFromUtf8
(
isolate
,
"constructor_method"
)),
External
::
New
(
isolate
,
(
void
*
)
desc
->
constructor
));
#else
function
->
GetFunction
()
->
SetHiddenValue
(
String
::
NewFromUtf8
(
isolate
,
"constructor_method"
),
External
::
New
(
isolate
,
(
void
*
)
desc
->
constructor
));
function
->
GetFunction
()
->
SetHiddenValue
(
String
::
NewFromUtf8
(
isolate
,
"constructor_method"
),
External
::
New
(
isolate
,
(
void
*
)
desc
->
constructor
));
#endif
// Set the function in the global scope, to make it available
// Set the function in the global scope, to make it available
global
->
Set
(
v8
::
String
::
NewFromUtf8
(
isolate
,
desc
->
name
),
function
->
GetFunction
());
global
->
Set
(
v8
::
String
::
NewFromUtf8
(
isolate
,
desc
->
name
),
function
->
GetFunction
());
...
...
src/mod/languages/mod_v8/src/jsmain.cpp
浏览文件 @
ba32e0e2
...
@@ -41,6 +41,9 @@
...
@@ -41,6 +41,9 @@
#include <iostream>
#include <iostream>
#include <sstream>
#include <sstream>
#include <fstream>
#include <fstream>
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
#include <switch.h>
#endif
using
namespace
std
;
using
namespace
std
;
using
namespace
v8
;
using
namespace
v8
;
...
@@ -97,7 +100,14 @@ const string JSMain::LoadFileToString(const string& filename)
...
@@ -97,7 +100,14 @@ const string JSMain::LoadFileToString(const string& filename)
JSMain
::
JSMain
(
void
)
JSMain
::
JSMain
(
void
)
{
{
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
Isolate
::
CreateParams
params
;
params
.
array_buffer_allocator
=
v8
::
ArrayBuffer
::
Allocator
::
NewDefaultAllocator
();
isolate
=
Isolate
::
New
(
params
);
#else
isolate
=
Isolate
::
New
();
isolate
=
Isolate
::
New
();
#endif
extenderClasses
=
new
vector
<
const
js_class_definition_t
*>
();
extenderClasses
=
new
vector
<
const
js_class_definition_t
*>
();
extenderFunctions
=
new
vector
<
js_function_t
*>
();
extenderFunctions
=
new
vector
<
js_function_t
*>
();
...
@@ -136,7 +146,11 @@ JSMain::~JSMain(void)
...
@@ -136,7 +146,11 @@ JSMain::~JSMain(void)
extenderClasses
->
clear
();
extenderClasses
->
clear
();
extenderFunctions
->
clear
();
extenderFunctions
->
clear
();
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
if
(
isolate
)
{
#else
if
(
!
Isolate
::
GetCurrent
())
{
if
(
!
Isolate
::
GetCurrent
())
{
#endif
enteredIsolate
=
true
;
enteredIsolate
=
true
;
isolate
->
Enter
();
isolate
->
Enter
();
}
}
...
@@ -216,7 +230,11 @@ void JSMain::Include(const v8::FunctionCallbackInfo<Value>& args)
...
@@ -216,7 +230,11 @@ void JSMain::Include(const v8::FunctionCallbackInfo<Value>& args)
if
(
js_file
.
length
()
>
0
)
{
if
(
js_file
.
length
()
>
0
)
{
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
args
.
GetIsolate
(),
js_file
.
c_str
());
Handle
<
String
>
source
=
String
::
NewFromUtf8
(
args
.
GetIsolate
(),
js_file
.
c_str
());
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
args
[
i
]
->
ToString
());
#else
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
args
[
i
]);
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
args
[
i
]);
#endif
args
.
GetReturnValue
().
Set
(
script
->
Run
());
args
.
GetReturnValue
().
Set
(
script
->
Run
());
...
@@ -302,7 +320,11 @@ const string JSMain::ExecuteString(const string& scriptData, const string& fileN
...
@@ -302,7 +320,11 @@ const string JSMain::ExecuteString(const string& scriptData, const string& fileN
TryCatch
try_catch
;
TryCatch
try_catch
;
// Compile the source code.
// Compile the source code.
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
String
::
NewFromUtf8
(
isolate
,
fileName
.
c_str
()));
#else
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
Local
<
Value
>::
New
(
isolate
,
String
::
NewFromUtf8
(
isolate
,
fileName
.
c_str
())));
Handle
<
Script
>
script
=
Script
::
Compile
(
source
,
Local
<
Value
>::
New
(
isolate
,
String
::
NewFromUtf8
(
isolate
,
fileName
.
c_str
())));
#endif
if
(
try_catch
.
HasCaught
())
{
if
(
try_catch
.
HasCaught
())
{
res
=
JSMain
::
GetExceptionInfo
(
isolate
,
&
try_catch
);
res
=
JSMain
::
GetExceptionInfo
(
isolate
,
&
try_catch
);
...
@@ -404,18 +426,37 @@ Isolate *JSMain::GetIsolate()
...
@@ -404,18 +426,37 @@ Isolate *JSMain::GetIsolate()
return
isolate
;
return
isolate
;
}
}
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
void
JSMain
::
Initialize
(
v8
::
Platform
**
platform
)
{
bool
res
=
V8
::
InitializeICUDefaultLocation
(
SWITCH_GLOBAL_dirs
.
mod_dir
);
V8
::
InitializeExternalStartupData
(
SWITCH_GLOBAL_dirs
.
mod_dir
);
*
platform
=
v8
::
platform
::
CreateDefaultPlatform
();
V8
::
InitializePlatform
(
*
platform
);
V8
::
Initialize
();
}
#else
void
JSMain
::
Initialize
()
void
JSMain
::
Initialize
()
{
{
V8
::
InitializeICU
();
// Initialize();
V8
::
InitializeICU
();
// Initialize();
}
}
#endif
void
JSMain
::
Dispose
()
void
JSMain
::
Dispose
()
{
{
// Make sure to cleanup properly!
// Make sure to cleanup properly!
#if defined(V8_MAJOR_VERSION) && V8_MAJOR_VERSION >=5
v8
::
Isolate
::
GetCurrent
()
->
LowMemoryNotification
();
while
(
!
v8
::
Isolate
::
GetCurrent
()
->
IdleNotificationDeadline
(
0.500
))
{}
V8
::
Dispose
();
V8
::
ShutdownPlatform
();
#else
V8
::
LowMemoryNotification
();
V8
::
LowMemoryNotification
();
while
(
!
V8
::
IdleNotification
())
{}
while
(
!
V8
::
IdleNotification
())
{}
V8
::
Dispose
();
V8
::
Dispose
();
#endif
}
}
const
vector
<
const
js_class_definition_t
*>&
JSMain
::
GetExtenderClasses
()
const
const
vector
<
const
js_class_definition_t
*>&
JSMain
::
GetExtenderClasses
()
const
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论