diff --git a/docs/advanced_topics.md b/docs/advanced_topics.md index 337627b..0ce4ffe 100644 --- a/docs/advanced_topics.md +++ b/docs/advanced_topics.md @@ -47,7 +47,7 @@ One interesting way of using closure isolation is to keep state of the functions >>> 0 >>> 1 >>> 2 - >> void + >>> void Inner `counter` is not accessible from outside, no way; still it is kept between calls in the closure, as inner function `doit`, returned from the diff --git a/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt b/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt index bc12b00..b7fb582 100644 --- a/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt +++ b/library/src/commonMain/kotlin/net/sergeych/lyng/Compiler.kt @@ -16,14 +16,14 @@ class Compiler( private fun parseScript(start: Pos, tokens: CompilerContext): Script { val statements = mutableListOf() - while (parseStatement(tokens)?.also { + while (parseStatement(tokens,braceMeansLambda = true)?.also { statements += it } != null) {/**/ } return Script(start, statements) } - private fun parseStatement(cc: CompilerContext): Statement? { + private fun parseStatement(cc: CompilerContext,braceMeansLambda: Boolean = false): Statement? { while (true) { val t = cc.next() return when (t.type) { @@ -49,7 +49,10 @@ class Compiler( Token.Type.LBRACE -> { cc.previous() - parseBlock(cc) + if( braceMeansLambda ) + parseExpression(cc) + else + parseBlock(cc) } Token.Type.RBRACE -> {