Warning: session_start(): open(/var/lib/php/sessions/sess_386rt0dodqs28lh3dqr5dp57t4, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
static new ThreadLocal tok_typesAndNamesOfParams_keepModifiers;
static LPairS tok_typesAndNamesOfParams(L tok, O... _) {
bool keepModifiers = boolPar(tok_typesAndNamesOfParams_keepModifiers);
optPar bool typelessMeansObject;
try {
new L> out;
for (int i = 1; i < l(tok); ) {
S t = tok.get(i);
S pre = "";
if (isIdentifier(t) && eqGetOneOf(tok, i+2, ",", null))
if (typelessMeansObject) {
i += 2;
continue with out.add(pair("Object", t));
} else
fail("Parameter " + t + " has no type: " + join(tok));
if (eq(t, "final")) {
if (keepModifiers) pre += "final ";
t = get(tok, i += 2);
}
if (eq(t, "virtual")) {
pre += "virtual ";
t = get(tok, i += 2);
}
if (eq(t, "new")) { pre += "new "; t = get(tok, i += 2); }
assertTrue(isIdentifier(t));
i += 2;
S type = t, name = "?";
while (eq(get(tok, i), ".") && !eqGet(tok, i+2, ".")) {
type += "." + assertIdentifier(get(tok, i+2));
i += 4;
}
// just a parameter name, no type
if (eqOneOf(get(tok, i), null, ",")) {
name = type; type = "?";
} else {
if (eq(tok.get(i), "<")) {
int j = findEndOfTypeArgs(tok, i)-1;
while (eq(get(tok, j), "[") && eq(get(tok, j+2), "]")) j += 4;
type += trimJoinSubList(tok, i, j+1);
S id = assertIdentifier(tok.get(j+2));
i = j+2;
}
while (eq(get(tok, i), "[") && eq(get(tok, i+2), "]")) {
i += 4;
type += "[]";
}
if (eqGet(tok, i, ".") && eqGet(tok, i+2, ".") && eqGet(tok, i+4, ".")) {
type += "...";
i += 6;
}
name = assertIdentifier(tok.get(i));
i += 2;
while (eq(get(tok, i), "[") && eq(get(tok, i+2), "]")) {
i += 4;
type += "[]";
}
if (i < l(tok)) {
assertEquals(get(tok, i), ",");
i += 2;
}
}
out.add(pair(pre + type, name));
}
ret out;
} catch e {
print("Bad parameter declaration: " + sfu(tok));
throw rethrow(e);
}
}