Store a slice in ConstantSpec, rather than a raw pointer.

This commit is contained in:
Ms2ger 2014-06-06 14:23:09 +02:00
parent ba68203ebf
commit d882bb7cc0
2 changed files with 5 additions and 6 deletions

View file

@ -1247,14 +1247,13 @@ class ConstDefiner(PropertyDefiner):
def stringDecl(const): def stringDecl(const):
name = const.identifier.name name = const.identifier.name
return "static %s_name: [u8, ..%i] = %s;\n" % (name, len(name) + 1, return "static %s_name: &'static [u8] = &%s;\n" % (name, str_to_const_array(name))
str_to_const_array(name))
decls = ''.join([stringDecl(m) for m in array]) decls = ''.join([stringDecl(m) for m in array])
return decls + self.generatePrefableArray( return decls + self.generatePrefableArray(
array, name, array, name,
' ConstantSpec { name: &%s_name as *u8 as *libc::c_char, value: %s }', ' ConstantSpec { name: %s_name, value: %s }',
None, None,
'ConstantSpec', 'ConstantSpec',
specData) specData)

View file

@ -192,7 +192,7 @@ pub enum ConstantVal {
#[deriving(Clone)] #[deriving(Clone)]
pub struct ConstantSpec { pub struct ConstantSpec {
pub name: *libc::c_char, pub name: &'static [u8],
pub value: ConstantVal pub value: ConstantVal
} }
@ -313,7 +313,6 @@ fn CreateInterfaceObject(cx: *mut JSContext, global: *mut JSObject, receiver: *m
fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [ConstantSpec]) -> bool { fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [ConstantSpec]) -> bool {
constants.iter().all(|spec| { constants.iter().all(|spec| {
assert!(spec.name.is_not_null());
let jsval = match spec.value { let jsval = match spec.value {
NullVal => NullValue(), NullVal => NullValue(),
IntVal(i) => Int32Value(i), IntVal(i) => Int32Value(i),
@ -323,7 +322,8 @@ fn DefineConstants(cx: *mut JSContext, obj: *mut JSObject, constants: &'static [
VoidVal => UndefinedValue(), VoidVal => UndefinedValue(),
}; };
unsafe { unsafe {
JS_DefineProperty(cx, obj, spec.name, jsval, None, None, JS_DefineProperty(cx, obj, spec.name.as_ptr() as *libc::c_char,
jsval, None, None,
JSPROP_ENUMERATE | JSPROP_READONLY | JSPROP_ENUMERATE | JSPROP_READONLY |
JSPROP_PERMANENT) != 0 JSPROP_PERMANENT) != 0
} }