Эх сурвалжийг харах

Ajout erreur lambda mal formée

Arthur Brandao 6 жил өмнө
parent
commit
a85ddcc1b2

+ 13 - 5
src/migl/lisp/operator/DefineOperator.java

@@ -129,16 +129,24 @@ public class DefineOperator implements LispOperator {
 		return eval(lisp.cdr());
 	}
 	
+	@SuppressWarnings("unchecked")
 	private LispElement lambda(String operator, ConsList<Object> lisp) throws LispError {
 		if(!isLambda(operator)) {
 			throw new LispError(operator + LispError.ERR_UNKNOW);
 		}
 		//Recup les infos
-		ConsList<Object> lambda = (ConsList<Object>) define.get(operator).car();
-		ConsList<Object> param = (ConsList<Object>) lambda.cdr().car();
-		lambda = (ConsList<Object>) lambda.cdr().cdr().car();
-		if(param.size() != lisp.size()) {
-			throw new LispError(LispError.ERR_NUM_ARG);
+		ConsList<Object> lambda;
+		ConsList<Object> param;
+		try {
+			lambda = (ConsList<Object>) define.get(operator).car();
+			param = (ConsList<Object>) lambda.cdr().car();
+			lambda = (ConsList<Object>) lambda.cdr().cdr().car();
+			if(param.size() != lisp.size()) {
+				throw new LispError(LispError.ERR_NUM_ARG);
+			}
+		} catch (Exception ex) {
+			//Lambda mal formée
+			throw new LispError(operator + LispError.ERR_INVALID, ex);
 		}
 		//Remplace les parametres
 		String lispExpr = lambda.toString();