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 ...@@ -76,6 +76,16 @@ interface BroadcastChannel : EventTarget
interface ByteLengthQueuingStrategy interface ByteLengthQueuingStrategy
method constructor method constructor
method size 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 interface Cache
attribute @@toStringTag attribute @@toStringTag
method add method add
...@@ -627,6 +637,12 @@ interface IDBObserver ...@@ -627,6 +637,12 @@ interface IDBObserver
method constructor method constructor
method observe method observe
method unobserve method unobserve
interface IDBObserverChanges
attribute @@toStringTag
getter database
getter records
getter transaction
method constructor
interface IDBOpenDBRequest : IDBRequest interface IDBOpenDBRequest : IDBRequest
attribute @@toStringTag attribute @@toStringTag
getter onblocked getter onblocked
......
...@@ -86,6 +86,14 @@ CONSOLE MESSAGE: line 153: getter ay ...@@ -86,6 +86,14 @@ CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: setter ay 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: interface CSSStyleValue
CONSOLE MESSAGE: line 153: method constructor CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: method toString CONSOLE MESSAGE: line 153: method toString
...@@ -339,6 +347,14 @@ CONSOLE MESSAGE: line 153: getter ay ...@@ -339,6 +347,14 @@ CONSOLE MESSAGE: line 153: getter ay
CONSOLE MESSAGE: line 153: method constructor CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: setter ax CONSOLE MESSAGE: line 153: setter ax
CONSOLE MESSAGE: line 153: setter ay 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: interface CSSStyleValue
CONSOLE MESSAGE: line 153: method constructor CONSOLE MESSAGE: line 153: method constructor
CONSOLE MESSAGE: line 153: method toString CONSOLE MESSAGE: line 153: method toString
......
...@@ -33,6 +33,16 @@ interface BroadcastChannel : EventTarget ...@@ -33,6 +33,16 @@ interface BroadcastChannel : EventTarget
interface ByteLengthQueuingStrategy interface ByteLengthQueuingStrategy
method constructor method constructor
method size 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 interface Cache
attribute @@toStringTag attribute @@toStringTag
method add method add
......
...@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy [Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor [Worker] method constructor
[Worker] method size [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] interface Cache
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] method add [Worker] method add
......
...@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -35,6 +35,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy [Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor [Worker] method constructor
[Worker] method size [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] interface Cache
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] method add [Worker] method add
......
...@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy [Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor [Worker] method constructor
[Worker] method size [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] interface Cache
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] method add [Worker] method add
...@@ -569,6 +579,12 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -569,6 +579,12 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method constructor [Worker] method constructor
[Worker] method observe [Worker] method observe
[Worker] method unobserve [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] interface IDBOpenDBRequest : IDBRequest
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] getter onblocked [Worker] getter onblocked
......
...@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -63,6 +63,16 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] interface ByteLengthQueuingStrategy [Worker] interface ByteLengthQueuingStrategy
[Worker] method constructor [Worker] method constructor
[Worker] method size [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] interface Cache
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] method add [Worker] method add
...@@ -564,6 +574,12 @@ Starting worker: resources/global-interface-listing-worker.js ...@@ -564,6 +574,12 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method constructor [Worker] method constructor
[Worker] method observe [Worker] method observe
[Worker] method unobserve [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] interface IDBOpenDBRequest : IDBRequest
[Worker] attribute @@toStringTag [Worker] attribute @@toStringTag
[Worker] getter onblocked [Worker] getter onblocked
......
...@@ -67,7 +67,7 @@ def idl_file_to_global_names(idl_filename): ...@@ -67,7 +67,7 @@ def idl_file_to_global_names(idl_filename):
if not global_value: if not global_value:
raise ValueError('[Global] must take an indentifier or an identifier list.\n' + raise ValueError('[Global] must take an indentifier or an identifier list.\n' +
full_path) 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): def idl_files_to_interface_name_global_names(idl_files):
......
...@@ -97,7 +97,8 @@ def record_global_constructors(idl_filename): ...@@ -97,7 +97,8 @@ def record_global_constructors(idl_filename):
global_name_to_constructors[argument['exposed']].extend(new_constructors_list) global_name_to_constructors[argument['exposed']].extend(new_constructors_list)
else: else:
# Exposed=env or Exposed=(env1,...) case # 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) new_constructors_list = generate_global_constructors_list(interface_name, extended_attributes)
for name in exposed_global_names: for name in exposed_global_names:
global_name_to_constructors[name].extend(new_constructors_list) global_name_to_constructors[name].extend(new_constructors_list)
......
...@@ -365,7 +365,7 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents): ...@@ -365,7 +365,7 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents):
file_contents = re.sub(block_comment_re, '', file_contents) file_contents = re.sub(block_comment_re, '', file_contents)
match = re.search( match = re.search(
r'(?:\[([^[]*)\]\s*)?' r'(?:\[([^{};]*)\]\s*)?'
r'(interface|callback\s+interface|partial\s+interface|dictionary)\s+' r'(interface|callback\s+interface|partial\s+interface|dictionary)\s+'
r'(\w+)\s*' r'(\w+)\s*'
r'(:\s*\w+\s*)?' r'(:\s*\w+\s*)?'
...@@ -373,22 +373,34 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents): ...@@ -373,22 +373,34 @@ def match_interface_extended_attributes_and_name_from_idl(file_contents):
file_contents, flags=re.DOTALL) file_contents, flags=re.DOTALL)
return match return match
def get_interface_extended_attributes_from_idl(file_contents): def get_interface_extended_attributes_from_idl(file_contents):
match = match_interface_extended_attributes_and_name_from_idl(file_contents) match = match_interface_extended_attributes_and_name_from_idl(file_contents)
if not match or not match.group(1): if not match or not match.group(1):
return {} return {}
extended_attributes_string = match.group(1) extended_attributes_string = match.group(1).strip()
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.
parts = [extended_attribute.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 # Discard empty parts, which may exist due to trailing comma
if extended_attribute.strip()] 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: for part in parts:
name, _, value = map(string.strip, part.partition('=')) concatenated = (concatenated + ', ' + part) if concatenated else part
extended_attributes[name] = value 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 return extended_attributes
...@@ -410,6 +422,7 @@ def get_interface_exposed_arguments(file_contents): ...@@ -410,6 +422,7 @@ def get_interface_exposed_arguments(file_contents):
def get_first_interface_name_from_idl(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) match = match_interface_extended_attributes_and_name_from_idl(file_contents)
if match: if match:
return match.group(3) 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