sclass Tok_FieldModifierKeyword(S keyword) { settable LS tok; int iEndOfLModifiers, iLModifiers, iRModifiers, iEndOfRModifiers, iType, iEndOfType; S type, var; LS modifiers; run { int i = -1; while ((i = jfind(tok, i+1, "settable ")) >= 0) { iEndOfLModifiers = i; iLModifiers = tok_leftScanModifiers(tok, iEndOfLModifiers); iRModifiers = i+2; iEndOfRModifiers = tok_scanModifiers_idx(tok, iRModifiers); iType = iEndOfRModifiers; iEndOfType = tok_endOfType(tok, iEndOfRModifiers); type = joinSubList_cToC(tok, iType, iEndOfType); var = identifierOrQuestionMark(get(tok, iEndOfType); modifiers = identifiersOnly(joinLists( subList(tok, iLModifiers, iEndOfLModifiers), subList(tok, iRModifiers, iEndOfRModifiers))); printVars(+i, +iRModifiers, +iEndOfRModifiers, +iType, +iEndOfType, +type, +var); tokReplace_reTok(tok, iLModifiers, i+2, replacement()); } } abstract S replacement(); { LS functionModifiers = listMinus(modifiers, "volatile", "transient"); ret tok_formatDollarVars( joinWithSpace(functionModifiers) + "public selfType $var aka $setVar($type $var) { this.$var = $var; this; } gettable ", +type, +var, setVar := "set" + firstToUpper(var)); } tok_gettableFields(tok); }