Ignore:
Timestamp:
Sep 23, 2015, 12:24:42 AM (10 years ago)
Author:
[email protected]
Message:

[Streams API] Implement ReadableStream pipeThrough
https://bugs.webkit.org/show_bug.cgi?id=147556

Reviewed by Darin Adler.

Source/JavaScriptCore:

Updating BuiltIns infrastructure to make it reusable from WebCore.
Extracting macros from BuiltinNames and createBuiltinExecutable from BuiltinExecutables.
Updated generate-js-builtins to allow generating builtin CPP/H files in WebCore namespace.

  • JavaScriptCore.xcodeproj/project.pbxproj:
  • builtins/BuiltinExecutables.cpp:

(JSC::BuiltinExecutables::createDefaultConstructor):
(JSC::BuiltinExecutables::createBuiltinExecutable):
(JSC::createBuiltinExecutable):
(JSC::createExecutableInternal):

  • builtins/BuiltinExecutables.h:
  • builtins/BuiltinNames.h:

(JSC::BuiltinNames::BuiltinNames): Deleted.

  • builtins/BuiltinUtils.h: Extracting code from BuiltinNames and BuiltinExecutables.h.
  • bytecode/UnlinkedFunctionExecutable.h:
  • generate-js-builtins:

(getFunctions):
(writeIncludeDirectives):

Source/WebCore:

Adding initial support for JS builtins within WebCore.
This patch allows implementing IDL interface methods in JS, by using the new JSBuiltin keyword.
(No support yet for private identifiers, constructors or accessors).
Integration of the built-in executables and names is implemented within WebCoreJSClientData.
Two files are generated for each JS builtin file:

  • builtin h/cpp files similar to JSCBuiltins.cpp/.h, generated through WebCore/generate-js-builtins from JavaScriptCore/generate-js-builtins)
  • A builtin wrapper file mimicking BuiltinExecutables (generated from WebCore/generate-js-builtins)

Contrary to JSC, each js file is generating its own cpp/h file.
This allows including those files within the JSXX.cpp/.h files generated from the IDL where compilation guard may take effect.

Disabled GObject binding for JSBuiltin methods.

Test: streams/readable-stream-pipeThrough.html

  • CMakeLists.txt: Triggering generate-js-builtins for JS files.
  • DerivedSources.make: Ditto.
  • ForwardingHeaders/builtins/BuiltinUtils.h: Added.
  • ForwardingHeaders/bytecode/UnlinkedFunctionExecutable.h: Added.
  • ForwardingHeaders/runtime/ConstructAbility.h: Added.
  • Modules/streams/ReadableStream.idl: Marking pipeThrough as JS builtin
  • Modules/streams/ReadableStream.js: Added.

(pipeThrough):

  • bindings/js/JSReadableStreamCustom.cpp:
  • bindings/js/WebCoreJSClientData.h: Adding ReadableStreamBuiltinsWrapper to store ReadableStream builtin executable

(WebCore::WebCoreJSClientData::WebCoreJSClientData):
(WebCore::WebCoreJSClientData::readableStreamBuiltins):
(WebCore::initNormalWorldClientData):

  • bindings/scripts/CodeGeneratorGObject.pm: Disabled GObject binding for JSBuiltin methods.
  • bindings/scripts/CodeGeneratorJS.pm: Adding support for JSBuiltin keyword.

(GetFunctionName):
(GenerateHeader):
(GenerateImplementation):
(GenerateHashTableValueArray):
(ComputeFunctionSpecial):
(UseJSBuiltins):

  • bindings/scripts/IDLAttributes.txt: Adding JSBuiltin.
  • bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:

(webkit_dom_test_obj_js_builtin_method):
(webkit_dom_test_obj_js_builtin_method_with_args):

  • bindings/scripts/test/GObject/WebKitDOMTestObj.h:
  • bindings/scripts/test/JS/JSTestObj.cpp:
  • bindings/scripts/test/JS/JSTestObj.h:
  • bindings/scripts/test/ObjC/DOMTestObj.h:
  • bindings/scripts/test/ObjC/DOMTestObj.mm:

(-[DOMTestObj jsBuiltinMethod]):
(-[DOMTestObj jsBuiltinMethodWithArgs:strArg:objArg:]):

  • bindings/scripts/test/TestObj.idl:
  • generate-js-builtins: Added.

LayoutTests:

Rebased test that is now passing.
Adding new tests to improve pipeThrough coverage.

  • streams/readable-stream-pipeThrough-expected.txt: Added.
  • streams/readable-stream-pipeThrough.html: Added.
  • streams/reference-implementation/brand-checks-expected.txt:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/bytecode/UnlinkedFunctionExecutable.h

    r190108 r190155  
    6060class UnlinkedFunctionExecutable final : public JSCell {
    6161public:
    62     friend class BuiltinExecutables;
    6362    friend class CodeCache;
    6463    friend class VM;
     
    7877    const Identifier& inferredName() const { return m_inferredName; }
    7978    JSString* nameValue() const { return m_nameValue.get(); }
     79    void setNameValue(VM& vm, JSString* nameValue) { m_nameValue.set(vm, this, nameValue); }
    8080    unsigned parameterCount() const { return m_parameterCount; };
    8181    SourceParseMode parseMode() const { return m_parseMode; };
     
    102102        int overrideLineNumber);
    103103
    104     FunctionExecutable* link(VM&, const SourceCode&, int overrideLineNumber = -1);
     104    JS_EXPORT_PRIVATE FunctionExecutable* link(VM&, const SourceCode&, int overrideLineNumber = -1);
    105105
    106106    void clearCode()
Note: See TracChangeset for help on using the changeset viewer.