97 /*non-public*/
98 BoundMethodHandle bindArgumentL(int pos, Object value) {
99 return editor().bindArgumentL(this, pos, value);
100 }
101 /*non-public*/
102 BoundMethodHandle bindArgumentI(int pos, int value) {
103 return editor().bindArgumentI(this, pos, value);
104 }
105 /*non-public*/
106 BoundMethodHandle bindArgumentJ(int pos, long value) {
107 return editor().bindArgumentJ(this, pos, value);
108 }
109 /*non-public*/
110 BoundMethodHandle bindArgumentF(int pos, float value) {
111 return editor().bindArgumentF(this, pos, value);
112 }
113 /*non-public*/
114 BoundMethodHandle bindArgumentD(int pos, double value) {
115 return editor().bindArgumentD(this, pos, value);
116 }
117
118 @Override
119 BoundMethodHandle rebind() {
120 if (!tooComplex()) {
121 return this;
122 }
123 return makeReinvoker(this);
124 }
125
126 private boolean tooComplex() {
127 return (fieldCount() > FIELD_COUNT_THRESHOLD ||
128 form.expressionCount() > FORM_EXPRESSION_THRESHOLD);
129 }
130 private static final int FIELD_COUNT_THRESHOLD = 12; // largest convenient BMH field count
131 private static final int FORM_EXPRESSION_THRESHOLD = 24; // largest convenient BMH expression count
132
133 /**
134 * A reinvoker MH has this form:
135 * {@code lambda (bmh, arg*) { thismh = bmh[0]; invokeBasic(thismh, arg*) }}
136 */
137 static BoundMethodHandle makeReinvoker(MethodHandle target) {
|
97 /*non-public*/
98 BoundMethodHandle bindArgumentL(int pos, Object value) {
99 return editor().bindArgumentL(this, pos, value);
100 }
101 /*non-public*/
102 BoundMethodHandle bindArgumentI(int pos, int value) {
103 return editor().bindArgumentI(this, pos, value);
104 }
105 /*non-public*/
106 BoundMethodHandle bindArgumentJ(int pos, long value) {
107 return editor().bindArgumentJ(this, pos, value);
108 }
109 /*non-public*/
110 BoundMethodHandle bindArgumentF(int pos, float value) {
111 return editor().bindArgumentF(this, pos, value);
112 }
113 /*non-public*/
114 BoundMethodHandle bindArgumentD(int pos, double value) {
115 return editor().bindArgumentD(this, pos, value);
116 }
117 /*non-public*/
118 BoundMethodHandle bindArgumentQ(int pos, Object value, MethodHandle unbox) {
119 return editor().bindArgumentQ(this, pos, value, unbox);
120 }
121 @Override
122 BoundMethodHandle rebind() {
123 if (!tooComplex()) {
124 return this;
125 }
126 return makeReinvoker(this);
127 }
128
129 private boolean tooComplex() {
130 return (fieldCount() > FIELD_COUNT_THRESHOLD ||
131 form.expressionCount() > FORM_EXPRESSION_THRESHOLD);
132 }
133 private static final int FIELD_COUNT_THRESHOLD = 12; // largest convenient BMH field count
134 private static final int FORM_EXPRESSION_THRESHOLD = 24; // largest convenient BMH expression count
135
136 /**
137 * A reinvoker MH has this form:
138 * {@code lambda (bmh, arg*) { thismh = bmh[0]; invokeBasic(thismh, arg*) }}
139 */
140 static BoundMethodHandle makeReinvoker(MethodHandle target) {
|