Re: RFR [9] 8150829: Enhanced drop-args, identity and default constant, varargs adjustment

2016-04-13 Thread John Rose
Quick comment.  In this: 
>MethodHandle h0= constant(boolean.class, true);


…there should a space between h0 and =.

> On Apr 13, 2016, at 5:12 AM, shilpi.rast...@oracle.com wrote:
> 
> Thank You Paul for the suggestions.
> 
> Please review the updated webrev 
> http://cr.openjdk.java.net/~srastogi/8150829/webrev.05 
> 
> 
> Thanks,
> Shilpi
> 
> On 4/12/2016 7:32 PM, Paul Sandoz wrote:
>> Hi,
>> 
>> Just minor comments, below.
>> 
>> Paul.
>> 
>> 
>> MethodHandle
>> —
>> 
>>  972 /**
>>  973   * Adapts this method handle to be {@linkplain #asVarargsCollector 
>> variable arity}
>>  974   * if the boolean flag is true, else {@linkplain #asFixedArity 
>> fixed arity}.
>>  975   * If the method handle is already of the proper arity mode, it is 
>> returned
>>  976   * unchanged.
>>  977   * This method is sometimes useful when adapting a method 
>> handle that
>>  978   * may be variable arity, to ensure that the resulting adapter is 
>> also
>>  979   * variable arity if and only if the original handle was.  For 
>> example,
>>  980   * this code changes the first argument of a handle
>> 
>> , {@code mh},
>> 
>> to {@code int} without
>>  981   * disturbing its variable arity property:
>>  982   * {@code 
>> mh.asType(mh.type().changeParameterType(0,int.class)).withVarargs(mh.isVarargsCollector())}
>> 
>> The above paragraph can be an @apiNote.
>> 
>> Also can you format the code block over two lines to emphasise the last 
>> call., otherwise i think it is harder to read.
>> 
>> 
>>  983   * @param makeVarargs true if the return method handle should have 
>> variable arity behavior
>>  984   * @return a method handle of the same type, with possibly 
>> adjusted variable arity behavior
>>  985   * @throws IllegalArgumentException if {@code makeVarargs} is true 
>> and
>>  986   * this method handle does not have a trailing array 
>> parameter
>>  987   * @since 9
>> 
>> Add
>> 
>> @see #asVarargsCollector
>> @see #asFixedArity
>> 
>> ?
>> 
>>  988  */
>>  989  public MethodHandle withVarargs(boolean makeVarargs) {
>> 
>> 
>> 
>> MethodHandles
>> —
>> 
>> 2387 /** Produces a constant method handle of the requested return type 
>> which
>> 
>> new line after ‘/**'
>> 
>> 
>> 2388  * returns the default value for that type every time it is invoked.
>> 2389  * The resulting constant method handle will have no side effects.
>> 2390  * The returned method handle is equivalent to {@code 
>> empty(methodType(type))}.
>> 2391  * It is also equivalent to {@code 
>> explicitCastArguments(constant(Object.class, null), methodType(type))},
>> 2392  * since {@code explicitCastArguments} converts {@code null} to 
>> default values.
>> 
>> Is this method more efficient than the other two?
> It is existing method made it public and renamed it to zero from zeroHandle.
>> 
>> 
>> 2393  * @param type the expected return type of the desired method handle
>> 2394  * @return a constant method handle that takes no arguments and 
>> returns the default value of the given type (or void, if the type is void)
>> 
>> Can you format to be a little more consistent and not so long on the line 
>> length, as it becomes really tricky read.
>> 
>> 
>> 2395  * @throws NullPointerException if the argument is null
>> 2396  * @see MethodHandles#constant
>> 2397  * @see MethodHandles#empty
>> 2398  * @since 9
>> 2399  */
>> 2400 public static  MethodHandle zero(Class type) {
>> 2401 Objects.requireNonNull(type);
>> 2402 return type.isPrimitive() ?  
>> zero(Wrapper.forPrimitiveType(type), type) : zero(Wrapper.OBJECT, type);
>> 2403 }
>> 2404
>> 
>> 
>> 2409 /**
>> 2410  * Produces a method handle of the requested type which ignores any 
>> arguments, does nothing,
>> 2411  * and returns a suitable default depending on the return type.
>> 2412  * That is, it returns a zero primitive value, a {@code null}, or 
>> {@code void}.
>> 2413  * The returned method handle is equivalent to
>> 2414  * {@code dropArguments(zero(type.returnType()), 0, 
>> type.parameterList())}.
>> 2415  * 
>> 2416  * Example:  Given a predicate and target, a useful "if-then" 
>> construct can be constructed as
>> 
>> s/Example:/@apiNote (same applies to the method dropArgumentsToMatch)
>> 
>> s/constructed/produced
>> 
>> 
>> 2417  * {@code guardWithTest(pred, target, empty(target.type())}.
>> 2418  * @param type the type of the desired method handle
>> 2419  * @return a constant method handle of the given type, which 
>> returns a default value of the given return type
>> 2420  * @throws NullPointerException if the argument is null
>> 2421  * @see MethodHandles#zero
>> 2422  * @see MethodHandles#constant
>> 2423  * @since 9
>> 2424  */
>> 2425 public static  MethodHandle empty(MethodType type) {

Re: RFR [9] 8150829: Enhanced drop-args, identity and default constant, varargs adjustment

2016-04-13 Thread shilpi.rast...@oracle.com

Thank You Paul for the suggestions.

Please review the updated webrev
http://cr.openjdk.java.net/~srastogi/8150829/webrev.05

Thanks,
Shilpi

On 4/12/2016 7:32 PM, Paul Sandoz wrote:

Hi,

Just minor comments, below.

Paul.


MethodHandle
—

  972 /**
  973   * Adapts this method handle to be {@linkplain #asVarargsCollector 
variable arity}
  974   * if the boolean flag is true, else {@linkplain #asFixedArity fixed 
arity}.
  975   * If the method handle is already of the proper arity mode, it is 
returned
  976   * unchanged.
  977   * This method is sometimes useful when adapting a method handle 
that
  978   * may be variable arity, to ensure that the resulting adapter is 
also
  979   * variable arity if and only if the original handle was.  For 
example,
  980   * this code changes the first argument of a handle

, {@code mh},

to {@code int} without
  981   * disturbing its variable arity property:
  982   * {@code 
mh.asType(mh.type().changeParameterType(0,int.class)).withVarargs(mh.isVarargsCollector())}

The above paragraph can be an @apiNote.

Also can you format the code block over two lines to emphasise the last call., 
otherwise i think it is harder to read.


  983   * @param makeVarargs true if the return method handle should have 
variable arity behavior
  984   * @return a method handle of the same type, with possibly adjusted 
variable arity behavior
  985   * @throws IllegalArgumentException if {@code makeVarargs} is true 
and
  986   * this method handle does not have a trailing array 
parameter
  987   * @since 9

Add

@see #asVarargsCollector
@see #asFixedArity

?

  988  */
  989  public MethodHandle withVarargs(boolean makeVarargs) {



MethodHandles
—

2387 /** Produces a constant method handle of the requested return type 
which

new line after ‘/**'


2388  * returns the default value for that type every time it is invoked.
2389  * The resulting constant method handle will have no side effects.
2390  * The returned method handle is equivalent to {@code 
empty(methodType(type))}.
2391  * It is also equivalent to {@code 
explicitCastArguments(constant(Object.class, null), methodType(type))},
2392  * since {@code explicitCastArguments} converts {@code null} to 
default values.

Is this method more efficient than the other two?

It is existing method made it public and renamed it to zero from zeroHandle.



2393  * @param type the expected return type of the desired method handle
2394  * @return a constant method handle that takes no arguments and 
returns the default value of the given type (or void, if the type is void)

Can you format to be a little more consistent and not so long on the line 
length, as it becomes really tricky read.


2395  * @throws NullPointerException if the argument is null
2396  * @see MethodHandles#constant
2397  * @see MethodHandles#empty
2398  * @since 9
2399  */
2400 public static  MethodHandle zero(Class type) {
2401 Objects.requireNonNull(type);
2402 return type.isPrimitive() ?  zero(Wrapper.forPrimitiveType(type), 
type) : zero(Wrapper.OBJECT, type);
2403 }
2404


2409 /**
2410  * Produces a method handle of the requested type which ignores any 
arguments, does nothing,
2411  * and returns a suitable default depending on the return type.
2412  * That is, it returns a zero primitive value, a {@code null}, or 
{@code void}.
2413  * The returned method handle is equivalent to
2414  * {@code dropArguments(zero(type.returnType()), 0, 
type.parameterList())}.
2415  * 
2416  * Example:  Given a predicate and target, a useful "if-then" 
construct can be constructed as

s/Example:/@apiNote (same applies to the method dropArgumentsToMatch)

s/constructed/produced


2417  * {@code guardWithTest(pred, target, empty(target.type())}.
2418  * @param type the type of the desired method handle
2419  * @return a constant method handle of the given type, which returns a 
default value of the given return type
2420  * @throws NullPointerException if the argument is null
2421  * @see MethodHandles#zero
2422  * @see MethodHandles#constant
2423  * @since 9
2424  */
2425 public static  MethodHandle empty(MethodType type) {


2726 MethodHandle h0= constant(boolean.class, true);

Space before '='


ConstantIdentityMHTest
—

You should test the signatures and values for all primitives, ref and void.





On 11 Apr 2016, at 07:47, shilpi.rast...@oracle.com wrote:

Gentle Reminder!

 Forwarded Message 
Subject:RFR [9] 8150829: Enhanced drop-args, identity and default 
constant, varargs adjustment
Date:   Thu, 24 Mar 2016 11:18:56 +0530
From:   shilpi.rast...@oracle.com 
Reply-To:   core-libs-...@openjdk.java.net
To: mlvm-dev@openjdk.java.net

Hi All,

Please review the following-