зеркало из https://github.com/mozilla/gecko-dev.git
servo: Initial dump of codegen work. Requires manual running of various python scripts to build servo.
Source-Repo: https://github.com/servo/servo Source-Revision: ebd1ce8055fcca488ca91fff768afdbf34d24a5f
This commit is contained in:
Родитель
db6b9635af
Коммит
95d4204bfd
|
@ -6,9 +6,12 @@
|
||||||
*.dSYM
|
*.dSYM
|
||||||
*.dll
|
*.dll
|
||||||
*.dummy
|
*.dummy
|
||||||
|
*.pkl
|
||||||
|
*.pyc
|
||||||
servo-test
|
servo-test
|
||||||
Makefile
|
Makefile
|
||||||
Servo.app
|
Servo.app
|
||||||
build
|
build
|
||||||
config.mk
|
config.mk
|
||||||
config.stamp
|
config.stamp
|
||||||
|
parser.out
|
||||||
|
|
|
@ -2,11 +2,14 @@
|
||||||
# License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
# 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/.
|
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("./parser/")
|
||||||
|
sys.path.append("./ply/")
|
||||||
import os
|
import os
|
||||||
import cPickle
|
import cPickle
|
||||||
import WebIDL
|
import WebIDL
|
||||||
from Configuration import *
|
from Configuration import *
|
||||||
from Codegen import CGBindingRoot, replaceFileIfChanged
|
from CodegenRust import CGBindingRoot, replaceFileIfChanged
|
||||||
# import Codegen in general, so we can set a variable on it
|
# import Codegen in general, so we can set a variable on it
|
||||||
import Codegen
|
import Codegen
|
||||||
|
|
||||||
|
@ -32,6 +35,19 @@ def generate_binding_cpp(config, outputprefix, webidlfile):
|
||||||
if replaceFileIfChanged(filename, root.define()):
|
if replaceFileIfChanged(filename, root.define()):
|
||||||
print "Generating binding implementation: %s" % (filename)
|
print "Generating binding implementation: %s" % (filename)
|
||||||
|
|
||||||
|
def generate_binding_rs(config, outputprefix, webidlfile):
|
||||||
|
"""
|
||||||
|
|config| Is the configuration object.
|
||||||
|
|outputprefix| is a prefix to use for the header guards and filename.
|
||||||
|
"""
|
||||||
|
|
||||||
|
filename = outputprefix + ".rs"
|
||||||
|
root = CGBindingRoot(config, outputprefix, webidlfile)
|
||||||
|
#root2 = CGBindingRoot(config, outputprefix, webidlfile)
|
||||||
|
#if replaceFileIfChanged(filename, root.declare() + root2.define()):
|
||||||
|
if replaceFileIfChanged(filename, root.define()):
|
||||||
|
print "Generating binding implementation: %s" % (filename)
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
# Parse arguments.
|
# Parse arguments.
|
||||||
|
@ -42,7 +58,7 @@ def main():
|
||||||
help="When an error happens, display the Python traceback.")
|
help="When an error happens, display the Python traceback.")
|
||||||
(options, args) = o.parse_args()
|
(options, args) = o.parse_args()
|
||||||
|
|
||||||
if len(args) != 4 or (args[0] != "header" and args[0] != "cpp"):
|
if len(args) != 4 or (args[0] != "header" and args[0] != "cpp" and args[0] != "rs"):
|
||||||
o.error(usagestring)
|
o.error(usagestring)
|
||||||
buildTarget = args[0]
|
buildTarget = args[0]
|
||||||
configFile = os.path.normpath(args[1])
|
configFile = os.path.normpath(args[1])
|
||||||
|
@ -62,6 +78,8 @@ def main():
|
||||||
generate_binding_header(config, outputPrefix, webIDLFile);
|
generate_binding_header(config, outputPrefix, webIDLFile);
|
||||||
elif buildTarget == "cpp":
|
elif buildTarget == "cpp":
|
||||||
generate_binding_cpp(config, outputPrefix, webIDLFile);
|
generate_binding_cpp(config, outputPrefix, webIDLFile);
|
||||||
|
elif buildTarget == "rs":
|
||||||
|
generate_binding_rs(config, outputPrefix, webIDLFile);
|
||||||
else:
|
else:
|
||||||
assert False # not reached
|
assert False # not reached
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,11 @@ DOMInterfaces = {
|
||||||
}
|
}
|
||||||
}],
|
}],
|
||||||
|
|
||||||
|
'ClientRect': [
|
||||||
|
{
|
||||||
|
'nativeType': 'ClientRect',
|
||||||
|
}],
|
||||||
|
|
||||||
'ClientRectList': [
|
'ClientRectList': [
|
||||||
{
|
{
|
||||||
'nativeType': 'nsClientRectList',
|
'nativeType': 'nsClientRectList',
|
||||||
|
@ -509,7 +514,7 @@ addExternalHTMLElement('HTMLOptGroupElement')
|
||||||
addExternalHTMLElement('HTMLVideoElement')
|
addExternalHTMLElement('HTMLVideoElement')
|
||||||
addExternalIface('CanvasGradient', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
addExternalIface('CanvasGradient', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
||||||
addExternalIface('CanvasPattern', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
addExternalIface('CanvasPattern', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
||||||
addExternalIface('ClientRect')
|
#addExternalIface('ClientRect')
|
||||||
addExternalIface('CSSRule')
|
addExternalIface('CSSRule')
|
||||||
addExternalIface('CSSValue')
|
addExternalIface('CSSValue')
|
||||||
addExternalIface('DOMStringList', nativeType='nsDOMStringList',
|
addExternalIface('DOMStringList', nativeType='nsDOMStringList',
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface ClientRect {
|
||||||
|
readonly attribute float top;
|
||||||
|
readonly attribute float right;
|
||||||
|
readonly attribute float bottom;
|
||||||
|
readonly attribute float left;
|
||||||
|
readonly attribute float width;
|
||||||
|
readonly attribute float height;
|
||||||
|
};
|
|
@ -0,0 +1,85 @@
|
||||||
|
/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* 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/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
interface ClientRect;
|
||||||
|
|
||||||
|
interface ClientRectList {
|
||||||
|
readonly attribute unsigned long length;
|
||||||
|
getter ClientRect? item(unsigned long index);
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Helpers
|
||||||
|
|
||||||
|
unsafe fn unwrap<T>(obj: *JSObject) -> *rust_box<T> {
|
||||||
|
let val = JS_GetReservedSlot(obj, 0);
|
||||||
|
cast::reinterpret_cast(&RUST_JSVAL_TO_PRIVATE(val))
|
||||||
|
}
|
||||||
|
|
||||||
|
trait ToJsval {
|
||||||
|
fn to_jsval(cx: *JSContext) -> jsval;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Option : ToJsval {
|
||||||
|
fn to_jsval(cx: *JSContext) -> jsval {
|
||||||
|
match self {
|
||||||
|
Some(v) => v.to_jsval(),
|
||||||
|
None => JSVAL_NULL
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
trait ClientRectList {
|
||||||
|
fn getLength() -> u32;
|
||||||
|
fn getItem(u32 index) -> Option<@ClientRect>;
|
||||||
|
}
|
||||||
|
|
||||||
|
mod ClientRectList {
|
||||||
|
mod bindings {
|
||||||
|
|
||||||
|
fn getLength(cx: *JSContext, argc: c_uint, argv: *jsval) -> JSBool unsafe {
|
||||||
|
let obj = JS_THIS_OBJECT(cx, unsafe::reinterpret_cast(&vp));
|
||||||
|
if obj.is_null() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let conrete = unwrap<ClientRectList>(obj);
|
||||||
|
let rval = (*concrete).getLength();
|
||||||
|
|
||||||
|
JS_SET_RVAL(argv, rval);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn getItem(cx: *JSContext, argc: c_uint, vp: *jsval) -> JSBool unsafe {
|
||||||
|
let obj = JS_THIS_OBJECT(cx, unsafe::reinterpret_cast(&vp));
|
||||||
|
if obj.is_null() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
let raw_arg1 = if argc < 1 {
|
||||||
|
//XXX convert null
|
||||||
|
} else {
|
||||||
|
JS_ARGV(vp, 0);
|
||||||
|
};
|
||||||
|
|
||||||
|
let arg1 = if !RUST_JSVAL_IS_INT(raw_arg1) {
|
||||||
|
//XXX convert to int
|
||||||
|
} else {
|
||||||
|
RUST_JSVAL_TO_INT(raw_arg1);
|
||||||
|
} as u32;
|
||||||
|
|
||||||
|
let conrete = unwrap<ClientRectList>(obj);
|
||||||
|
let rval = (*concrete).getItem(arg1);
|
||||||
|
|
||||||
|
JS_SET_RVAL(vp, rval.to_jsval())
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -10,7 +10,6 @@ class Configuration:
|
||||||
the configuration file.
|
the configuration file.
|
||||||
"""
|
"""
|
||||||
def __init__(self, filename, parseData):
|
def __init__(self, filename, parseData):
|
||||||
|
|
||||||
# Read the configuration file.
|
# Read the configuration file.
|
||||||
glbl = {}
|
glbl = {}
|
||||||
execfile(filename, glbl)
|
execfile(filename, glbl)
|
||||||
|
@ -140,6 +139,7 @@ class Descriptor(DescriptorProvider):
|
||||||
nativeTypeDefault = "mozilla::dom::" + ifaceName
|
nativeTypeDefault = "mozilla::dom::" + ifaceName
|
||||||
|
|
||||||
self.nativeType = desc.get('nativeType', nativeTypeDefault)
|
self.nativeType = desc.get('nativeType', nativeTypeDefault)
|
||||||
|
self.pointerType = desc.get('pointerType', '@')
|
||||||
self.hasInstanceInterface = desc.get('hasInstanceInterface', None)
|
self.hasInstanceInterface = desc.get('hasInstanceInterface', None)
|
||||||
|
|
||||||
# Do something sane for JSObject
|
# Do something sane for JSObject
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
# We do one global pass over all the WebIDL to generate our prototype enum
|
# We do one global pass over all the WebIDL to generate our prototype enum
|
||||||
# and generate information for subsequent phases.
|
# and generate information for subsequent phases.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.append("./parser/")
|
||||||
|
sys.path.append("./ply/")
|
||||||
import os
|
import os
|
||||||
import cStringIO
|
import cStringIO
|
||||||
import WebIDL
|
import WebIDL
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
/* THIS FILE IS AUTOGENERATED - DO NOT EDIT */
|
||||||
|
|
||||||
|
#ifndef mozilla_dom_PrototypeList_h__
|
||||||
|
#define mozilla_dom_PrototypeList_h__
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
namespace prototypes {
|
||||||
|
|
||||||
|
namespace id {
|
||||||
|
|
||||||
|
enum ID
|
||||||
|
{
|
||||||
|
ClientRect = 0,
|
||||||
|
_ID_Count
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace id
|
||||||
|
|
||||||
|
typedef id::ID ID;
|
||||||
|
|
||||||
|
const unsigned MaxProtoChainLength = 1;
|
||||||
|
|
||||||
|
} // namespace prototypes
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
namespace constructors {
|
||||||
|
|
||||||
|
namespace id {
|
||||||
|
|
||||||
|
enum ID
|
||||||
|
{
|
||||||
|
_ID_Count
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace id
|
||||||
|
|
||||||
|
typedef id::ID ID;
|
||||||
|
|
||||||
|
} // namespace constructors
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
|
||||||
|
template <prototypes::ID PrototypeID>
|
||||||
|
struct PrototypeTraits;
|
||||||
|
|
||||||
|
template <class ConcreteClass>
|
||||||
|
struct PrototypeIDMap;
|
||||||
|
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
#endif // mozilla_dom_PrototypeList_h__
|
|
@ -0,0 +1,20 @@
|
||||||
|
#include "ClientRectBinding.h"
|
||||||
|
#include "nsScriptNameSpaceManager.h"
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
void
|
||||||
|
Register(nsScriptNameSpaceManager* aNameSpaceManager)
|
||||||
|
{
|
||||||
|
|
||||||
|
#define REGISTER_PROTO(_dom_class, _pref_check) \
|
||||||
|
aNameSpaceManager->RegisterDefineDOMInterface(NS_LITERAL_STRING(#_dom_class), _dom_class##Binding::DefineDOMInterface, _pref_check);
|
||||||
|
|
||||||
|
REGISTER_PROTO(ClientRect, nullptr);
|
||||||
|
|
||||||
|
#undef REGISTER_PROTO
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef mozilla_dom_RegisterBindings_h__
|
||||||
|
#define mozilla_dom_RegisterBindings_h__
|
||||||
|
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
void
|
||||||
|
Register(nsScriptNameSpaceManager* aNameSpaceManager);
|
||||||
|
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
|
||||||
|
#endif // mozilla_dom_RegisterBindings_h__
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef mozilla_dom_UnionConversions_h__
|
||||||
|
#define mozilla_dom_UnionConversions_h__
|
||||||
|
|
||||||
|
#include "mozilla/dom/UnionTypes.h"
|
||||||
|
#include "nsDOMQS.h"
|
||||||
|
#include "nsDebug.h"
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
|
||||||
|
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
|
||||||
|
#endif // mozilla_dom_UnionConversions_h__
|
|
@ -0,0 +1,12 @@
|
||||||
|
#ifndef mozilla_dom_UnionTypes_h__
|
||||||
|
#define mozilla_dom_UnionTypes_h__
|
||||||
|
|
||||||
|
#include "mozilla/dom/BindingUtils.h"
|
||||||
|
|
||||||
|
namespace mozilla {
|
||||||
|
namespace dom {
|
||||||
|
} // namespace dom
|
||||||
|
} // namespace mozilla
|
||||||
|
|
||||||
|
|
||||||
|
#endif // mozilla_dom_UnionTypes_h__
|
|
@ -0,0 +1,28 @@
|
||||||
|
Copyright (C) 2001-2009,
|
||||||
|
David M. Beazley (Dabeaz LLC)
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer in the documentation
|
||||||
|
and/or other materials provided with the distribution.
|
||||||
|
* Neither the name of the David Beazley or Dabeaz LLC may be used to
|
||||||
|
endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -0,0 +1,9 @@
|
||||||
|
David Beazley's PLY (Python Lex-Yacc)
|
||||||
|
http://www.dabeaz.com/ply/
|
||||||
|
|
||||||
|
Licensed under BSD.
|
||||||
|
|
||||||
|
This directory contains just the code and license from PLY version 3.3;
|
||||||
|
the full distribution (see the URL) also contains examples, tests,
|
||||||
|
documentation, and a longer README.
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
# PLY package
|
||||||
|
# Author: David Beazley (dave@dabeaz.com)
|
||||||
|
|
||||||
|
__all__ = ['lex','yacc']
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -45,6 +45,7 @@ pub mod dom {
|
||||||
pub mod node;
|
pub mod node;
|
||||||
pub mod utils;
|
pub mod utils;
|
||||||
pub mod window;
|
pub mod window;
|
||||||
|
pub mod ClientRectBinding;
|
||||||
}
|
}
|
||||||
pub mod document;
|
pub mod document;
|
||||||
pub mod element;
|
pub mod element;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче