2023-02-14 16:33:57 +00:00
|
|
|
definitions = '''
|
|
|
|
struct Foo10 {
|
|
|
|
int arr[10];
|
|
|
|
};
|
2023-03-16 13:36:30 +00:00
|
|
|
|
|
|
|
#pragma clang diagnostic push
|
|
|
|
#pragma clang diagnostic ignored "-Wzero-length-array"
|
2023-02-14 16:33:57 +00:00
|
|
|
struct Foo0 {
|
|
|
|
int arr[0];
|
|
|
|
};
|
2023-03-16 13:36:30 +00:00
|
|
|
|
|
|
|
using ZeroLengthIntArray = int[0];
|
|
|
|
#pragma clang diagnostic pop
|
|
|
|
|
2023-02-14 16:33:57 +00:00
|
|
|
struct MultiDim {
|
|
|
|
int arr[2][3];
|
|
|
|
};
|
|
|
|
'''
|
|
|
|
[cases]
|
|
|
|
[cases.member_int10]
|
|
|
|
param_types = ["const Foo10&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":40,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":40,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":10,
|
|
|
|
"capacity":10,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
2023-08-16 20:40:36 +01:00
|
|
|
expect_json_v2 = '''[{
|
|
|
|
"staticSize":40,
|
|
|
|
"exclusiveSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":40,
|
|
|
|
"exclusiveSize":0,
|
|
|
|
"length":10,
|
|
|
|
"capacity":10
|
|
|
|
}]}]'''
|
2023-02-14 16:33:57 +00:00
|
|
|
[cases.member_int0]
|
2023-08-16 20:40:36 +01:00
|
|
|
oil_skip = 'zero length arrays fail codegen v2' # https://github.com/facebookexperimental/object-introspection/issues/295
|
2023-02-14 16:33:57 +00:00
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
|
|
|
param_types = ["const Foo0&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":0,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":0,
|
|
|
|
"dynamicSize":0
|
|
|
|
}]}]'''
|
2023-08-16 20:40:36 +01:00
|
|
|
expect_json_v2 = '''[{
|
|
|
|
"staticSize":1,
|
|
|
|
"exclusiveSize":1,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":0,
|
|
|
|
"exclusiveSize":0
|
|
|
|
}]}]'''
|
2023-05-31 16:40:21 +01:00
|
|
|
[cases.multidim_legacy] # Test for legacy behaviour. Remove with OICodeGen
|
2023-08-16 20:40:36 +01:00
|
|
|
oil_disable = 'oil only runs on codegen v2'
|
|
|
|
cli_options = ["-Ftype-graph", "-Ftyped-data-segment", "-Ftree-builder-type-checking", "-Ftree-builder-v2"]
|
2023-02-14 16:33:57 +00:00
|
|
|
param_types = ["const MultiDim&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[{
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"members":[{
|
|
|
|
"staticSize":24,
|
|
|
|
"dynamicSize":0,
|
|
|
|
"length":6,
|
|
|
|
"capacity":6,
|
|
|
|
"elementStaticSize":4
|
|
|
|
}]}]'''
|
2023-05-31 16:40:21 +01:00
|
|
|
[cases.multidim]
|
|
|
|
cli_options = ["-ftype-graph"]
|
|
|
|
param_types = ["const MultiDim&"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '''[
|
|
|
|
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "members":[
|
|
|
|
{"staticSize":24, "dynamicSize":0, "exclusiveSize":0, "length":2, "capacity":2, "elementStaticSize":12, "members":[
|
|
|
|
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4},
|
|
|
|
{"staticSize":12, "dynamicSize":0, "exclusiveSize":12, "length":3, "capacity":3, "elementStaticSize":4}]
|
|
|
|
}]}]'''
|
2023-08-16 20:40:36 +01:00
|
|
|
expect_json_v2 = '''[
|
|
|
|
{"staticSize":24, "exclusiveSize":0, "members":[
|
|
|
|
{"staticSize":24, "exclusiveSize":0, "length":2, "capacity":2, "members":[
|
|
|
|
{"staticSize":12, "exclusiveSize":0, "length":3, "capacity":3},
|
|
|
|
{"staticSize":12, "exclusiveSize":0, "length":3, "capacity":3}]
|
|
|
|
}]}]'''
|
2023-02-14 16:33:57 +00:00
|
|
|
[cases.direct_int10]
|
|
|
|
skip = "Direct array arguments don't work"
|
|
|
|
param_types = ["int[10]"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
|
|
|
|
[cases.direct_int0]
|
|
|
|
skip = "Direct array arguments don't work"
|
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
2023-03-16 13:36:30 +00:00
|
|
|
param_types = ["ZeroLengthIntArray"]
|
2023-02-14 16:33:57 +00:00
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":0, "dynamicSize":0}]'
|
|
|
|
[cases.ref_int10]
|
|
|
|
skip = "CodeGen bug with array reference arguments"
|
|
|
|
param_types = ["const int(&)[10]"]
|
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":40, "dynamicSize":0, "length":10, "capacity":10, "elementStaticSize":4}]'
|
|
|
|
[cases.ref_int0]
|
|
|
|
skip = "CodeGen bug with array reference arguments"
|
|
|
|
# WARNING: zero-length arrays are handled differently to non-empty arrays.
|
|
|
|
# They end up not being treated as containers. This should probably change
|
|
|
|
# in the future.
|
2023-03-16 13:36:30 +00:00
|
|
|
param_types = ["const ZeroLengthIntArray&"]
|
2023-02-14 16:33:57 +00:00
|
|
|
setup = "return {};"
|
|
|
|
expect_json = '[{"staticSize":0, "dynamicSize":0}]'
|