diff --git a/program.own b/program.own index 6dedf11..f6fdf43 100644 --- a/program.own +++ b/program.own @@ -64,18 +64,18 @@ print "\n\n" array = newarray(2, 2, 2, 2) print array -add = def(a,b) return a+b -sub = def(a,b) return a-b -mul = def(a,b) return a*b -div = def(a,b) return a/b -cube = def(x) return x*mul(x, x) +add = def(a,b) = a+b +sub = def(a,b) = a-b +mul = def(a,b) = a*b +div = def(a,b) = a/b +cube = def(x) = x*mul(x, x) print "\n\n" print mul(8, 5) print "\n" print cube(2) functions = [add, sub, mul, div] -def function(f, a, b) return f(a, b) +def function(f, a, b) = f(a, b) for i = 0, i < 4, i = i + 1 { print "\n" print functions[i] diff --git a/src/com/annimon/ownlang/parser/Parser.java b/src/com/annimon/ownlang/parser/Parser.java index acc79d1..e8feaf9 100644 --- a/src/com/annimon/ownlang/parser/Parser.java +++ b/src/com/annimon/ownlang/parser/Parser.java @@ -141,6 +141,10 @@ public final class Parser { argNames.add(consume(TokenType.WORD).getText()); match(TokenType.COMMA); } + if (lookMatch(0, TokenType.EQ)) { + match(TokenType.EQ); + return new FunctionDefineStatement(name, argNames, new ReturnStatement(expression())); + } final Statement body = statementOrBlock(); return new FunctionDefineStatement(name, argNames, body); } @@ -411,8 +415,14 @@ public final class Parser { argNames.add(consume(TokenType.WORD).getText()); match(TokenType.COMMA); } - final Statement body = statementOrBlock(); - return new ValueExpression(new UserDefinedFunction(argNames, body)); + Statement statement; + if (lookMatch(0, TokenType.EQ)) { + match(TokenType.EQ); + statement = new ReturnStatement(expression()); + } else { + statement = statementOrBlock(); + } + return new ValueExpression(new UserDefinedFunction(argNames, statement)); } if (match(TokenType.LPAREN)) { Expression result = expression();