mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-04 11:26:09 +00:00
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:
parent
db6b9635af
commit
95d4204bfd
5
servo/.gitignore
vendored
5
servo/.gitignore
vendored
@ -6,9 +6,12 @@
|
||||
*.dSYM
|
||||
*.dll
|
||||
*.dummy
|
||||
*.pkl
|
||||
*.pyc
|
||||
servo-test
|
||||
Makefile
|
||||
Servo.app
|
||||
build
|
||||
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,
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
import sys
|
||||
sys.path.append("./parser/")
|
||||
sys.path.append("./ply/")
|
||||
import os
|
||||
import cPickle
|
||||
import WebIDL
|
||||
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
|
||||
|
||||
@ -32,6 +35,19 @@ def generate_binding_cpp(config, outputprefix, webidlfile):
|
||||
if replaceFileIfChanged(filename, root.define()):
|
||||
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():
|
||||
|
||||
# Parse arguments.
|
||||
@ -42,7 +58,7 @@ def main():
|
||||
help="When an error happens, display the Python traceback.")
|
||||
(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)
|
||||
buildTarget = args[0]
|
||||
configFile = os.path.normpath(args[1])
|
||||
@ -62,6 +78,8 @@ def main():
|
||||
generate_binding_header(config, outputPrefix, webIDLFile);
|
||||
elif buildTarget == "cpp":
|
||||
generate_binding_cpp(config, outputPrefix, webIDLFile);
|
||||
elif buildTarget == "rs":
|
||||
generate_binding_rs(config, outputPrefix, webIDLFile);
|
||||
else:
|
||||
assert False # not reached
|
||||
|
||||
|
@ -113,6 +113,11 @@ DOMInterfaces = {
|
||||
}
|
||||
}],
|
||||
|
||||
'ClientRect': [
|
||||
{
|
||||
'nativeType': 'ClientRect',
|
||||
}],
|
||||
|
||||
'ClientRectList': [
|
||||
{
|
||||
'nativeType': 'nsClientRectList',
|
||||
@ -509,7 +514,7 @@ addExternalHTMLElement('HTMLOptGroupElement')
|
||||
addExternalHTMLElement('HTMLVideoElement')
|
||||
addExternalIface('CanvasGradient', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
||||
addExternalIface('CanvasPattern', headerFile='nsIDOMCanvasRenderingContext2D.h')
|
||||
addExternalIface('ClientRect')
|
||||
#addExternalIface('ClientRect')
|
||||
addExternalIface('CSSRule')
|
||||
addExternalIface('CSSValue')
|
||||
addExternalIface('DOMStringList', nativeType='nsDOMStringList',
|
||||
|
14
servo/src/servo/dom/bindings/codegen/ClientRect.webidl
Normal file
14
servo/src/servo/dom/bindings/codegen/ClientRect.webidl
Normal file
@ -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;
|
||||
};
|
85
servo/src/servo/dom/bindings/codegen/ClientRectList.webidl
Normal file
85
servo/src/servo/dom/bindings/codegen/ClientRectList.webidl
Normal file
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
1291
servo/src/servo/dom/bindings/codegen/CodegenRust.py
Normal file
1291
servo/src/servo/dom/bindings/codegen/CodegenRust.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -10,7 +10,6 @@ class Configuration:
|
||||
the configuration file.
|
||||
"""
|
||||
def __init__(self, filename, parseData):
|
||||
|
||||
# Read the configuration file.
|
||||
glbl = {}
|
||||
execfile(filename, glbl)
|
||||
@ -140,6 +139,7 @@ class Descriptor(DescriptorProvider):
|
||||
nativeTypeDefault = "mozilla::dom::" + ifaceName
|
||||
|
||||
self.nativeType = desc.get('nativeType', nativeTypeDefault)
|
||||
self.pointerType = desc.get('pointerType', '@')
|
||||
self.hasInstanceInterface = desc.get('hasInstanceInterface', None)
|
||||
|
||||
# Do something sane for JSObject
|
||||
|
@ -5,6 +5,9 @@
|
||||
# We do one global pass over all the WebIDL to generate our prototype enum
|
||||
# and generate information for subsequent phases.
|
||||
|
||||
import sys
|
||||
sys.path.append("./parser/")
|
||||
sys.path.append("./ply/")
|
||||
import os
|
||||
import cStringIO
|
||||
import WebIDL
|
||||
|
59
servo/src/servo/dom/bindings/codegen/PrototypeList.h
Normal file
59
servo/src/servo/dom/bindings/codegen/PrototypeList.h
Normal file
@ -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__
|
20
servo/src/servo/dom/bindings/codegen/RegisterBindings.cpp
Normal file
20
servo/src/servo/dom/bindings/codegen/RegisterBindings.cpp
Normal file
@ -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
|
||||
|
14
servo/src/servo/dom/bindings/codegen/RegisterBindings.h
Normal file
14
servo/src/servo/dom/bindings/codegen/RegisterBindings.h
Normal file
@ -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__
|
16
servo/src/servo/dom/bindings/codegen/UnionConversions.h
Normal file
16
servo/src/servo/dom/bindings/codegen/UnionConversions.h
Normal file
@ -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__
|
12
servo/src/servo/dom/bindings/codegen/UnionTypes.h
Normal file
12
servo/src/servo/dom/bindings/codegen/UnionTypes.h
Normal file
@ -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__
|
28
servo/src/servo/dom/bindings/codegen/ply/COPYING
Normal file
28
servo/src/servo/dom/bindings/codegen/ply/COPYING
Normal file
@ -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.
|
9
servo/src/servo/dom/bindings/codegen/ply/README
Normal file
9
servo/src/servo/dom/bindings/codegen/ply/README
Normal file
@ -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.
|
||||
|
4
servo/src/servo/dom/bindings/codegen/ply/ply/__init__.py
Normal file
4
servo/src/servo/dom/bindings/codegen/ply/ply/__init__.py
Normal file
@ -0,0 +1,4 @@
|
||||
# PLY package
|
||||
# Author: David Beazley (dave@dabeaz.com)
|
||||
|
||||
__all__ = ['lex','yacc']
|
1058
servo/src/servo/dom/bindings/codegen/ply/ply/lex.py
Normal file
1058
servo/src/servo/dom/bindings/codegen/ply/ply/lex.py
Normal file
File diff suppressed because it is too large
Load Diff
3276
servo/src/servo/dom/bindings/codegen/ply/ply/yacc.py
Normal file
3276
servo/src/servo/dom/bindings/codegen/ply/ply/yacc.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -45,6 +45,7 @@ pub mod dom {
|
||||
pub mod node;
|
||||
pub mod utils;
|
||||
pub mod window;
|
||||
pub mod ClientRectBinding;
|
||||
}
|
||||
pub mod document;
|
||||
pub mod element;
|
||||
|
Loading…
Reference in New Issue
Block a user