From 264100eef13da50feeac59cb5fc0066a67213df1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bart=C5=82omiej=20Przemys=C5=82aw=20Pluta?= Date: Fri, 13 Mar 2020 13:36:50 +0100 Subject: [PATCH] Create some new standard library modules --- modules/collection/build.gradle | 0 modules/collection/gradle.properties | 7 +++++++ .../main/kotlin/io/smnp/ext/CollectionModule.kt | 9 +++++++++ modules/collection/src/main/resources/list.mus | 15 +++++++++++++++ modules/debug/build.gradle | 0 modules/debug/gradle.properties | 7 +++++++ .../src/main/kotlin/io/smnp/ext/DebugModule.kt | 9 +++++++++ .../io/smnp/ext/function/CallStackFunction.kt | 15 +++++++++++++++ .../main/kotlin/io/smnp/ext/lang/LangModule.kt | 4 ++-- .../io/smnp/ext/lang/function/DebugFunction.kt | 15 --------------- .../io/smnp/ext/lang/function/TypeOfFunction.kt | 15 +++++++++++++++ settings.gradle | 4 +++- 12 files changed, 82 insertions(+), 18 deletions(-) create mode 100644 modules/collection/build.gradle create mode 100644 modules/collection/gradle.properties create mode 100644 modules/collection/src/main/kotlin/io/smnp/ext/CollectionModule.kt create mode 100644 modules/collection/src/main/resources/list.mus create mode 100644 modules/debug/build.gradle create mode 100644 modules/debug/gradle.properties create mode 100644 modules/debug/src/main/kotlin/io/smnp/ext/DebugModule.kt create mode 100644 modules/debug/src/main/kotlin/io/smnp/ext/function/CallStackFunction.kt delete mode 100644 modules/lang/src/main/kotlin/io/smnp/ext/lang/function/DebugFunction.kt create mode 100644 modules/lang/src/main/kotlin/io/smnp/ext/lang/function/TypeOfFunction.kt diff --git a/modules/collection/build.gradle b/modules/collection/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/modules/collection/gradle.properties b/modules/collection/gradle.properties new file mode 100644 index 0000000..2718f53 --- /dev/null +++ b/modules/collection/gradle.properties @@ -0,0 +1,7 @@ +version=0.0.1 + +pluginVersion=0.1 +pluginId=smnp.collection +pluginClass= +pluginProvider=Bartłomiej Pluta +pluginDependencies= \ No newline at end of file diff --git a/modules/collection/src/main/kotlin/io/smnp/ext/CollectionModule.kt b/modules/collection/src/main/kotlin/io/smnp/ext/CollectionModule.kt new file mode 100644 index 0000000..b25e2e7 --- /dev/null +++ b/modules/collection/src/main/kotlin/io/smnp/ext/CollectionModule.kt @@ -0,0 +1,9 @@ +package io.smnp.ext + +import org.pf4j.Extension + +@Extension +class CollectionModule : LanguageModuleProvider("smnp.collection") { + override fun files() = listOf("list.mus") + override fun dependencies() = listOf("smnp.lang") +} \ No newline at end of file diff --git a/modules/collection/src/main/resources/list.mus b/modules/collection/src/main/resources/list.mus new file mode 100644 index 0000000..8cb54bb --- /dev/null +++ b/modules/collection/src/main/resources/list.mus @@ -0,0 +1,15 @@ +function flatten(...lists: list) { + return _flatten(lists as list ^ _flatten(list, []), []); +} + +function _flatten(list: list, output: list) { + list as element ^ { + if (typeOf(element) == "list") { + output = _flatten(element, output); + } else { + output = output + [element]; + } + } + + return output; +} \ No newline at end of file diff --git a/modules/debug/build.gradle b/modules/debug/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/modules/debug/gradle.properties b/modules/debug/gradle.properties new file mode 100644 index 0000000..8d4e5ea --- /dev/null +++ b/modules/debug/gradle.properties @@ -0,0 +1,7 @@ +version=0.0.1 + +pluginVersion=0.1 +pluginId=smnp.lang.debug +pluginClass= +pluginProvider=Bartłomiej Pluta +pluginDependencies= \ No newline at end of file diff --git a/modules/debug/src/main/kotlin/io/smnp/ext/DebugModule.kt b/modules/debug/src/main/kotlin/io/smnp/ext/DebugModule.kt new file mode 100644 index 0000000..9e943b6 --- /dev/null +++ b/modules/debug/src/main/kotlin/io/smnp/ext/DebugModule.kt @@ -0,0 +1,9 @@ +package io.smnp.ext + +import io.smnp.ext.function.CallStackFunction +import org.pf4j.Extension + +@Extension +class DebugModule : NativeModuleProvider("smnp.lang.debug") { + override fun functions() = listOf(CallStackFunction()) +} \ No newline at end of file diff --git a/modules/debug/src/main/kotlin/io/smnp/ext/function/CallStackFunction.kt b/modules/debug/src/main/kotlin/io/smnp/ext/function/CallStackFunction.kt new file mode 100644 index 0000000..24bce6e --- /dev/null +++ b/modules/debug/src/main/kotlin/io/smnp/ext/function/CallStackFunction.kt @@ -0,0 +1,15 @@ +package io.smnp.ext.function + +import io.smnp.callable.function.Function +import io.smnp.callable.function.FunctionDefinitionTool +import io.smnp.callable.signature.Signature +import io.smnp.type.model.Value + +class CallStackFunction : Function("callstack") { + override fun define(new: FunctionDefinitionTool) { + new function Signature.simple() body { env, _ -> + env.printCallStack() + Value.void() + } + } +} \ No newline at end of file diff --git a/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt b/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt index 17883a8..c1d1abc 100644 --- a/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt +++ b/modules/lang/src/main/kotlin/io/smnp/ext/lang/LangModule.kt @@ -1,13 +1,13 @@ package io.smnp.ext.lang import io.smnp.ext.NativeModuleProvider -import io.smnp.ext.lang.function.DebugFunction +import io.smnp.ext.lang.function.TypeOfFunction import io.smnp.ext.lang.method.ListAccessMethod import io.smnp.ext.lang.method.MapAccessMethod import org.pf4j.Extension @Extension class LangModule : NativeModuleProvider("smnp.lang") { - override fun functions() = listOf(DebugFunction()) + override fun functions() = listOf(TypeOfFunction()) override fun methods() = listOf(ListAccessMethod(), MapAccessMethod()) } \ No newline at end of file diff --git a/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/DebugFunction.kt b/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/DebugFunction.kt deleted file mode 100644 index a91dd59..0000000 --- a/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/DebugFunction.kt +++ /dev/null @@ -1,15 +0,0 @@ -package io.smnp.ext.lang.function - -import io.smnp.callable.function.Function -import io.smnp.callable.function.FunctionDefinitionTool -import io.smnp.callable.signature.Signature.Companion.simple -import io.smnp.type.model.Value - -class DebugFunction : Function("debug") { - override fun define(new: FunctionDefinitionTool) { - new function simple() body { env, _ -> - env.printCallStack() - Value.void() - } - } -} \ No newline at end of file diff --git a/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/TypeOfFunction.kt b/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/TypeOfFunction.kt new file mode 100644 index 0000000..bef2fa1 --- /dev/null +++ b/modules/lang/src/main/kotlin/io/smnp/ext/lang/function/TypeOfFunction.kt @@ -0,0 +1,15 @@ +package io.smnp.ext.lang.function + +import io.smnp.callable.function.Function +import io.smnp.callable.function.FunctionDefinitionTool +import io.smnp.callable.signature.Signature.Companion.simple +import io.smnp.type.matcher.Matcher.Companion.allTypes +import io.smnp.type.model.Value + +class TypeOfFunction : Function("typeOf") { + override fun define(new: FunctionDefinitionTool) { + new function simple(allTypes()) body { _, (obj) -> + Value.string(obj.type.toString()) // TODO + } + } +} \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index f409ff9..c0802dd 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,4 +4,6 @@ include 'app' include 'modules' include 'modules:lang' -include 'modules:io' \ No newline at end of file +include 'modules:debug' +include 'modules:io' +include 'modules:collection' \ No newline at end of file