51 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Java
		
	
	
	
| /*
 | |
|  * Copyright (C) 2019 The Android Open Source Project
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *      http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  */
 | |
| 
 | |
| package art;
 | |
| 
 | |
| public class NonStandardExit {
 | |
|   public static native void popFrame(Thread thr);
 | |
|   public static native void forceEarlyReturnVoid(Thread thr);
 | |
|   public static native void forceEarlyReturnFloat(Thread thr, float f);
 | |
|   public static native void forceEarlyReturnDouble(Thread thr, double f);
 | |
|   public static native void forceEarlyReturnInt(Thread thr, int f);
 | |
|   public static native void forceEarlyReturnLong(Thread thr, long f);
 | |
|   public static native void forceEarlyReturnObject(Thread thr, Object f);
 | |
| 
 | |
|   public static void forceEarlyReturn(Thread thr, Object o) {
 | |
|     if (o instanceof Number && o.getClass().getPackage().equals(Object.class.getPackage())) {
 | |
|       Number n = (Number)o;
 | |
|       if (n instanceof Integer || n instanceof Short || n instanceof Byte) {
 | |
|         forceEarlyReturnInt(thr, n.intValue());
 | |
|       } else if (n instanceof Long) {
 | |
|         forceEarlyReturnLong(thr, n.longValue());
 | |
|       } else if (n instanceof Float) {
 | |
|         forceEarlyReturnFloat(thr, n.floatValue());
 | |
|       } else if (n instanceof Double) {
 | |
|         forceEarlyReturnDouble(thr, n.doubleValue());
 | |
|       } else {
 | |
|         throw new IllegalArgumentException("Unknown number subtype: " + n.getClass() + " - " + n);
 | |
|       }
 | |
|     } else if (o instanceof Character) {
 | |
|       forceEarlyReturnInt(thr, ((Character)o).charValue());
 | |
|     } else if (o instanceof Boolean) {
 | |
|       forceEarlyReturnInt(thr, ((Boolean)o).booleanValue() ? 1 : 0);
 | |
|     } else {
 | |
|       forceEarlyReturnObject(thr, o);
 | |
|     }
 | |
|   }
 | |
| }
 |