diff --git a/lib/modules/Tools.pmod/Standalone.pmod/precompile.pike b/lib/modules/Tools.pmod/Standalone.pmod/precompile.pike index 29ab45ab9d25b2996da2afd93a4be1326de58566..066d6e03b7d755618ae989f3bd254dd0923fb3f7 100644 --- a/lib/modules/Tools.pmod/Standalone.pmod/precompile.pike +++ b/lib/modules/Tools.pmod/Standalone.pmod/precompile.pike @@ -1089,8 +1089,20 @@ class PikeType tmp=q[1..sizeof(q)-2]/({".."}); /* Workaround for buggy Parser.Pike */ if(sizeof(tmp)==1) tmp=q[1..sizeof(q)-2]/({".. "}); - if(sizeof(tmp[0])) low=tmp[0]->cast("string")*""; - if(sizeof(tmp[1])) high=tmp[1]->cast("string")*""; + if (sizeof(tmp) == 1) { + int bits; + /* Support the string(Xbit) syntax too. */ + if ((sizeof(q) == 4) && (q[2]->cast("string") == "bit") && + ((bits = (int)q[1]->cast("string")) > 0)) { + low = "0"; + high = sprintf("%d", (1 << bits) - 1); + } else { + error("Syntax error in string subtype.\n"); + } + } else { + if(sizeof(tmp[0])) low=tmp[0]->cast("string")*""; + if(sizeof(tmp[1])) high=tmp[1]->cast("string")*""; + } } args=({PikeType(PC.Token(low)),PikeType(PC.Token(high))}); break;