99 |
99 |
100 /** |
100 /** |
101 * Creates a new link request. |
101 * Creates a new link request. |
102 * |
102 * |
103 * @param callSiteDescriptor the descriptor for the call site being linked |
103 * @param callSiteDescriptor the descriptor for the call site being linked |
|
104 * @param callSiteToken the opaque token for the call site being linked. |
104 * @param arguments the arguments for the invocation |
105 * @param arguments the arguments for the invocation |
105 * @param callSiteUnstable true if the call site being linked is considered unstable |
106 * @param callSiteUnstable true if the call site being linked is considered unstable |
106 * @param runtimeContextArgCount the number of the leading arguments on the stack that represent the language |
107 * @param runtimeContextArgCount the number of the leading arguments on the stack that represent the language |
107 * runtime specific context arguments. |
108 * runtime specific context arguments. |
108 * @throws IllegalArgumentException if runtimeContextArgCount is less than 1. |
109 * @throws IllegalArgumentException if runtimeContextArgCount is less than 1. |
109 */ |
110 */ |
110 public RuntimeContextLinkRequestImpl(CallSiteDescriptor callSiteDescriptor, boolean callSiteUnstable, |
111 public RuntimeContextLinkRequestImpl(CallSiteDescriptor callSiteDescriptor, Object callSiteToken, |
111 Object[] arguments, int runtimeContextArgCount) { |
112 boolean callSiteUnstable, Object[] arguments, int runtimeContextArgCount) { |
112 super(callSiteDescriptor, callSiteUnstable, arguments); |
113 super(callSiteDescriptor, callSiteToken, callSiteUnstable, arguments); |
113 if(runtimeContextArgCount < 1) { |
114 if(runtimeContextArgCount < 1) { |
114 throw new IllegalArgumentException("runtimeContextArgCount < 1"); |
115 throw new IllegalArgumentException("runtimeContextArgCount < 1"); |
115 } |
116 } |
116 this.runtimeContextArgCount = runtimeContextArgCount; |
117 this.runtimeContextArgCount = runtimeContextArgCount; |
117 } |
118 } |
119 @Override |
120 @Override |
120 public LinkRequest withoutRuntimeContext() { |
121 public LinkRequest withoutRuntimeContext() { |
121 if(contextStrippedRequest == null) { |
122 if(contextStrippedRequest == null) { |
122 contextStrippedRequest = |
123 contextStrippedRequest = |
123 new LinkRequestImpl(CallSiteDescriptorFactory.dropParameterTypes(getCallSiteDescriptor(), 1, |
124 new LinkRequestImpl(CallSiteDescriptorFactory.dropParameterTypes(getCallSiteDescriptor(), 1, |
124 runtimeContextArgCount + 1), isCallSiteUnstable(), getTruncatedArguments()); |
125 runtimeContextArgCount + 1), getCallSiteToken(), isCallSiteUnstable(), getTruncatedArguments()); |
125 } |
126 } |
126 return contextStrippedRequest; |
127 return contextStrippedRequest; |
127 } |
128 } |
128 |
129 |
129 @Override |
130 @Override |
130 public LinkRequest replaceArguments(CallSiteDescriptor callSiteDescriptor, Object[] arguments) { |
131 public LinkRequest replaceArguments(CallSiteDescriptor callSiteDescriptor, Object[] arguments) { |
131 return new RuntimeContextLinkRequestImpl(callSiteDescriptor, isCallSiteUnstable(), arguments, |
132 return new RuntimeContextLinkRequestImpl(callSiteDescriptor, getCallSiteToken(), isCallSiteUnstable(), arguments, |
132 runtimeContextArgCount); |
133 runtimeContextArgCount); |
133 } |
134 } |
134 |
135 |
135 private Object[] getTruncatedArguments() { |
136 private Object[] getTruncatedArguments() { |
136 final Object[] args = getArguments(); |
137 final Object[] args = getArguments(); |