Skip to content

Commit

Permalink
core, feat: support for top-level await operators.
Browse files Browse the repository at this point in the history
  • Loading branch information
xicilion committed Jun 18, 2018
1 parent 78ae3b1 commit 8de2cfd
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 8 deletions.
6 changes: 3 additions & 3 deletions fibjs/src/sandbox/loaders/base_loader.cpp
Expand Up @@ -11,13 +11,13 @@

namespace fibjs {

const char* SandBox::script_args = "(function(__filename,__dirname,require,run,exports,module,argv,repl){";
const char* SandBox::script_args = "(async function(__filename,__dirname,require,run,exports,module,argv,repl){";
static const int32_t script_args_count = 8;

const char* SandBox::worker_args = "(function(__filename,__dirname,require,run,exports,module,Master){";
const char* SandBox::worker_args = "(async function(__filename,__dirname,require,run,exports,module,Master){";
static const int32_t worker_args_count = 7;

const char* SandBox::module_args = "(function(__filename,__dirname,require,run,exports,module){";
const char* SandBox::module_args = "(async function(__filename,__dirname,require,run,exports,module){";
static const int32_t module_args_count = 6;

result_t SandBox::ExtLoader::run_script(Context* ctx, Buffer_base* src, exlib::string name,
Expand Down
6 changes: 5 additions & 1 deletion fibjs/src/sandbox/loaders/js_loader.cpp
Expand Up @@ -9,6 +9,7 @@
#include "path.h"
#include "SandBox.h"
#include "loaders.h"
#include "ifs/util.h"

namespace fibjs {

Expand Down Expand Up @@ -61,10 +62,13 @@ result_t JsLoader::run(SandBox::Context* ctx, Buffer_base* src, exlib::string na
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(v);
util_base::sync(func, true, func);

args[0] = soname;
args[1] = isolate->NewString(pname);
v8::Local<v8::Object> glob = isolate->context()->Global();
v = v8::Local<v8::Function>::Cast(v)->Call(glob, args_count, args);
v = func->Call(glob, args_count, args);
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

Expand Down
6 changes: 5 additions & 1 deletion fibjs/src/sandbox/loaders/jsc_loader.cpp
Expand Up @@ -9,6 +9,7 @@
#include "path.h"
#include "SandBox.h"
#include "ifs/zlib.h"
#include "ifs/util.h"
#include "loaders.h"
#include "version.h"

Expand Down Expand Up @@ -86,10 +87,13 @@ result_t JscLoader::run(SandBox::Context* ctx, Buffer_base* src, exlib::string n
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(v);
util_base::sync(func, true, func);

args[0] = soname;
args[1] = isolate->NewString(pname);
v8::Local<v8::Object> glob = isolate->context()->Global();
v = v8::Local<v8::Function>::Cast(v)->Call(glob, args_count, args);
v = func->Call(glob, args_count, args);
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

Expand Down
6 changes: 5 additions & 1 deletion fibjs/src/sandbox/loaders/ts_loader.cpp
Expand Up @@ -10,6 +10,7 @@
#include "SandBox.h"
#include "Buffer.h"
#include "loaders.h"
#include "ifs/util.h"

namespace fibjs {

Expand Down Expand Up @@ -99,10 +100,13 @@ result_t TsLoader::run(SandBox::Context* ctx, Buffer_base* src, exlib::string na
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

v8::Local<v8::Function> func = v8::Local<v8::Function>::Cast(v);
util_base::sync(func, true, func);

args[0] = soname;
args[1] = isolate->NewString(pname);
v8::Local<v8::Object> glob = isolate->context()->Global();
v = v8::Local<v8::Function>::Cast(v)->Call(glob, args_count, args);
v = func->Call(glob, args_count, args);
if (v.IsEmpty())
return CALL_E_JAVASCRIPT;

Expand Down
7 changes: 5 additions & 2 deletions fibjs/src/util/util_sync.cpp
Expand Up @@ -138,14 +138,17 @@ static void async_promise(const v8::FunctionCallbackInfo<v8::Value>& args)
result_t util_base::sync(v8::Local<v8::Function> func, bool async_func, v8::Local<v8::Function>& retVal)
{
Isolate* isolate = Isolate::current();
v8::Local<v8::Function> func1;

if (async_func || func->IsAsyncFunction())
func = isolate->NewFunction("async_promise", async_promise, func);

retVal = isolate->NewFunction("sync", sync_stub, func);
retVal->SetPrivate(retVal->CreationContext(),
func1 = isolate->NewFunction("sync", sync_stub, func);
func1->SetPrivate(func1->CreationContext(),
v8::Private::ForApi(isolate->m_isolate, isolate->NewString("_async")), func);

retVal = func1;

return 0;
}
}
5 changes: 5 additions & 0 deletions test/module/d2.js
@@ -0,0 +1,5 @@
async function test() {
return 100;
}

module.exports = await test();
4 changes: 4 additions & 0 deletions test/module_test.js
Expand Up @@ -87,6 +87,10 @@ describe("module", () => {
});
});

it("require async file", () => {
assert.equal(require('./module/d2'), 100);
});

it("support symlink", () => {
fs.symlink(path.join(__dirname, 'module', 'p6'), path.join(__dirname, 'module', 'p6_1'));
assert.equal(require('./module/p6/t'), require('./module/p6_1/t'));
Expand Down

0 comments on commit 8de2cfd

Please sign in to comment.