Commit 13f7b176 authored by Hitoshi Yoshida's avatar Hitoshi Yoshida Committed by Commit Bot

IDL Compiler: Accept ', ' to split Exposed values

IDL compiler did not work for cases that have multiple
values separated with ', '.
For example, we couldn't specify "Exposed=(Window, Worker)".

This CL fixes for Exposed cases, thus we will be possible to
use "Expose=(Window, Worker)".
This change works only for Expose attributes, because it is
handled separately, and it would be a huge change if we work
for general cases.


Bug: 904326
Change-Id: I33bc09d96c1dd1afdd29850300add30687fa9d3b
Reviewed-on: https://chromium-review.googlesource.com/c/1331292Reviewed-by: default avatarYuki Shiino <yukishiino@chromium.org>
Reviewed-by: default avatarKent Tamura <tkent@chromium.org>
Reviewed-by: default avatarKenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Hitoshi Yoshida <peria@chromium.org>
Cr-Commit-Position: refs/heads/master@{#608238}
parent 17a0c94f
......@@ -76,6 +76,16 @@ interface BroadcastChannel : EventTarget
interface ByteLengthQueuingStrategy
method constructor
method size
interface CSSSkewX : CSSTransformComponent
attribute @@toStringTag
getter ax
method constructor
setter ax
interface CSSSkewY : CSSTransformComponent
attribute @@toStringTag
getter ay
method constructor
setter ay
interface Cache
attribute @@toStringTag
method add
......@@ -627,6 +637,12 @@ interface IDBObserver
method constructor
method observe
method unobserve
interface IDBObserverChanges
attribute @@toStringTag
getter database
getter records
getter transaction
method constructor
interface IDBOpenDBRequest : IDBRequest
attribute @@toStringTag
getter onblocked
......
......@@ -86,6 +86,14 @@ CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: setter ay
CONSOLE MESSAGE: line 153: interface CSSSkewX : CSSTransformComponent
CONSOLE MESSAGE: line 153: getter ax
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: interface CSSSkewY : CSSTransformComponent
CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ay
CONSOLE MESSAGE: line 153: interface CSSStyleValue
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: method toString
......@@ -339,6 +347,14 @@ CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: setter ay
CONSOLE MESSAGE: line 153: interface CSSSkewX : CSSTransformComponent
CONSOLE MESSAGE: line 153: getter ax
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: interface CSSSkewY : CSSTransformComponent
CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ay
CONSOLE MESSAGE: line 153: interface CSSStyleValue
CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: method toString
......
......@@ -33,6 +33,16 @@ interface BroadcastChannel : EventTarget
interface ByteLengthQueuingStrategy
method constructor
method size
interface CSSSkewX : CSSTransformComponent
attribute @@toStringTag
getter ax
method constructor
setter ax
interface CSSSkewY : CSSTransformComponent
attribute @@toStringTag
getter ay
method constructor
setter ay
interface Cache
attribute @@toStringTag
method add
......
......@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor
[Worker] method size
[Worker] interface CSSSkewX : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ax
[Worker] method constructor
[Worker] setter ax
[Worker] interface CSSSkewY : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ay
[Worker] method constructor
[Worker] setter ay
[Worker] interface Cache
[Worker] attribute @@toStringTag
[Worker] method add
......
......@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor
[Worker] method size
[Worker] interface CSSSkewX : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ax
[Worker] method constructor
[Worker] setter ax
[Worker] interface CSSSkewY : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ay
[Worker] method constructor
[Worker] setter ay
[Worker] interface Cache
[Worker] attribute @@toStringTag
[Worker] method add
......
......@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor
[Worker] method size
[Worker] interface CSSSkewX : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ax
[Worker] method constructor
[Worker] setter ax
[Worker] interface CSSSkewY : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ay
[Worker] method constructor
[Worker] setter ay
[Worker] interface Cache
[Worker] attribute @@toStringTag
[Worker] method add
......@@ -569,6 +579,12 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method constructor
[Worker] method observe
[Worker] method unobserve
[Worker] interface IDBObserverChanges
[Worker] attribute @@toStringTag
[Worker] getter database
[Worker] getter records
[Worker] getter transaction
[Worker] method constructor
[Worker] interface IDBOpenDBRequest : IDBRequest
[Worker] attribute @@toStringTag
[Worker] getter onblocked
......
......@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor
[Worker] method size
[Worker] interface CSSSkewX : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ax
[Worker] method constructor
[Worker] setter ax
[Worker] interface CSSSkewY : CSSTransformComponent
[Worker] attribute @@toStringTag
[Worker] getter ay
[Worker] method constructor
[Worker] setter ay
[Worker] interface Cache
[Worker] attribute @@toStringTag
[Worker] method add
......@@ -564,6 +574,12 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method constructor
[Worker] method observe
[Worker] method unobserve
[Worker] interface IDBObserverChanges
[Worker] attribute @@toStringTag
[Worker] getter database
[Worker] getter records
[Worker] getter transaction
[Worker] method constructor
[Worker] interface IDBOpenDBRequest : IDBRequest
[Worker] attribute @@toStringTag
[Worker] getter onblocked
......
......@@ -67,7 +67,7 @@ def idl_file_to_global_names(idl_filename):
if not global_value:
raise ValueError('[Global] must take an indentifier or an identifier list.\n' +
full_path)
return global_value.strip('()').split(',')
return map(str.strip, global_value.strip('()').split(','))
def idl_files_to_interface_name_global_names(idl_files):
......
......@@ -97,7 +97,8 @@ def record_global_constructors(idl_filename):
global_name_to_constructors[argument['exposed']].extend(new_constructors_list)
else:
# Exposed=env or Exposed=(env1,...) case
exposed_global_names = extended_attributes.get('Exposed', 'Window').strip('()').split(',')
exposed_value = extended_attributes.get('Exposed', 'Window')
exposed_global_names = map(str.strip, exposed_value.strip('()').split(','))
new_constructors_list = generate_global_constructors_list(interface_name, extended_attributes)
for name in exposed_global_names:
global_name_to_constructors[name].extend(new_constructors_list)
......
......@@ -365,7 +365,7 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents):
file_contents = re.sub(block_comment_re, '', file_contents)
match = re.search(
r'(?:\[([^[]*)\]\s*)?'
r'(?:\[([^{};]*)\]\s*)?'
r'(interface|callback\s+interface|partial\s+interface|dictionary)\s+'
r'(\w+)\s*'
r'(:\s*\w+\s*)?'
......@@ -373,22 +373,34 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents):
file_contents, flags=re.DOTALL)
return match
def get_interface_extended_attributes_from_idl(file_contents):
match = match_interface_extended_attributes_and_name_from_idl(file_contents)
if not match or not match.group(1):
return {}
extended_attributes_string = match.group(1)
extended_attributes = {}
# FIXME: this splitting is WRONG: it fails on extended attributes where lists of
# multiple values are used, which are seperated by a comma and a space.
extended_attributes_string = match.group(1).strip()
parts = [extended_attribute.strip()
for extended_attribute in re.split(',\s+', extended_attributes_string)
for extended_attribute in re.split(',', extended_attributes_string)
# Discard empty parts, which may exist due to trailing comma
if extended_attribute.strip()]
# Joins |parts| with commas as far as the parences are not balanced,
# and then converts a (joined) term to a dict entry.
# ex. ['ab=c', 'ab(cd', 'ef', 'gh)', 'f=(a', 'b)']
# => {'ab': 'c', 'ab(cd,ef,gh)': '', 'f': '(a,b)'}
extended_attributes = {}
concatenated = None
for part in parts:
name, _, value = map(string.strip, part.partition('='))
extended_attributes[name] = value
concatenated = (concatenated + ', ' + part) if concatenated else part
parences = concatenated.count('(') - concatenated.count(')')
square_brackets = concatenated.count('[') - concatenated.count(']')
if parences < 0 or square_brackets < 0:
raise ValueError('You have more close braces than open braces.')
if parences == 0 and square_brackets == 0:
name, _, value = map(string.strip, concatenated.partition('='))
extended_attributes[name] = value
concatenated = None
return extended_attributes
......@@ -410,6 +422,7 @@ def get_interface_exposed_arguments(file_contents):
def get_first_interface_name_from_idl(file_contents):
# TODO(peria): This function returns 'mixin' for interface mixins.
match = match_interface_extended_attributes_and_name_from_idl(file_contents)
if match:
return match.group(3)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment