POGO call site
meta class - cached
method - cached
| Method from org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite Detail: |
public Object call(Object receiver,
Object[] args) throws Throwable {
if(checkCall(receiver, args)) {
try {
return invoke(receiver,args);
} catch (GroovyRuntimeException gre) {
throw ScriptBytecodeAdapter.unwrap(gre);
}
} else {
return CallSiteArray.defaultCall(this, receiver, args);
}
}
|
public Object callCurrent(GroovyObject receiver,
Object[] args) throws Throwable {
if(checkCall(receiver, args)) {
try {
return invoke(receiver,args);
} catch (GroovyRuntimeException gre) {
throw ScriptBytecodeAdapter.unwrap(gre);
}
} else {
return CallSiteArray.defaultCallCurrent(this, receiver, args);
}
}
|
protected boolean checkCall(Object receiver) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
protected boolean checkCall(Object receiver,
Object[] args) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params, args);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
protected boolean checkCall(Object receiver,
Object arg1) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params, arg1);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
protected boolean checkCall(Object receiver,
Object arg1,
Object arg2) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params, arg1, arg2);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
protected boolean checkCall(Object receiver,
Object arg1,
Object arg2,
Object arg3) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params, arg1, arg2, arg3);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
protected boolean checkCall(Object receiver,
Object arg1,
Object arg2,
Object arg3,
Object arg4) {
try {
return usage.get() == 0
&& ((GroovyObject)receiver).getMetaClass() == metaClass // metaClass still be valid
&& MetaClassHelper.sameClasses(params, arg1, arg2, arg3, arg4);
}
catch (NullPointerException e) {
if (receiver == null)
return false;
throw e;
}
catch (ClassCastException e) {
if (!(receiver instanceof GroovyObject))
return false;
throw e;
}
}
|
public static CallSite createCachedMethodSite(CallSite site,
MetaClassImpl metaClass,
CachedMethod metaMethod,
Class[] params,
Object[] args) {
if (metaMethod.correctArguments(args) == args) {
if (noWrappers(args)) {
if (noCoerce(metaMethod,args))
return new PogoCachedMethodSiteNoUnwrap(site, metaClass, metaMethod, params);
else {
return metaMethod.createPogoMetaMethodSite(site, metaClass, params);
}
}
}
return new PogoCachedMethodSite(site, metaClass, metaMethod, params);
}
|
public static CallSite createPogoMetaMethodSite(CallSite site,
MetaClassImpl metaClass,
MetaMethod metaMethod,
Class[] params,
Object[] args) {
if (metaMethod.getClass() == CachedMethod.class)
return createCachedMethodSite (site, metaClass, (CachedMethod) metaMethod, params, args);
return createNonAwareCallSite(site, metaClass, metaMethod, params, args);
}
|
public Object invoke(Object receiver,
Object[] args) throws Throwable {
MetaClassHelper.unwrap(args);
try {
return metaMethod.doMethodInvoke(receiver, args);
} catch (GroovyRuntimeException gre) {
throw ScriptBytecodeAdapter.unwrap(gre);
}
}
|