Changeset 11337
- Timestamp:
- 10/06/08 18:54:08 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/j/src/org/armedbear/lisp/Closure.java
r11336 r11337 412 412 if (arity != arityValue) 413 413 { 414 if (optionalParameters.length > 0) 415 bindOptionalParameterDefaults(ext, thread); 414 bindParameterDefaults(optionalParameters, ext, thread); 416 415 if (restVar != null) 417 416 bindArg(restVar, NIL, ext, thread); 418 if (keywordParameters.length > 0) 419 bindKeywordParameterDefaults(ext, thread); 417 bindParameterDefaults(keywordParameters, ext, thread); 420 418 } 421 419 bindAuxVars(ext, thread); … … 655 653 if (sym.isSpecialVariable()) 656 654 return true; 657 if (specials != null) 658 { 659 for (Symbol special : specials) 660 { 661 if (sym == special) 662 return true; 663 } 655 for (Symbol special : specials) 656 { 657 if (sym == special) 658 return true; 664 659 } 665 660 return false; … … 682 677 if (argsLength < minArgs) 683 678 error(new WrongNumberOfArgumentsException(this)); 684 if (thread == null)685 thread = LispThread.currentThread();686 679 final LispObject[] array = new LispObject[variables.length]; 687 680 int index = 0; … … 1001 994 } 1002 995 1003 private final void bindOptionalParameterDefaults(Environment env, 1004 LispThread thread) 1005 throws ConditionThrowable 1006 { 1007 for (Parameter parameter : optionalParameters) 1008 { 1009 LispObject value; 1010 if (parameter.initVal != null) 1011 value = parameter.initVal; 1012 else 1013 value = eval(parameter.initForm, env, thread); 1014 bindArg(parameter.var, value, env, thread); 1015 if (parameter.svar != NIL) 1016 bindArg((Symbol)parameter.svar, NIL, env, thread); 1017 } 1018 } 1019 1020 private final void bindKeywordParameterDefaults(Environment env, 1021 LispThread thread) 1022 throws ConditionThrowable 1023 { 1024 for (Parameter parameter : keywordParameters) 996 private final void bindParameterDefaults(Parameter[] parameters, 997 Environment env, 998 LispThread thread) 999 throws ConditionThrowable 1000 { 1001 for (Parameter parameter : parameters) 1025 1002 { 1026 1003 LispObject value;
Note: See TracChangeset
for help on using the changeset viewer.