Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (215697 => 215698)
--- trunk/Source/_javascript_Core/ChangeLog 2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/ChangeLog 2017-04-24 22:02:06 UTC (rev 215698)
@@ -1,3 +1,22 @@
+2017-04-24 Joseph Pecoraro <pecor...@apple.com>
+
+ Web Inspector: ObjC RWIProtocol codegen should better handle optional members
+ https://bugs.webkit.org/show_bug.cgi?id=171251
+ <rdar://problem/31697002>
+
+ Reviewed by Brian Burg.
+
+ * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
+ (ObjCProtocolTypesImplementationGenerator._generate_getter_for_member):
+ * inspector/scripts/codegen/objc_generator.py:
+ (ObjCGenerator.protocol_to_objc_expression_for_member):
+ (ObjCGenerator.protocol_to_objc_code_block_for_object_member):
+ Always be safe and nil check object property accesses, optional or not.
+
+ * inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result:
+ * inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result:
+ Rebaselined inspector generator tests.
+
2017-04-24 Saam Barati <sbar...@apple.com>
ASSERTION FAILED: m_table seen with workers/wasm-hashset LayoutTests
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py (215697 => 215698)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py 2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/generate_objc_protocol_types_implementation.py 2017-04-24 22:02:06 UTC (rev 215698)
@@ -31,7 +31,7 @@
from generator import Generator, ucfirst
from models import ObjectType, EnumType, Frameworks
-from objc_generator import ObjCGenerator
+from objc_generator import ObjCTypeCategory, ObjCGenerator
from objc_generator_templates import ObjCGeneratorTemplates as ObjCTemplates
log = logging.getLogger('global')
@@ -206,10 +206,18 @@
var_name = ObjCGenerator.identifier_to_objc_identifier(member.member_name)
getter_method = ObjCGenerator.objc_getter_method_for_member(declaration, member)
basic_expression = '[super %s:@"%s"]' % (getter_method, member.member_name)
- conversion_expression = self.protocol_to_objc_expression_for_member(declaration, member, basic_expression)
- lines = []
- lines.append('- (%s)%s' % (objc_type, var_name))
- lines.append('{')
- lines.append(' return %s;' % conversion_expression)
- lines.append('}')
+ category = ObjCTypeCategory.category_for_type(member.type)
+ if category is ObjCTypeCategory.Object:
+ lines = []
+ lines.append('- (%s)%s' % (objc_type, var_name))
+ lines.append('{')
+ lines.append(self.protocol_to_objc_code_block_for_object_member(declaration, member, basic_expression))
+ lines.append('}')
+ else:
+ conversion_expression = self.protocol_to_objc_expression_for_member(declaration, member, basic_expression)
+ lines = []
+ lines.append('- (%s)%s' % (objc_type, var_name))
+ lines.append('{')
+ lines.append(' return %s;' % conversion_expression)
+ lines.append('}')
return '\n'.join(lines)
Modified: trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py (215697 => 215698)
--- trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py 2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/codegen/objc_generator.py 2017-04-24 22:02:06 UTC (rev 215698)
@@ -446,8 +446,7 @@
return 'fromProtocolString<%s>(%s).value()' % (self.objc_enum_name_for_non_anonymous_enum(member.type), sub_expression)
return sub_expression
if category is ObjCTypeCategory.Object:
- objc_class = self.objc_class_for_type(member.type)
- return '[[%s alloc] initWithInspectorObject:[%s toInspectorObject].get()]' % (objc_class, sub_expression)
+ raise Exception("protocol_to_objc_expression_for_member does not support an Object type. See: protocol_to_objc_code_block_for_object_member")
if category is ObjCTypeCategory.Array:
protocol_type = ObjCGenerator.protocol_type_for_type(member.type.element_type)
objc_class = self.objc_class_for_type(member.type.element_type)
@@ -460,6 +459,15 @@
return 'objcIntegerArray(%s)' % sub_expression
return 'objcArray<%s>(%s)' % (objc_class, sub_expression)
+ def protocol_to_objc_code_block_for_object_member(self, declaration, member, sub_expression):
+ objc_class = self.objc_class_for_type(member.type)
+ lines = []
+ lines.append(' %sJSONObject *object = %s;' % (ObjCGenerator.OBJC_STATIC_PREFIX, sub_expression))
+ lines.append(' if (!object)')
+ lines.append(' return nil;')
+ lines.append(' return [[%s alloc] initWithInspectorObject:[%s toInspectorObject].get()];' % (objc_class, sub_expression))
+ return '\n'.join(lines)
+
def payload_to_objc_expression_for_member(self, declaration, member):
_type = member.type
if isinstance(_type, AliasedType):
Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result (215697 => 215698)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result 2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result 2017-04-24 22:02:06 UTC (rev 215698)
@@ -1926,6 +1926,9 @@
- (RWIProtocolJSONObject *)values
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
}
@@ -1936,6 +1939,9 @@
- (RWIProtocolJSONObject *)payload
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
}
@@ -1946,6 +1952,9 @@
- (TestProtocolDatabaseError *)error
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+ if (!object)
+ return nil;
return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
}
@@ -2092,6 +2101,9 @@
- (RWIProtocolJSONObject *)values
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
}
@@ -2102,6 +2114,9 @@
- (RWIProtocolJSONObject *)payload
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
}
@@ -2112,6 +2127,9 @@
- (TestProtocolDatabaseError *)error
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+ if (!object)
+ return nil;
return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
}
@@ -2376,6 +2394,9 @@
- (RWIProtocolJSONObject *)values
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"values"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"values"] toInspectorObject].get()];
}
@@ -2386,6 +2407,9 @@
- (RWIProtocolJSONObject *)payload
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"payload"];
+ if (!object)
+ return nil;
return [[RWIProtocolJSONObject alloc] initWithInspectorObject:[[super objectForKey:@"payload"] toInspectorObject].get()];
}
@@ -2396,6 +2420,9 @@
- (TestProtocolDatabaseError *)error
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"error"];
+ if (!object)
+ return nil;
return [[TestProtocolDatabaseError alloc] initWithInspectorObject:[[super objectForKey:@"error"] toInspectorObject].get()];
}
Modified: trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result (215697 => 215698)
--- trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result 2017-04-24 21:43:50 UTC (rev 215697)
+++ trunk/Source/_javascript_Core/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result 2017-04-24 22:02:06 UTC (rev 215698)
@@ -1546,6 +1546,9 @@
- (TestProtocolTestRecursiveObject1 *)tree
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"tree"];
+ if (!object)
+ return nil;
return [[TestProtocolTestRecursiveObject1 alloc] initWithInspectorObject:[[super objectForKey:@"tree"] toInspectorObject].get()];
}
@@ -1577,6 +1580,9 @@
- (TestProtocolTestRecursiveObject2 *)obj
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"obj"];
+ if (!object)
+ return nil;
return [[TestProtocolTestRecursiveObject2 alloc] initWithInspectorObject:[[super objectForKey:@"obj"] toInspectorObject].get()];
}
@@ -1608,6 +1614,9 @@
- (TestProtocolTestRecursiveObject1 *)obj
{
+ RWIProtocolJSONObject *object = [super objectForKey:@"obj"];
+ if (!object)
+ return nil;
return [[TestProtocolTestRecursiveObject1 alloc] initWithInspectorObject:[[super objectForKey:@"obj"] toInspectorObject].get()];
}