diff options
| author | Kevin Laeufer | 2020-07-15 12:21:26 -0700 |
|---|---|---|
| committer | GitHub | 2020-07-15 19:21:26 +0000 |
| commit | 24be0ac3121e8f5d7b4bf8d6247e305ed0f0a656 (patch) | |
| tree | 9acbdf85c86985921a84fa329838062a78e71588 /src/main/scala/firrtl/proto | |
| parent | 005a3d1644742029e744a64c2d9c452969bc64ff (diff) | |
ir: store FileInfo string in escaped format (#1690)
This should speed up the common case
as the compiler never operates on the
unescaped string.
The new escape function also fixes a bug
where ']' was not escaped even though it
is the delimiting character for FileInfo.
In order to maintain backwards
compatibility for the ProtoBuf format,
this patch adds escape/unescape calls
when going from/to protobuf format.
For better performance we should consider
changing the protobuf format.
Diffstat (limited to 'src/main/scala/firrtl/proto')
| -rw-r--r-- | src/main/scala/firrtl/proto/FromProto.scala | 4 | ||||
| -rw-r--r-- | src/main/scala/firrtl/proto/ToProto.scala | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/main/scala/firrtl/proto/FromProto.scala b/src/main/scala/firrtl/proto/FromProto.scala index 5de92b57..891dc2ba 100644 --- a/src/main/scala/firrtl/proto/FromProto.scala +++ b/src/main/scala/firrtl/proto/FromProto.scala @@ -45,9 +45,9 @@ object FromProto { case Firrtl.SourceInfo.POSITION_FIELD_NUMBER => val pos = info.getPosition val str = s"${pos.getFilename} ${pos.getLine}:${pos.getColumn}" - ir.FileInfo(ir.StringLit(str)) + ir.FileInfo.fromUnescaped(str) case Firrtl.SourceInfo.TEXT_FIELD_NUMBER => - ir.FileInfo(ir.StringLit(info.getText)) + ir.FileInfo.fromUnescaped(info.getText) // NONE_FIELD_NUMBER or anything else case _ => ir.NoInfo } diff --git a/src/main/scala/firrtl/proto/ToProto.scala b/src/main/scala/firrtl/proto/ToProto.scala index 6cc6d11f..47fb3cec 100644 --- a/src/main/scala/firrtl/proto/ToProto.scala +++ b/src/main/scala/firrtl/proto/ToProto.scala @@ -135,8 +135,8 @@ object ToProto { info match { case ir.NoInfo => ib.setNone(Firrtl.SourceInfo.None.newBuilder) - case ir.FileInfo(ir.StringLit(text)) => - ib.setText(text) + case f : ir.FileInfo => + ib.setText(f.unescaped) // TODO properly implement MultiInfo case ir.MultiInfo(infos) => val x = if (infos.nonEmpty) infos.head else ir.NoInfo |
