Kaynağa Gözat

Ajout controle nb operande lambda

Arthur Brandao 6 yıl önce
ebeveyn
işleme
04fefe7738
1 değiştirilmiş dosya ile 8 ekleme ve 0 silme
  1. 8 0
      src/migl/lisp/operator/DefineOperator.java

+ 8 - 0
src/migl/lisp/operator/DefineOperator.java

@@ -31,6 +31,7 @@ public class DefineOperator implements LispOperator {
 	 * @return
 	 * @throws LispError
 	 */
+	@SuppressWarnings("unchecked")
 	private LispElement define(LispEval eval, ConsList<Object> lisp) throws LispError {
 		if(lisp.size() != 2) {
 			throw new LispError(LispError.ERR_NUM_ARG);
@@ -45,6 +46,13 @@ public class DefineOperator implements LispOperator {
 		}
 		//Verification de sa validité
 		eval.verifyForbiddenName(key);
+		//Si c'est une lambda verification du nombre d'argument
+		if(lisp.cdr().car() instanceof ConsList) {
+			ConsList<Object> cl = (ConsList<Object>) lisp.cdr().car();
+			if(cl.size() != 3) {
+				throw new LispError(LispError.ERR_NUM_ARG);
+			}
+		}
 		//Ajoute dans la map
 		this.define.put(key, lisp.cdr());
 		//Evalue pour le retour