svoid tok_questionDot(LS tok) { jreplace(tok, "if ( ?. ?.", func(LS tok, int i) -> S { S var = tok.get(i); bool isExpression = eqGetOneOf(tok, i-2, "ret", "return", ",", "=", "(", "?", "+"); // too few if (!isExpression) { int j = tok_findEndOfStatement(tok, i)-1; tokAppend_reTok(tok, j, " }"); ret "{ if (\*var*/ != null) \*var*/."; } else ret "\*var*/ == null ? null : \*var*/."; }); jreplace_dyn(tok, "()?.", func(LS tok, int i) -> S { int iQ = indexOf(tok, i, "?"); S expr = joinSubList(tok, i, iQ-1); bool isExpression = eqGetOneOf(tok, i-2, "ret", "return", ",", "=", "(", "?"); // too few S var = makeVar(); if (!isExpression) { int j = tok_findEndOfStatement(tok, i)-1; tokAppend_reTok(tok, j, " }"); ret "{ var \*var*/ = \*expr*/; if (\*var*/ != null) \*var*/."; } else { // experimental int j = tok_findEndOfExpression(tok, i)-1; tokAppend_reTok(tok, j, ")"); ret "rCallF(\*expr*/, \*var*/ -> \*var*/ == null ?: \*var*/."; } }); }