Skip to content

Commit 10025d5

Browse files
authored
Merge pull request #84 from lightpanda-io/scriptcompiler-compile
expose ScriptCompiler:Compile
2 parents 8ce13e3 + 4041583 commit 10025d5

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/binding.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -599,6 +599,15 @@ const v8::Module* v8__ScriptCompiler__CompileModule(
599599
return maybe_local_to_ptr(maybe_local);
600600
}
601601

602+
const v8::Script* v8__ScriptCompiler__Compile(
603+
const v8::Context& context,
604+
v8::ScriptCompiler::Source* source,
605+
v8::ScriptCompiler::CompileOptions options,
606+
v8::ScriptCompiler::NoCacheReason reason) {
607+
v8::MaybeLocal<v8::Script> maybe_local = v8::ScriptCompiler::Compile(ptr_to_local(&context), source, options, reason);
608+
return maybe_local_to_ptr(maybe_local);
609+
}
610+
602611
size_t v8__ScriptCompiler__CompilationDetails__SIZEOF() {
603612
return sizeof(v8::ScriptCompiler::CompilationDetails);
604613
}

src/binding.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,6 +1064,12 @@ int v8__Module__GetIdentityHash(const Module* self);
10641064
Value* v8__Module__GetModuleNamespace(const Module* self);
10651065
int v8__Module__ScriptId(const Module* self);
10661066

1067+
Script* v8__ScriptCompiler__Compile(
1068+
const Context* context,
1069+
ScriptCompilerSource* source,
1070+
CompileOptions options,
1071+
NoCacheReason reason);
1072+
10671073
// ModuleRequest
10681074
typedef Data ModuleRequest;
10691075
const String* v8__ModuleRequest__GetSpecifier(const ModuleRequest* self);

src/v8.zig

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1862,6 +1862,22 @@ pub const ScriptCompiler = struct {
18621862
};
18631863
} else return error.JsException;
18641864
}
1865+
1866+
/// [v8]
1867+
/// Compiles the specified script (bound to current context).
1868+
pub fn compile(ctx: Context, src: *ScriptCompilerSource, options: ScriptCompiler.CompileOptions, reason: ScriptCompiler.NoCacheReason) !Script {
1869+
const mb_res = c.v8__ScriptCompiler__Compile(
1870+
ctx.handle,
1871+
&src.inner,
1872+
@intFromEnum(options),
1873+
@intFromEnum(reason),
1874+
);
1875+
if (mb_res) |res| {
1876+
return Script{
1877+
.handle = res,
1878+
};
1879+
} else return error.JsException;
1880+
}
18651881
};
18661882

18671883
pub const Script = struct {
@@ -2120,7 +2136,6 @@ pub const Value = struct {
21202136
return c.v8__Value__IsString(self.handle);
21212137
}
21222138

2123-
21242139
pub fn isSymbol(self: Self) bool {
21252140
return c.v8__Value__IsSymbol(self.handle);
21262141
}

0 commit comments

Comments
 (0)