mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Add string_cache override for geckolib based on gecko atoms.
The work in these patches is based on Ms2ger's gecko-atom crate.
This commit is contained in:
parent
825f610dec
commit
b521c293dc
25 changed files with 5153 additions and 185 deletions
36
ports/geckolib/string_cache/regen_atom_macro.py
Executable file
36
ports/geckolib/string_cache/regen_atom_macro.py
Executable file
|
@ -0,0 +1,36 @@
|
|||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
import re
|
||||
import sys
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print "usage: ./%s PATH/TO/OBJDIR" % sys.argv[0]
|
||||
objdir_path = sys.argv[1]
|
||||
|
||||
|
||||
def line_to_atom(line):
|
||||
result = re.match('^GK_ATOM\((.+),\s*"(.*)"\)', line)
|
||||
return (result.group(1), result.group(2))
|
||||
|
||||
|
||||
def symbolify(ident):
|
||||
return "_ZN9nsGkAtoms" + str(len(ident)) + ident + "E"
|
||||
|
||||
|
||||
with open(objdir_path + "/dist/include/nsGkAtomList.h") as f:
|
||||
lines = [line for line in f.readlines() if line.startswith("GK_ATOM")]
|
||||
atoms = [line_to_atom(line) for line in lines]
|
||||
|
||||
with open("atom_macro.rs", "w") as f:
|
||||
f.write("use gecko_bindings::bindings::nsIAtom;\n\n")
|
||||
f.write("use Atom;\n\n")
|
||||
f.write("pub fn unsafe_atom_from_static(ptr: *mut nsIAtom) -> Atom { unsafe { Atom::from_static(ptr) } }\n\n")
|
||||
for atom in atoms:
|
||||
f.write('extern { pub static %s: *mut nsIAtom; }\n' % symbolify(atom[0]))
|
||||
f.write("#[macro_export]\n")
|
||||
f.write("macro_rules! atom {\n")
|
||||
f.writelines(['("%s") => { $crate::atom_macro::unsafe_atom_from_static($crate::atom_macro::%s) };\n'
|
||||
% (atom[1], symbolify(atom[0])) for atom in atoms])
|
||||
f.write("}\n")
|
Loading…
Add table
Add a link
Reference in a new issue