aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2016-04-09 00:48:19 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2016-05-03 18:36:11 +0200
commiteb94f1a9182c369165ddbf040fcb97c408482689 (patch)
tree80ac2d439c9e76a8163b001700f1f91f248e0ba8 /components/script/dom/bindings/codegen/CodegenRust.py
parentd32648172c711b5d95819c58bcedcee5f50f3018 (diff)
downloadservo-eb94f1a9182c369165ddbf040fcb97c408482689.tar.gz
servo-eb94f1a9182c369165ddbf040fcb97c408482689.zip
Update SpiderMonkey
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py126
1 files changed, 65 insertions, 61 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 1ef2e0a4eb9..c0aa97d633e 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1499,7 +1499,7 @@ class AttrDefiner(PropertyDefiner):
flags = "JSPROP_ENUMERATE | JSPROP_SHARED"
if self.unforgeable:
- flags += " | JSPROP_READONLY | JSPROP_PERMANENT"
+ flags += " | JSPROP_PERMANENT"
def getter(attr):
if self.static:
@@ -1542,7 +1542,7 @@ class AttrDefiner(PropertyDefiner):
array, name,
' JSPropertySpec {\n'
' name: %s as *const u8 as *const libc::c_char,\n'
- ' flags: ((%s) & 0xFF) as u8,\n'
+ ' flags: (%s) as u8,\n'
' getter: %s,\n'
' setter: %s\n'
' }',
@@ -1779,7 +1779,6 @@ class CGDOMJSClass(CGThing):
"finalizeHook": FINALIZE_HOOK_NAME,
"flags": "0",
"name": str_to_const_array(self.descriptor.interface.identifier.name),
- "outerObjectHook": self.descriptor.outerObjectHook,
"resolveHook": "None",
"slots": "1",
"traceHook": TRACE_HOOK_NAME,
@@ -1797,7 +1796,7 @@ class CGDOMJSClass(CGThing):
static Class: DOMJSClass = DOMJSClass {
base: js::jsapi::Class {
name: %(name)s as *const u8 as *const libc::c_char,
- flags: JSCLASS_IS_DOMJSCLASS | JSCLASS_IMPLEMENTS_BARRIERS | %(flags)s |
+ flags: JSCLASS_IS_DOMJSCLASS | %(flags)s |
(((%(slots)s) & JSCLASS_RESERVED_SLOTS_MASK) << JSCLASS_RESERVED_SLOTS_SHIFT)
/* JSCLASS_HAS_RESERVED_SLOTS(%(slots)s) */,
addProperty: None,
@@ -1806,7 +1805,7 @@ static Class: DOMJSClass = DOMJSClass {
setProperty: None,
enumerate: %(enumerateHook)s,
resolve: %(resolveHook)s,
- convert: None,
+ mayResolve: None,
finalize: Some(%(finalizeHook)s),
call: None,
hasInstance: None,
@@ -1814,19 +1813,17 @@ static Class: DOMJSClass = DOMJSClass {
trace: Some(%(traceHook)s),
spec: js::jsapi::ClassSpec {
- createConstructor: None,
- createPrototype: None,
- constructorFunctions: 0 as *const js::jsapi::JSFunctionSpec,
- constructorProperties: 0 as *const js::jsapi::JSPropertySpec,
- prototypeFunctions: 0 as *const js::jsapi::JSFunctionSpec,
- prototypeProperties: 0 as *const js::jsapi::JSPropertySpec,
- finishInit: None,
+ createConstructor_: None,
+ createPrototype_: None,
+ constructorFunctions_: 0 as *const js::jsapi::JSFunctionSpec,
+ constructorProperties_: 0 as *const js::jsapi::JSPropertySpec,
+ prototypeFunctions_: 0 as *const js::jsapi::JSFunctionSpec,
+ prototypeProperties_: 0 as *const js::jsapi::JSPropertySpec,
+ finishInit_: None,
flags: 0,
},
ext: js::jsapi::ClassExtension {
- outerObject: %(outerObjectHook)s,
- innerObject: None,
isWrappedNative: false,
weakmapKeyDelegateOp: None,
objectMovedOp: None,
@@ -1844,7 +1841,6 @@ static Class: DOMJSClass = DOMJSClass {
unwatch: None,
getElements: None,
enumerate: None,
- thisObject: %(outerObjectHook)s,
funToString: None,
},
},
@@ -1878,13 +1874,13 @@ static PrototypeClass: JSClass = JSClass {
setProperty: None,
enumerate: None,
resolve: None,
- convert: None,
+ mayResolve: None,
finalize: None,
call: None,
hasInstance: None,
construct: None,
trace: None,
- reserved: [0 as *mut libc::c_void; 26]
+ reserved: [0 as *mut os::raw::c_void; 23]
};
""" % {'name': name, 'slotCount': slotCount}
@@ -2402,10 +2398,11 @@ class CGCreateInterfaceObjectsMethod(CGAbstractMethod):
let mut interface = RootedObject::new(cx, ptr::null_mut());
create_callback_interface_object(cx, global, sConstants, %(name)s, interface.handle_mut());
assert!(!interface.ptr.is_null());
+assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
(*cache)[PrototypeList::Constructor::%(id)s as usize] = interface.ptr;
-if <*mut JSObject>::needs_post_barrier(interface.ptr) {
- <*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::Constructor::%(id)s as isize));
-}
+<*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::Constructor::%(id)s as isize),
+ ptr::null_mut(),
+ interface.ptr);
""" % {"id": name, "name": str_to_const_array(name)})
if len(self.descriptor.prototypeChain) == 1:
@@ -2445,10 +2442,12 @@ create_interface_prototype_object(cx,
%(consts)s,
prototype.handle_mut());
assert!(!prototype.ptr.is_null());
+assert!((*cache)[PrototypeList::ID::%(id)s as usize].is_null());
(*cache)[PrototypeList::ID::%(id)s as usize] = prototype.ptr;
-if <*mut JSObject>::needs_post_barrier(prototype.ptr) {
- <*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::ID::%(id)s as isize));
-}""" % properties))
+<*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::ID::%(id)s as isize),
+ ptr::null_mut(),
+ prototype.ptr);
+""" % properties))
if self.descriptor.interface.hasInterfaceObject():
properties["name"] = str_to_const_array(name)
@@ -2482,10 +2481,12 @@ create_noncallback_interface_object(cx,
assert!(!interface.ptr.is_null());""" % properties))
if self.descriptor.hasDescendants():
code.append(CGGeneric("""\
+assert!((*cache)[PrototypeList::Constructor::%(id)s as usize].is_null());
(*cache)[PrototypeList::Constructor::%(id)s as usize] = interface.ptr;
-if <*mut JSObject>::needs_post_barrier(prototype.ptr) {
- <*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::Constructor::%(id)s as isize));
-}""" % properties))
+<*mut JSObject>::post_barrier((*cache).as_mut_ptr().offset(PrototypeList::Constructor::%(id)s as isize),
+ ptr::null_mut(),
+ interface.ptr);
+""" % properties))
constructors = self.descriptor.interface.namedConstructors
if constructors:
@@ -3167,7 +3168,7 @@ class CGMemberJITInfo(CGThing):
aliasSet, alwaysInSlot, lazilyInSlot, slotIndex,
returnTypes, args):
"""
- aliasSet is a JSJitInfo::AliasSet value, without the "JSJitInfo::" bit.
+ aliasSet is a JSJitInfo_AliasSet value, without the "JSJitInfo_AliasSet::" bit.
args is None if we don't want to output argTypes for some
reason (e.g. we have overloads or we're not a method) and
@@ -3180,16 +3181,17 @@ class CGMemberJITInfo(CGThing):
initializer = fill(
"""
JSJitInfo {
- call: ${opName} as *const ::libc::c_void,
+ call: ${opName} as *const os::raw::c_void,
protoID: PrototypeList::ID::${name} as u16,
depth: ${depth},
_bitfield_1:
JSJitInfo::new_bitfield_1(
- OpType::${opType} as u8,
- AliasSet::${aliasSet} as u8,
+ JSJitInfo_OpType::${opType} as u8,
+ JSJitInfo_AliasSet::${aliasSet} as u8,
JSValueType::${returnType} as u8,
${isInfallible},
${isMovable},
+ ${isEliminatable},
${isAlwaysInSlot},
${isLazilyCachedInSlot},
${isTypedMethod},
@@ -3206,6 +3208,8 @@ class CGMemberJITInfo(CGThing):
""),
isInfallible=toStringBool(infallible),
isMovable=toStringBool(movable),
+ # FIXME(nox): https://github.com/servo/servo/issues/10991
+ isEliminatable=toStringBool(False),
isAlwaysInSlot=toStringBool(alwaysInSlot),
isLazilyCachedInSlot=toStringBool(lazilyInSlot),
isTypedMethod=toStringBool(isTypedMethod),
@@ -3215,7 +3219,7 @@ class CGMemberJITInfo(CGThing):
if args is not None:
argTypes = "%s_argTypes" % infoName
args = [CGMemberJITInfo.getJSArgType(arg.type) for arg in args]
- args.append("ArgType::ArgTypeListEnd as i32")
+ args.append("JSJitInfo_ArgType::ArgTypeListEnd as i32")
argTypesDecl = (
"const %s: [i32; %d] = [ %s ];\n" %
(argTypes, len(args), ", ".join(args)))
@@ -3224,7 +3228,7 @@ class CGMemberJITInfo(CGThing):
$*{argTypesDecl}
const ${infoName}: JSTypedMethodJitInfo = JSTypedMethodJitInfo {
base: ${jitInfo},
- argTypes: &${argTypes} as *const _ as *const ArgType,
+ argTypes: &${argTypes} as *const _ as *const JSJitInfo_ArgType,
};
""",
argTypesDecl=argTypesDecl,
@@ -3438,56 +3442,56 @@ class CGMemberJITInfo(CGThing):
assert not t.isVoid()
if t.nullable():
# Sometimes it might return null, sometimes not
- return "ArgType::Null as i32 | %s" % CGMemberJITInfo.getJSArgType(t.inner)
+ return "JSJitInfo_ArgType::Null as i32 | %s" % CGMemberJITInfo.getJSArgType(t.inner)
if t.isArray():
# No idea yet
assert False
if t.isSequence():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isGeckoInterface():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isString():
- return "ArgType::String as i32"
+ return "JSJitInfo_ArgType::String as i32"
if t.isEnum():
- return "ArgType::String as i32"
+ return "JSJitInfo_ArgType::String as i32"
if t.isCallback():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isAny():
# The whole point is to return various stuff
- return "ArgType::Any as i32"
+ return "JSJitInfo_ArgType::Any as i32"
if t.isObject():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isSpiderMonkeyInterface():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isUnion():
u = t.unroll()
type = "JSJitInfo::Null as i32" if u.hasNullableType else ""
return reduce(CGMemberJITInfo.getSingleArgType,
u.flatMemberTypes, type)
if t.isDictionary():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if t.isDate():
- return "ArgType::Object as i32"
+ return "JSJitInfo_ArgType::Object as i32"
if not t.isPrimitive():
raise TypeError("No idea what type " + str(t) + " is.")
tag = t.tag()
if tag == IDLType.Tags.bool:
- return "ArgType::Boolean as i32"
+ return "JSJitInfo_ArgType::Boolean as i32"
if tag in [IDLType.Tags.int8, IDLType.Tags.uint8,
IDLType.Tags.int16, IDLType.Tags.uint16,
IDLType.Tags.int32]:
- return "ArgType::Integer as i32"
+ return "JSJitInfo_ArgType::Integer as i32"
if tag in [IDLType.Tags.int64, IDLType.Tags.uint64,
IDLType.Tags.unrestricted_float, IDLType.Tags.float,
IDLType.Tags.unrestricted_double, IDLType.Tags.double]:
# These all use JS_NumberValue, which can return int or double.
# But TI treats "double" as meaning "int or double", so we're
# good to return JSVAL_TYPE_DOUBLE here.
- return "ArgType::Double as i32"
+ return "JSJitInfo_ArgType::Double as i32"
if tag != IDLType.Tags.uint32:
raise TypeError("No idea what type " + str(t) + " is.")
# uint32 is sometimes int and sometimes double.
- return "ArgType::Double as i32"
+ return "JSJitInfo_ArgType::Double as i32"
@staticmethod
def getSingleArgType(existingType, t):
@@ -4319,7 +4323,7 @@ class CGDOMJSProxyHandler_getOwnPropertyDescriptor(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
Argument('HandleId', 'id'),
- Argument('MutableHandle<JSPropertyDescriptor>', 'desc')]
+ Argument('MutableHandle<PropertyDescriptor>', 'desc')]
CGAbstractExternMethod.__init__(self, descriptor, "getOwnPropertyDescriptor",
"bool", args)
self.descriptor = descriptor
@@ -4405,7 +4409,7 @@ class CGDOMJSProxyHandler_defineProperty(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
Argument('HandleId', 'id'),
- Argument('Handle<JSPropertyDescriptor>', 'desc'),
+ Argument('Handle<PropertyDescriptor>', 'desc'),
Argument('*mut ObjectOpResult', 'opresult')]
CGAbstractExternMethod.__init__(self, descriptor, "defineProperty", "bool", args)
self.descriptor = descriptor
@@ -4511,7 +4515,7 @@ class CGDOMJSProxyHandler_ownPropertyKeys(CGAbstractExternMethod):
"""
for name in (*unwrapped_proxy).SupportedPropertyNames() {
let cstring = CString::new(name).unwrap();
- let jsstring = JS_InternString(cx, cstring.as_ptr());
+ let jsstring = JS_AtomizeAndPinString(cx, cstring.as_ptr());
let rooted = RootedString::new(cx, jsstring);
let jsid = INTERNED_STRING_TO_JSID(cx, rooted.handle().get());
let rooted_jsid = RootedId::new(cx, jsid);
@@ -4632,7 +4636,7 @@ return true;"""
class CGDOMJSProxyHandler_get(CGAbstractExternMethod):
def __init__(self, descriptor):
args = [Argument('*mut JSContext', 'cx'), Argument('HandleObject', 'proxy'),
- Argument('HandleObject', 'receiver'), Argument('HandleId', 'id'),
+ Argument('HandleValue', 'receiver'), Argument('HandleId', 'id'),
Argument('MutableHandleValue', 'vp')]
CGAbstractExternMethod.__init__(self, descriptor, "get", "bool", args)
self.descriptor = descriptor
@@ -5366,13 +5370,12 @@ class CGBindingRoot(CGThing):
# Add imports
curr = CGImports(curr, descriptors + callbackDescriptors, mainCallbacks, [
'js',
- 'js::{JSCLASS_GLOBAL_SLOT_COUNT, JSCLASS_IMPLEMENTS_BARRIERS}',
+ 'js::{JS_CALLEE, JSCLASS_GLOBAL_SLOT_COUNT}',
'js::{JSCLASS_IS_DOMJSCLASS, JSCLASS_IS_GLOBAL, JSCLASS_RESERVED_SLOTS_MASK}',
- 'js::{JSCLASS_RESERVED_SLOTS_SHIFT, JSITER_HIDDEN, JSITER_OWNONLY}',
- 'js::{JSITER_SYMBOLS, JSPROP_ENUMERATE, JSPROP_PERMANENT, JSPROP_READONLY}',
- 'js::{JSPROP_SHARED, JS_CALLEE}',
'js::error::throw_type_error',
- 'js::jsapi::{AliasSet, ArgType, AutoIdVector, CallArgs, FreeOp}',
+ 'js::jsapi::{JSJitInfo_AliasSet, JSJitInfo_ArgType, AutoIdVector, CallArgs, FreeOp}',
+ 'js::jsapi::{JSITER_SYMBOLS, JSPROP_ENUMERATE, JSPROP_PERMANENT, JSPROP_READONLY, JSPROP_SHARED}',
+ 'js::jsapi::{JSCLASS_RESERVED_SLOTS_SHIFT, JSITER_HIDDEN, JSITER_OWNONLY}',
'js::jsapi::{GetGlobalForObjectCrossCompartment , GetPropertyKeys, Handle}',
'js::jsapi::{HandleId, HandleObject, HandleValue, HandleValueArray}',
'js::jsapi::{INTERNED_STRING_TO_JSID, IsCallable, JS_CallFunctionValue}',
@@ -5381,16 +5384,16 @@ class CGBindingRoot(CGThing):
'js::jsapi::{JS_GetGlobalForObject, JS_GetObjectPrototype, JS_GetProperty}',
'js::jsapi::{JS_GetPropertyById, JS_GetPropertyDescriptorById, JS_GetReservedSlot}',
'js::jsapi::{JS_HasProperty, JS_HasPropertyById, JS_InitializePropertiesFromCompatibleNativeObject}',
- 'js::jsapi::{JS_InternString, JS_IsExceptionPending, JS_NewObject, JS_NewObjectWithGivenProto}',
+ 'js::jsapi::{JS_AtomizeAndPinString, JS_IsExceptionPending, JS_NewObject, JS_NewObjectWithGivenProto}',
'js::jsapi::{JS_NewObjectWithoutMetadata, JS_NewStringCopyZ, JS_SetProperty}',
'js::jsapi::{JS_SetPrototype, JS_SetReservedSlot, JS_WrapValue, JSAutoCompartment}',
'js::jsapi::{JSAutoRequest, JSContext, JSClass, JSFreeOp, JSFunctionSpec}',
'js::jsapi::{JSJitGetterCallArgs, JSJitInfo, JSJitMethodCallArgs, JSJitSetterCallArgs}',
- 'js::jsapi::{JSNative, JSObject, JSNativeWrapper, JSPropertyDescriptor, JSPropertySpec}',
+ 'js::jsapi::{JSNative, JSObject, JSNativeWrapper, JSPropertySpec}',
'js::jsapi::{JSString, JSTracer, JSType, JSTypedMethodJitInfo, JSValueType}',
- 'js::jsapi::{ObjectOpResult, OpType, MutableHandle, MutableHandleObject}',
- 'js::jsapi::{MutableHandleValue, RootedId, RootedObject, RootedString}',
- 'js::jsapi::{RootedValue, SymbolCode, jsid}',
+ 'js::jsapi::{ObjectOpResult, JSJitInfo_OpType, MutableHandle, MutableHandleObject}',
+ 'js::jsapi::{MutableHandleValue, PropertyDescriptor, RootedId, RootedObject}',
+ 'js::jsapi::{RootedString, RootedValue, SymbolCode, jsid}',
'js::jsval::JSVal',
'js::jsval::{ObjectValue, ObjectOrNullValue, PrivateValue}',
'js::jsval::{NullValue, UndefinedValue}',
@@ -5449,6 +5452,7 @@ class CGBindingRoot(CGThing):
'std::cmp',
'std::mem',
'std::num',
+ 'std::os',
'std::ptr',
'std::str',
'std::rc',