makeListListFactoryArg
This commit is contained in:
parent
da13c77541
commit
fcad26acb6
2 changed files with 23 additions and 8 deletions
|
@ -659,6 +659,25 @@ private:
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kj::String makeListListFactoryArg(schema::Type::Reader type) {
|
||||||
|
auto elementType = type.getList().getElementType();
|
||||||
|
switch (elementType.which()) {
|
||||||
|
case schema::Type::STRUCT:
|
||||||
|
return kj::str("new org.capnproto.StructList.Factory(",
|
||||||
|
typeName(elementType), ".factory), ");
|
||||||
|
case schema::Type::LIST:
|
||||||
|
return kj::str("new org.capnproto.ListList.Factory(",
|
||||||
|
makeListListFactoryArg(elementType),
|
||||||
|
"), ");
|
||||||
|
case schema::Type::ENUM:
|
||||||
|
return kj::str("new org.capnproto.EnumList.Factory(",
|
||||||
|
typeName(elementType),
|
||||||
|
".values()), ");
|
||||||
|
default:
|
||||||
|
return kj::str(typeName(type), ".factory, ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FieldText makeFieldText(kj::StringPtr scope, StructSchema::Field field, int indent) {
|
FieldText makeFieldText(kj::StringPtr scope, StructSchema::Field field, int indent) {
|
||||||
auto proto = field.getProto();
|
auto proto = field.getProto();
|
||||||
kj::String titleCase = toTitleCase(proto.getName());
|
kj::String titleCase = toTitleCase(proto.getName());
|
||||||
|
@ -1070,8 +1089,8 @@ private:
|
||||||
readerClass = kj::str("Reader<", elementReaderType, ">");
|
readerClass = kj::str("Reader<", elementReaderType, ">");
|
||||||
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()), ".Builder");
|
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()), ".Builder");
|
||||||
builderClass = kj::str("Builder<", elementBuilderType, ">");
|
builderClass = kj::str("Builder<", elementBuilderType, ">");
|
||||||
readerFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, ");
|
readerFactoryArg = makeListListFactoryArg(typeBody.getList().getElementType());
|
||||||
builderFactoryArg = kj::str(typeName(typeBody.getList().getElementType()), ".factory, ");
|
builderFactoryArg = kj::str(readerFactoryArg);
|
||||||
break;
|
break;
|
||||||
case schema::Type::ANY_POINTER:
|
case schema::Type::ANY_POINTER:
|
||||||
primitiveElement = false;
|
primitiveElement = false;
|
||||||
|
@ -1096,10 +1115,6 @@ private:
|
||||||
fieldSize = kj::str(typeName(typeBody.getList().getElementType()),".STRUCT_SIZE.preferredListEncoding");
|
fieldSize = kj::str(typeName(typeBody.getList().getElementType()),".STRUCT_SIZE.preferredListEncoding");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (primitiveElement) {
|
|
||||||
elementReaderType = kj::str(typeName(typeBody.getList().getElementType()));
|
|
||||||
elementBuilderType = kj::str(typeName(typeBody.getList().getElementType()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -223,8 +223,8 @@ struct TestLists {
|
||||||
listP @6 :List(StructP);
|
listP @6 :List(StructP);
|
||||||
|
|
||||||
int32ListList @7 :List(List(Int32));
|
int32ListList @7 :List(List(Int32));
|
||||||
#textListList @8 :List(List(Text));
|
textListList @8 :List(List(Text));
|
||||||
#structListList @9 :List(List(TestAllTypes));
|
structListList @9 :List(List(TestAllTypes));
|
||||||
#boolListListList @10 :List(List(List(Bool)));
|
#boolListListList @10 :List(List(List(Bool)));
|
||||||
#enumListList @11 :List(List(TestEnum));
|
#enumListList @11 :List(List(TestEnum));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue