From 48a412e2716bb8384e28ca8791f8647e976d633b Mon Sep 17 00:00:00 2001
From: "Paolo G. Giarrusso"
Date: Mon, 10 Oct 2016 01:05:30 +0200
Subject: [PATCH] Fix #1544: extend maximum name length to 2^14 bytes
---
src/dotty/tools/dotc/core/tasty/NameBuffer.scala | 10 ++++++----
tests/run/i1544.check | 1 +
tests/run/i1544.scala | 6 ++++++
3 files changed, 13 insertions(+), 4 deletions(-)
create mode 100644 tests/run/i1544.check
create mode 100644 tests/run/i1544.scala
diff --git a/src/dotty/tools/dotc/core/tasty/NameBuffer.scala b/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
index 69fd63805e18..0fa04b82e5dd 100644
--- a/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
+++ b/src/dotty/tools/dotc/core/tasty/NameBuffer.scala
@@ -42,11 +42,13 @@ class NameBuffer extends TastyBuffer(10000) {
private def withLength(op: => Unit): Unit = {
val lengthAddr = currentAddr
- writeByte(0)
+ val lengthFieldLength = 2
+ for (i <- 0 until lengthFieldLength)
+ writeByte(0)
op
- val length = currentAddr.index - lengthAddr.index - 1
- assert(length < 128)
- putNat(lengthAddr, length, 1)
+ val length = currentAddr.index - lengthAddr.index - lengthFieldLength
+ assert(length < (1 << (7 * lengthFieldLength)))
+ putNat(lengthAddr, length, lengthFieldLength)
}
def writeNameRef(ref: NameRef) = writeNat(ref.index)
diff --git a/tests/run/i1544.check b/tests/run/i1544.check
new file mode 100644
index 000000000000..d81cc0710eb6
--- /dev/null
+++ b/tests/run/i1544.check
@@ -0,0 +1 @@
+42
diff --git a/tests/run/i1544.scala b/tests/run/i1544.scala
new file mode 100644
index 000000000000..05771b3b2111
--- /dev/null
+++ b/tests/run/i1544.scala
@@ -0,0 +1,6 @@
+object Test {
+ def foo(p1: Int, p2: Int, p3: Int, p4: Int, p5: Int, p6: Int, p7: Int, p8: Int, p9: Int, p10: Int, p11: Int, p12: Int, p13: Int, p14: Int, p15: Int, p16: Int, p17: Int, p18: Int, p19: Int, p20: Int, p21: Int, p22: Int, p23: Int, p24: Int, p25: Int, p26: Int, p27: Int, p28: Int, p29: Int, p30: Int, p31: Int, p32: Int, p33: Int, p34: Int, p35: Int, p36: Int, p37: Int, p38: Int, p39: Int, p40: Int, p41: Int, p42: Int, p43: Int, p44: Int, p45: Int, p46: Int, p47: Int, p48: Int, p49: Int, p50: Int, p51: Int, p52: Int, p53: Int, p54: Int, p55: Int, p56: Int, p57: Int, p58: Int, p59: Int, p60: Int, p61: Int, p62: Int, p63: Int, p64: Int, p65: Int, p66: Int, p67: Int, p68: Int, p69: Int, p70: Int, p71: Int, p72: Int, p73: Int, p74: Int, p75: Int, p76: Int, p77: Int, p78: Int, p79: Int, p80: Int, p81: Int, p82: Int, p83: Int, p84: Int, p85: Int, p86: Int, p87: Int, p88: Int, p89: Int, p90: Int, p91: Int, p92: Int, p93: Int, p94: Int, p95: Int, p96: Int, p97: Int, p98: Int, p99: Int, p100: Int, p101: Int, p102: Int, p103: Int, p104: Int, p105: Int, p106: Int, p107: Int, p108: Int, p109: Int): Int = 42
+ def main(args: Array[String]) = {
+ println(foo(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109))
+ }
+}