Skip to content

Commit d97f4b9

Browse files
committed
Fixed crash and generation bug in swift generator
1 parent 2d60998 commit d97f4b9

File tree

7 files changed

+21
-0
lines changed

7 files changed

+21
-0
lines changed

Swift/Sources/testprog/test/test.messages.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,15 @@
2929
import Foundation;
3030
import BP3DProto;
3131

32+
public struct TestZst<B: BP3DProto.Buffer> {
33+
34+
public init() {
35+
36+
}
37+
38+
}
39+
40+
3241
public struct TestTest1<B: BP3DProto.Buffer> {
3342
public let s1: String;
3443
public let p1: UInt32;

Swift/Sources/testprog/test/test.messages_from_bytes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import Foundation;
3030
import BP3DProto;
3131

32+
3233
extension TestTest1: BP3DProto.FromBytes {
3334
public typealias Buffer = B;
3435
public typealias Output = Self;

Swift/Sources/testprog/test/test.messages_write.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import Foundation;
3030
import BP3DProto;
3131

32+
3233
extension TestTest1: BP3DProto.WriteTo {
3334
public typealias Input = Self;
3435
public static func write<B1: BP3DProto.WritableBuffer>(input: Self, to out: inout B1) throws {

compiler/src/gen/swift/default_codec/string.template

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include base
2+
13
#fragment push decl.buffer:inline
24
String
35
#fragment pop

compiler/src/gen/swift/message/from_bytes.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ use std::borrow::Cow;
4040
const TEMPLATE: &[u8] = include_bytes!("from_bytes.template");
4141

4242
pub fn gen_message_from_slice_impl(proto: &Protocol, codec_map: &CodecMap, msg: &Message) -> Result<String, Error> {
43+
if msg.ty.is_some() {
44+
return Ok(String::new());
45+
}
4346
let mut options = Options::default();
4447
options.functions_mut().add("remove_leading_coma", |v| Cow::Borrowed(&v[..v.len() - 2]));
4548
let mut templates = Templates {

compiler/src/gen/swift/message/write.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ use crate::gen::template::Template;
3939
const TEMPLATE: &[u8] = include_bytes!("write.template");
4040

4141
pub fn gen_message_write_impl(proto: &Protocol, codec_map: &CodecMap, msg: &Message) -> Result<String, Error> {
42+
if msg.ty.is_some() {
43+
return Ok(String::new());
44+
}
4245
let type_path_map = TypePathMapper::new(&proto.type_path_map, SwiftTypeMapper::from_protocol(proto));
4346
let mut templates = Templates {
4447
template: Template::compile(TEMPLATE).unwrap(),

compiler/src/gen/template/core.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use crate::gen::template::Error;
3333
use itertools::Itertools;
3434
use std::borrow::Cow;
3535
use std::collections::HashMap;
36+
use bp3d_debug::trace;
3637

3738
pub struct Template<'fragment, 'variable> {
3839
fragments: HashMap<String, Fragment<'fragment>>,
@@ -163,6 +164,7 @@ impl<'fragment, 'variable> Template<'fragment, 'variable> {
163164
false => Cow::Owned(format!("{}.{}", path, name)),
164165
true => Cow::Borrowed(name),
165166
};
167+
trace!({fragments=?self.fragments}, "Attempt to find fragment '{}'", name);
166168
let fragment = self.fragments.get(&*name).ok_or_else(|| Error::FragmentNotFound(String::from(&*name)))?;
167169
let sub_rendered = fragment
168170
.content

0 commit comments

Comments
 (0)