fuzion
fuzion copied to clipboard
parser: allow multiple lines in lambda block using parentheses (without extra code)
fix #4425
The change causes this errors
❯ FUZION_DISABLE_ANSI_ESCAPES=true make base-only
rm -rf build/modules/base
mkdir -p build/modules
cp -rf ./modules/base build/modules
./build/bin/fz -sourceDirs=./build/modules/base/src -XloadBaseModule=off -save-module=build/modules/base.fum -XenableSetKeyword
./build/modules/base/src/array3.fz:81:9: error 1: Inconsistent indentation
+ indices1
--------^
Indentation reference point is ./build/modules/base/src/array3.fz:80:8:
(" [" + ascii.lf_str
-------^
While parsing: exprs, parse stack: exprs, block (twice), klammer, bracketTerm, term, opTail, opExpr, operatorExpr (twice), expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), unit
./build/modules/base/src/array3.fz:84:9: error 2: Inconsistent indentation
+ ascii.lf_str + " ]")
--------^
Indentation reference point is ./build/modules/base/src/array3.fz:80:8:
(" [" + ascii.lf_str
-------^
While parsing: exprs, parse stack: exprs, block (twice), klammer, bracketTerm, term, opTail, opExpr, operatorExpr (twice), expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), unit
./build/modules/base/src/array3.fz:92:7: error 3: Inconsistent indentation
+ indices0
------^
Indentation reference point is ./build/modules/base/src/array3.fz:91:6:
("[" + ascii.lf_str
-----^
While parsing: exprs, parse stack: exprs, block (twice), klammer, bracketTerm, term, opTail, opExpr, operatorExpr (twice), expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), unit
./build/modules/base/src/array3.fz:95:7: error 4: Inconsistent indentation
+ ascii.lf_str + "]")
------^
Indentation reference point is ./build/modules/base/src/array3.fz:91:6:
("[" + ascii.lf_str
-----^
While parsing: exprs, parse stack: exprs, block (twice), klammer, bracketTerm, term, opTail, opExpr, operatorExpr (twice), expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), implRout, routOrField, feature, expr, exprs, block (twice), unit
./build/modules/base/src/int.fz:95:23: error 5: Qualifier expected for '.this' expression.
int (infix /).this.s n/other.n
----------------------^
Found expression ./build/modules/base/src/int.fz:95:10:
int (infix /).this.s n/other.n
---------^^^^^^^ where a simple qualifier 'a.b.c' was expected
error 6: java.lang.IndexOutOfBoundsException: Index -1 out of bounds for length 2
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:100)
at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:106)
at java.base/jdk.internal.util.Preconditions.checkIndex(Preconditions.java:302)
at java.base/java.util.Objects.checkIndex(Objects.java:385)
at java.base/java.util.ArrayList.get(ArrayList.java:427)
at dev.flang.parser.OpExpr.op(OpExpr.java:295)
at dev.flang.parser.OpExpr.toExpr(OpExpr.java:197)
at dev.flang.parser.Parser.opExpr(Parser.java:1889)
at dev.flang.parser.Parser.operatorExpr(Parser.java:1842)
at dev.flang.parser.Parser.operatorExpr(Parser.java:1838)
at dev.flang.parser.Parser.actualSpace(Parser.java:1804)
at dev.flang.parser.Parser.actualSpaces(Parser.java:1759)
at dev.flang.parser.Parser.actualArgs(Parser.java:1633)
at dev.flang.parser.Parser.call(Parser.java:1384)
at dev.flang.parser.Parser.call(Parser.java:1349)
at dev.flang.parser.Parser.call0(Parser.java:3196)
at dev.flang.parser.Parser.callOrFeatOrThis(Parser.java:3182)
at dev.flang.parser.Parser.term(Parser.java:2144)
at dev.flang.parser.Parser.opTail(Parser.java:1936)
at dev.flang.parser.Parser.opExpr(Parser.java:1888)
at dev.flang.parser.Parser.operatorExpr(Parser.java:1842)
at dev.flang.parser.Parser.operatorExpr(Parser.java:1838)
at dev.flang.parser.Parser.expr(Parser.java:2707)
at dev.flang.parser.Parser.exprs(Parser.java:2542)
at dev.flang.parser.Parser.lambda$block$17(Parser.java:2484)
at dev.flang.parser.Lexer.optionalBrackets(Lexer.java:982)
at dev.flang.parser.Parser.block(Parser.java:2484)
at dev.flang.parser.Parser.block(Parser.java:2479)
at dev.flang.parser.Parser.implRout(Parser.java:3427)
at dev.flang.parser.Parser.routOrField(Parser.java:309)
at dev.flang.parser.Parser.feature(Parser.java:270)
at dev.flang.parser.Parser.expr(Parser.java:2707)
at dev.flang.parser.Parser.exprs(Parser.java:2542)
at dev.flang.parser.Parser.lambda$block$17(Parser.java:2484)
at dev.flang.parser.Lexer.optionalBrackets(Lexer.java:982)
at dev.flang.parser.Parser.block(Parser.java:2484)
at dev.flang.parser.Parser.block(Parser.java:2479)
at dev.flang.parser.Parser.implRout(Parser.java:3427)
at dev.flang.parser.Parser.routOrField(Parser.java:309)
at dev.flang.parser.Parser.feature(Parser.java:270)
at dev.flang.parser.Parser.expr(Parser.java:2707)
at dev.flang.parser.Parser.exprs(Parser.java:2542)
at dev.flang.parser.Parser.lambda$block$17(Parser.java:2484)
at dev.flang.parser.Lexer.optionalBrackets(Lexer.java:982)
at dev.flang.parser.Parser.block(Parser.java:2484)
at dev.flang.parser.Parser.block(Parser.java:2479)
at dev.flang.parser.Parser.unit(Parser.java:207)
at dev.flang.fe.SourceModule.parseFile(SourceModule.java:213)
at dev.flang.fe.SourceModule.parseAndGetFeatures(SourceModule.java:226)
at dev.flang.fe.SourceModule.lambda$loadInnerFeatures$2(SourceModule.java:425)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:184)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)
at java.base/java.util.stream.SortedOps$RefSortingSink.end(SortedOps.java:395)
at java.base/java.util.stream.Sink$ChainedReference.end(Sink.java:261)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
at dev.flang.fe.SourceModule.loadInnerFeatures(SourceModule.java:423)
at dev.flang.fe.SourceModule.findDeclaredOrInheritedFeatures(SourceModule.java:831)
at dev.flang.ast.Feature.resolveDeclarations(Feature.java:1404)
at dev.flang.ast.Resolution.resolveOne(Resolution.java:417)
at dev.flang.ast.Resolution.resolve(Resolution.java:392)
at dev.flang.fe.SourceModule.createASTandResolve(SourceModule.java:261)
at dev.flang.fe.FrontEnd.<init>(FrontEnd.java:166)
at dev.flang.tools.Fuzion.lambda$parseArgsForBackend$4(Fuzion.java:1135)
at dev.flang.tools.Tool.lambda$run$0(Tool.java:142)
at dev.flang.util.Errors.runAndExit(Errors.java:903)
at dev.flang.tools.Tool.run(Tool.java:142)
at dev.flang.tools.Fuzion.main(Fuzion.java:688)
*** fatal errors encountered, stopping.
6 errors.
make: *** [Makefile:660: build/modules/base.fum] Error 1
The indentation errors are caused by the parentheses and indentation in this code, if either is fixed it works
array3.fz:78
dim_1(i i32) =>
(" [" + ascii.lf_str
+ indices1
.map (j -> dim_2 i j)
.fold (String.concat ("," + ascii.lf_str))
+ ascii.lf_str + " ]")
@simonvonhackewitz: I think this can be closed with #5536 basically solving that issue.