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