Skip to content

Commit

Permalink
fix http://arclanguage.org/item?id=12542 (rocketnia) - handles empty …
Browse files Browse the repository at this point in the history
…bracket-fn []
  • Loading branch information
conanite committed Oct 12, 2010
1 parent d792435 commit aa37d65
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 17 deletions.
11 changes: 6 additions & 5 deletions src/arc/lib/tests/core-evaluation-test.arc
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@
(suite "[ _ ] shortcut"
("call directly"
([* _ _] 15)
225
)
225)

("useful in apply"
(apply [* _ _] '(16))
256
)
)
256)

("handles empty bracket-fn"
([] 21)
nil))

(suite "apply"
("a simple sum function"
Expand Down
2 changes: 1 addition & 1 deletion src/cc/ArcParser.jj
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ ArcObject functionShortcut(): {
} {
tok = "[" (
o = expression() { list.add(o); }
)+ "]" {
)* "]" {
fn.add(Pair.buildFrom(list));
return Pair.buildFrom(fn);
}
Expand Down
20 changes: 9 additions & 11 deletions src/java/rainbow/functions/interpreted/InterpretedFunction.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,15 @@
import rainbow.LexicalClosure;
import rainbow.Nil;
import rainbow.functions.Builtin;
import rainbow.types.ArcObject;
import rainbow.types.ArcString;
import rainbow.types.Pair;
import rainbow.types.Symbol;
import rainbow.types.*;
import rainbow.vm.Instruction;
import rainbow.vm.VM;
import rainbow.vm.compiler.FunctionBodyBuilder;
import rainbow.vm.compiler.FunctionParameterListBuilder;
import rainbow.vm.instructions.Close;
import rainbow.vm.instructions.Literal;
import rainbow.vm.instructions.PopArg;
import rainbow.vm.interpreter.BoundSymbol;
import rainbow.vm.interpreter.IfClause;
import rainbow.vm.interpreter.Quotation;
import rainbow.vm.interpreter.StackSymbol;
import rainbow.vm.interpreter.*;
import rainbow.vm.interpreter.visitor.FunctionOwnershipVisitor;
import rainbow.vm.interpreter.visitor.MeasureLexicalReach;
import rainbow.vm.interpreter.visitor.ReferenceCounter;
Expand Down Expand Up @@ -332,8 +326,12 @@ public int compareTo(ArcObject right) {

public String toString() {
if (isBracketFn()) {
String s = body[0].toString();
return "[" + s.substring(1, s.length() - 1) + "]";
if (body[0] instanceof Nil) {
return "[]";
} else {
String s = body[0].toString();
return "[" + s.substring(1, s.length() - 1) + "]";
}
}
List<ArcObject> fn = new LinkedList<ArcObject>();
fn.add(Symbol.mkSym("fn"));
Expand All @@ -343,7 +341,7 @@ public String toString() {
}

private boolean isBracketFn() {
return parameterList instanceof Pair && parameterList.car() == Symbol.mkSym("_") && parameterList.cdr() instanceof Nil && body.length == 1;
return parameterList instanceof Pair && parameterList.car() == Symbol.mkSym("_") && parameterList.cdr() instanceof Nil && body.length == 1 && !(body[0] instanceof LiteralObject);
}

public ArcObject parameterList() {
Expand Down

0 comments on commit aa37d65

Please sign in to comment.