diff --git a/pom.xml b/pom.xml index d473dad..c05f3ef 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ UTF-8 - 1.2.30 + 1.2.31 5.1.0 false diff --git a/src/main/kotlin/table/ExecutionContext.kt b/src/main/kotlin/table/ExecutionContext.kt index 7b12b8e..aec7a42 100644 --- a/src/main/kotlin/table/ExecutionContext.kt +++ b/src/main/kotlin/table/ExecutionContext.kt @@ -15,14 +15,9 @@ object ExecutionContext { var isRecur: Boolean = false private set - val isInFunctionCall: Boolean - get() = !functionCalls.empty() - - val currentFunction: LispFunction - get() = functionCalls.peek().lispFunction - - val isRecurInitializing: Boolean - get() = functionCalls.peek().isRecurInitializing + fun isInFunctionCall() = !functionCalls.empty() + fun isRecurInitializing() = functionCalls.peek().isRecurInitializing + fun getCurrentFunction() = functionCalls.peek().lispFunction fun clearContext() { scope = SymbolTable(NullSymbolTable) @@ -31,7 +26,7 @@ object ExecutionContext { } fun restoreGlobalScope() { - while (!scope.isGlobal) + while (!scope.isGlobal()) scope = scope.parent ?: NullSymbolTable } @@ -69,23 +64,14 @@ object ExecutionContext { } fun setRecurInitializing() { - functionCalls.peek().setRecurInitializing() + functionCalls.peek().isRecurInitializing = true } fun clearRecurInitializing() { - functionCalls.peek().clearRecurInitializing() + functionCalls.peek().isRecurInitializing = false } - class LispFunctionRecurInfo(val lispFunction: LispFunction) { + private class LispFunctionRecurInfo(val lispFunction: LispFunction) { var isRecurInitializing: Boolean = false - private set - - fun setRecurInitializing() { - isRecurInitializing = true - } - - fun clearRecurInitializing() { - isRecurInitializing = false - } } } diff --git a/src/main/kotlin/table/SymbolTable.kt b/src/main/kotlin/table/SymbolTable.kt index 9738758..fc5e51b 100644 --- a/src/main/kotlin/table/SymbolTable.kt +++ b/src/main/kotlin/table/SymbolTable.kt @@ -12,28 +12,22 @@ import kotlin.collections.Map.Entry open class SymbolTable @JvmOverloads constructor(open val parent: SymbolTable? = NullSymbolTable) : Iterable { - val isGlobal: Boolean - get() = parent === NullSymbolTable - private val table: HashMap = HashMap() - private val sortedBindings: Set> - get() = TreeMap(table).entries - override fun iterator(): Iterator = SymbolTableIterator(this) - - operator fun contains(symbolName: String) = table.containsKey(symbolName) - + operator fun contains(symbolName: String) = symbolName in table operator fun get(symbolName: String) = table[symbolName] operator fun set(symbolName: String, value: SExpression) { table[symbolName] = value } + fun isGlobal() = parent === NullSymbolTable + fun toList(): Cons { var context: Cons = NIL - for (binding in sortedBindings) + for (binding in TreeMap(table).entries) context = append(context, makeList(makeSymbolValuePair(binding))) return context @@ -43,11 +37,11 @@ open class SymbolTable @JvmOverloads constructor(open val parent: SymbolTable? = Cons(Symbol(binding.key), makeList(binding.value)) object NullSymbolTable : SymbolTable(null) { - override val parent: SymbolTable - get() = this + override val parent = this } private class SymbolTableIterator(private var symbolTable: SymbolTable) : AbstractIterator() { + override fun computeNext() { when (symbolTable) { is NullSymbolTable -> done() diff --git a/src/test/kotlin/table/ExecutionContextTest.kt b/src/test/kotlin/table/ExecutionContextTest.kt index a4ded4f..84b06f8 100644 --- a/src/test/kotlin/table/ExecutionContextTest.kt +++ b/src/test/kotlin/table/ExecutionContextTest.kt @@ -92,9 +92,9 @@ class ExecutionContextTest { val scope3 = SymbolTable(scope2) executionContext.scope = scope3 - assertThat(executionContext.scope.isGlobal).isFalse() + assertThat(executionContext.scope.isGlobal()).isFalse() executionContext.restoreGlobalScope() - assertThat(executionContext.scope.isGlobal).isTrue() + assertThat(executionContext.scope.isGlobal()).isTrue() assertThat(executionContext.scope).isEqualTo(global) } } diff --git a/src/test/kotlin/table/FunctionTableTest.kt b/src/test/kotlin/table/FunctionTableTest.kt index 27ec5dd..acab1dd 100644 --- a/src/test/kotlin/table/FunctionTableTest.kt +++ b/src/test/kotlin/table/FunctionTableTest.kt @@ -11,6 +11,7 @@ import org.junit.jupiter.api.Test import org.junit.jupiter.api.TestInstance import org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS import sexpression.Cons +import sexpression.LispString import sexpression.Nil import sexpression.Nil.NIL import sexpression.Symbol.T @@ -25,8 +26,8 @@ import java.util.HashSet class FunctionTableTest { @FunctionNames("GOOD") - class GoodFunction(name: String) : LispFunction() { - override fun call(argumentList: Cons): Nil = NIL + class GoodFunction(private val name: String) : LispFunction() { + override fun call(argumentList: Cons): LispString = LispString(name) } @FunctionNames("BAD")