mirror of
https://github.com/denoland/rusty_v8.git
synced 2024-11-28 16:21:04 -05:00
V8 12.3.219.9 (#1419)
This commit is contained in:
parent
b73a482840
commit
8c18c547a3
7 changed files with 81 additions and 12 deletions
12
.gn
12
.gn
|
@ -73,6 +73,18 @@ default_args = {
|
||||||
# Enable V8 object print for debugging.
|
# Enable V8 object print for debugging.
|
||||||
# v8_enable_object_print = true
|
# v8_enable_object_print = true
|
||||||
|
|
||||||
|
# V8 12.3 added google/fuzztest as a third party dependency.
|
||||||
|
# https://chromium.googlesource.com/v8/v8.git/+/d5acece0c9b89b18716c177d1fcc8f734191e1e2%5E%21/#F4
|
||||||
|
#
|
||||||
|
# This flag disables it.
|
||||||
|
v8_enable_fuzztest = false
|
||||||
|
|
||||||
|
# Disable v8::HandleScope LIFO checks.
|
||||||
|
# https://chromium-review.googlesource.com/c/v8/v8/+/5110566
|
||||||
|
#
|
||||||
|
# rusty_v8 scopes are not on the stack.
|
||||||
|
v8_enable_v8_checks = false
|
||||||
|
|
||||||
# Enable Deno-specific extra bindings
|
# Enable Deno-specific extra bindings
|
||||||
deno_enable_extras = true
|
deno_enable_extras = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Rusty V8 Binding
|
# Rusty V8 Binding
|
||||||
|
|
||||||
V8 Version: 12.1.285.27
|
V8 Version: 12.3.219.9
|
||||||
|
|
||||||
[![ci](https://github.com/denoland/rusty_v8/workflows/ci/badge.svg?branch=main)](https://github.com/denoland/rusty_v8/actions)
|
[![ci](https://github.com/denoland/rusty_v8/workflows/ci/badge.svg?branch=main)](https://github.com/denoland/rusty_v8/actions)
|
||||||
[![crates](https://img.shields.io/crates/v/v8.svg)](https://crates.io/crates/v8)
|
[![crates](https://img.shields.io/crates/v/v8.svg)](https://crates.io/crates/v8)
|
||||||
|
|
|
@ -3073,9 +3073,9 @@ int v8__ModuleRequest__GetSourceOffset(const v8::ModuleRequest& self) {
|
||||||
return self.GetSourceOffset();
|
return self.GetSourceOffset();
|
||||||
}
|
}
|
||||||
|
|
||||||
const v8::FixedArray* v8__ModuleRequest__GetImportAssertions(
|
const v8::FixedArray* v8__ModuleRequest__GetImportAttributes(
|
||||||
const v8::ModuleRequest& self) {
|
const v8::ModuleRequest& self) {
|
||||||
return local_to_ptr(self.GetImportAssertions());
|
return local_to_ptr(self.GetImportAttributes());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct WasmStreamingSharedPtr {
|
struct WasmStreamingSharedPtr {
|
||||||
|
|
|
@ -548,7 +548,7 @@ impl Isolate {
|
||||||
// Byte offset inside `Isolate` where the isolate data slots are stored. This
|
// Byte offset inside `Isolate` where the isolate data slots are stored. This
|
||||||
// should be the same as the value of `kIsolateEmbedderDataOffset` which is
|
// should be the same as the value of `kIsolateEmbedderDataOffset` which is
|
||||||
// defined in `v8-internal.h`.
|
// defined in `v8-internal.h`.
|
||||||
const EMBEDDER_DATA_OFFSET: usize = size_of::<[*const (); 65]>();
|
const EMBEDDER_DATA_OFFSET: usize = size_of::<[*const (); 67]>();
|
||||||
|
|
||||||
// Isolate data slots used internally by rusty_v8.
|
// Isolate data slots used internally by rusty_v8.
|
||||||
const ANNEX_SLOT: u32 = 0;
|
const ANNEX_SLOT: u32 = 0;
|
||||||
|
|
|
@ -193,7 +193,7 @@ extern "C" {
|
||||||
this: *const ModuleRequest,
|
this: *const ModuleRequest,
|
||||||
) -> *const String;
|
) -> *const String;
|
||||||
fn v8__ModuleRequest__GetSourceOffset(this: *const ModuleRequest) -> int;
|
fn v8__ModuleRequest__GetSourceOffset(this: *const ModuleRequest) -> int;
|
||||||
fn v8__ModuleRequest__GetImportAssertions(
|
fn v8__ModuleRequest__GetImportAttributes(
|
||||||
this: *const ModuleRequest,
|
this: *const ModuleRequest,
|
||||||
) -> *const FixedArray;
|
) -> *const FixedArray;
|
||||||
fn v8__Module__GetStalledTopLevelAwaitMessage(
|
fn v8__Module__GetStalledTopLevelAwaitMessage(
|
||||||
|
@ -480,7 +480,7 @@ impl ModuleRequest {
|
||||||
unsafe { v8__ModuleRequest__GetSourceOffset(self) }
|
unsafe { v8__ModuleRequest__GetSourceOffset(self) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Contains the import assertions for this request in the form:
|
/// Contains the import attributes for this request in the form:
|
||||||
/// [key1, value1, source_offset1, key2, value2, source_offset2, ...].
|
/// [key1, value1, source_offset1, key2, value2, source_offset2, ...].
|
||||||
/// The keys and values are of type v8::String, and the source offsets are of
|
/// The keys and values are of type v8::String, and the source offsets are of
|
||||||
/// type Int32. Use Module::source_offset_to_location to convert the source
|
/// type Int32. Use Module::source_offset_to_location to convert the source
|
||||||
|
@ -493,8 +493,14 @@ impl ModuleRequest {
|
||||||
/// opposed to, for example, triggering an error if an unsupported assertion is
|
/// opposed to, for example, triggering an error if an unsupported assertion is
|
||||||
/// present).
|
/// present).
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn get_import_assertions(&self) -> Local<FixedArray> {
|
pub fn get_import_attributes(&self) -> Local<FixedArray> {
|
||||||
unsafe { Local::from_raw(v8__ModuleRequest__GetImportAssertions(self)) }
|
unsafe { Local::from_raw(v8__ModuleRequest__GetImportAttributes(self)) }
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline(always)]
|
||||||
|
#[deprecated(note = "Use get_import_attributes instead")]
|
||||||
|
pub fn get_import_assertions(&self) -> Local<FixedArray> {
|
||||||
|
self.get_import_attributes()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,7 +4,7 @@ use std::any::type_name;
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::collections::hash_map::DefaultHasher;
|
use std::collections::hash_map::DefaultHasher;
|
||||||
use std::collections::HashMap;
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::convert::{Into, TryFrom, TryInto};
|
use std::convert::{Into, TryFrom, TryInto};
|
||||||
use std::ffi::c_void;
|
use std::ffi::c_void;
|
||||||
use std::ffi::CStr;
|
use std::ffi::CStr;
|
||||||
|
@ -4528,6 +4528,57 @@ fn security_token() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn context_with_object_template() {
|
||||||
|
let _setup_guard = setup::parallel_test();
|
||||||
|
let isolate = &mut v8::Isolate::new(Default::default());
|
||||||
|
|
||||||
|
static mut CALLS: Vec<String> = Vec::new();
|
||||||
|
|
||||||
|
fn definer<'s>(
|
||||||
|
_scope: &mut v8::HandleScope<'s>,
|
||||||
|
_key: v8::Local<'s, v8::Name>,
|
||||||
|
_descriptor: &v8::PropertyDescriptor,
|
||||||
|
_args: v8::PropertyCallbackArguments<'s>,
|
||||||
|
_rv: v8::ReturnValue,
|
||||||
|
) {
|
||||||
|
unsafe {
|
||||||
|
CALLS.push("definer".to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn setter<'s>(
|
||||||
|
_scope: &mut v8::HandleScope<'s>,
|
||||||
|
_key: v8::Local<'s, v8::Name>,
|
||||||
|
_value: v8::Local<'s, v8::Value>,
|
||||||
|
_args: v8::PropertyCallbackArguments<'s>,
|
||||||
|
_rv: v8::ReturnValue,
|
||||||
|
) {
|
||||||
|
unsafe {
|
||||||
|
CALLS.push("setter".to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
let scope = &mut v8::HandleScope::new(isolate);
|
||||||
|
let object_template = v8::ObjectTemplate::new(scope);
|
||||||
|
let mut config = v8::NamedPropertyHandlerConfiguration::new().flags(
|
||||||
|
v8::PropertyHandlerFlags::NON_MASKING
|
||||||
|
| v8::PropertyHandlerFlags::HAS_NO_SIDE_EFFECT,
|
||||||
|
);
|
||||||
|
config = config.definer_raw(definer.map_fn_to());
|
||||||
|
config = config.setter_raw(setter.map_fn_to());
|
||||||
|
object_template.set_named_property_handler(config);
|
||||||
|
let context = v8::Context::new_from_template(scope, object_template);
|
||||||
|
let scope = &mut v8::ContextScope::new(scope, context);
|
||||||
|
eval(scope, r#"Object.defineProperty(globalThis, 'key', { value: 9, enumerable: true, configurable: true, writable: true })"#).unwrap();
|
||||||
|
let calls_set =
|
||||||
|
unsafe { CALLS.clone().into_iter().collect::<HashSet<String>>() };
|
||||||
|
assert!(calls_set.contains("setter"));
|
||||||
|
assert!(calls_set.contains("definer"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn allow_code_generation_from_strings() {
|
fn allow_code_generation_from_strings() {
|
||||||
let _setup_guard = setup::parallel_test();
|
let _setup_guard = setup::parallel_test();
|
||||||
|
@ -4693,7 +4744,7 @@ fn module_instantiation_failures1() {
|
||||||
let loc = module.source_offset_to_location(mr1.get_source_offset());
|
let loc = module.source_offset_to_location(mr1.get_source_offset());
|
||||||
assert_eq!(0, loc.get_line_number());
|
assert_eq!(0, loc.get_line_number());
|
||||||
assert_eq!(7, loc.get_column_number());
|
assert_eq!(7, loc.get_column_number());
|
||||||
assert_eq!(0, mr1.get_import_assertions().length());
|
assert_eq!(0, mr1.get_import_attributes().length());
|
||||||
|
|
||||||
let mr2 = v8::Local::<v8::ModuleRequest>::try_from(
|
let mr2 = v8::Local::<v8::ModuleRequest>::try_from(
|
||||||
module_requests.get(scope, 1).unwrap(),
|
module_requests.get(scope, 1).unwrap(),
|
||||||
|
@ -4703,7 +4754,7 @@ fn module_instantiation_failures1() {
|
||||||
let loc = module.source_offset_to_location(mr2.get_source_offset());
|
let loc = module.source_offset_to_location(mr2.get_source_offset());
|
||||||
assert_eq!(1, loc.get_line_number());
|
assert_eq!(1, loc.get_line_number());
|
||||||
assert_eq!(15, loc.get_column_number());
|
assert_eq!(15, loc.get_column_number());
|
||||||
assert_eq!(0, mr2.get_import_assertions().length());
|
assert_eq!(0, mr2.get_import_attributes().length());
|
||||||
|
|
||||||
// Instantiation should fail.
|
// Instantiation should fail.
|
||||||
{
|
{
|
||||||
|
|
2
v8
2
v8
|
@ -1 +1 @@
|
||||||
Subproject commit ef1375169ab459a6e0219f849769bd949d10fe42
|
Subproject commit db2b8439ec4d3ae972330cc2e9830ccd517d7235
|
Loading…
Reference in a new issue