diff core/src/luan/LuanJavaFunction.java @ 447:0bd42e774c50

add assert_binary; improve wrong type messages;
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 04 May 2015 17:19:43 -0600
parents bbad2d06f728
children b8ddd55c9b11
line wrap: on
line diff
--- a/core/src/luan/LuanJavaFunction.java	Mon May 04 16:21:17 2015 -0600
+++ b/core/src/luan/LuanJavaFunction.java	Mon May 04 17:19:43 2015 -0600
@@ -126,20 +126,40 @@
 				type = (Class)primitiveMap.get(type);
 			Object arg = args[i];
 			if( !type.isInstance(arg) ) {
-				String expected = paramType.getSimpleName();
+				String expected;
 				if( i==a.length-1 && method.isVarArgs() )
-					expected = paramType.getComponentType().getSimpleName()+"...";
+					expected = fixType(paramType.getComponentType().getSimpleName())+"...";
+				else
+					expected = fixType(paramType.getSimpleName());
 				if( arg==null ) {
 					if( paramType.isPrimitive() )
 						throw luan.exception("bad argument #"+(i+1-start)+" ("+expected+" expected, got nil)");
 				} else {
-					String got = arg.getClass().getSimpleName();
+					String got = fixType(arg.getClass().getSimpleName());
 					throw luan.exception("bad argument #"+(i+1-start)+" ("+expected+" expected, got "+got+")");
 				}
 			}
 		}
 	}
 
+	private static String fixType(String type) {
+		if( type.equals("byte[]") )
+			return "binary";
+		if( type.equals("Double") )
+			return "number";
+		if( type.equals("LuanTable") )
+			return "table";
+		if( type.equals("Boolean") )
+			return "boolean";
+		if( type.equals("String") )
+			return "string";
+		if( type.equals("Closure") )
+			return "function";
+		if( type.equals("LuanJavaFunction") )
+			return "function";
+		return type;
+	}
+
 	private Object[] fixArgs(LuanState luan,Object[] args) throws LuanException {
 		int n = argConverters.length;
 		Object[] rtn;