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/builtins/BuiltinExecutables.h

    r190113 r190155  
    5858    VM& m_vm;
    5959
    60     UnlinkedFunctionExecutable* createBuiltinExecutable(const SourceCode& code, const Identifier& name, ConstructAbility constructAbility)
    61     {
    62         return createExecutableInternal(code, name, ConstructorKind::None, constructAbility);
    63     }
    64     UnlinkedFunctionExecutable* createExecutableInternal(const SourceCode&, const Identifier&, ConstructorKind, ConstructAbility);
     60    UnlinkedFunctionExecutable* createBuiltinExecutable(const SourceCode&, const Identifier&, ConstructAbility);
    6561
    6662#define DECLARE_BUILTIN_SOURCE_MEMBERS(name, functionName, length)\
Note: See TracChangeset for help on using the changeset viewer.