loop icon indicating copy to clipboard operation
loop copied to clipboard

stack overflow in the code generator

Open ks32849 opened this issue 12 years ago • 1 comments

filter(criteria, ls) => *, [] : [] *, [x:xs] | criteria.@call(x) : [x] + filter(criteria,xs) | else : filter(criteria, xs)

main -> print(filter(divBy2, [1..20])) where divBy2: @(n) -> {(n % 2) == 0}

This causes an infinite loop and eventually a stack overflow in the code generator: Exception in thread "main" java.lang.StackOverflowError at java.util.regex.Pattern.append(Unknown Source) at java.util.regex.Pattern.atom(Unknown Source) at java.util.regex.Pattern.sequence(Unknown Source) at java.util.regex.Pattern.expr(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.util.regex.Pattern.(Unknown Source) at java.util.regex.Pattern.compile(Unknown Source) at java.lang.String.replaceFirst(Unknown Source) at loop.AsmCodeEmitter.normalizeMethodName(AsmCodeEmitter.java:720) at loop.AsmCodeEmitter.access$500(AsmCodeEmitter.java:68) at loop.AsmCodeEmitter$18.emitCode(AsmCodeEmitter.java:971) at loop.AsmCodeEmitter.emit(AsmCodeEmitter.java:235) at loop.AsmCodeEmitter$6.emitCode(AsmCodeEmitter.java:649) at loop.AsmCodeEmitter.emit(AsmCodeEmitter.java:235) at loop.AsmCodeEmitter$18.emitCode(AsmCodeEmitter.java:1001) at loop.AsmCodeEmitter.emit(AsmCodeEmitter.java:235) at loop.AsmCodeEmitter$6.emitCode(AsmCodeEmitter.java:649) etc.

Where as:

main -> print(filter( @(n) -> {(n % 2) == 0} , [1..20])) works great. So does:

main -> print(filter(divBy2, [1..20])) where divBy2(n) -> (n % 2) == 0

ks32849 avatar Jul 16 '12 08:07 ks32849

Looking at this, sorry about the delay.

dhanji avatar Jul 31 '12 22:07 dhanji