Change root package
This commit is contained in:
@@ -0,0 +1,17 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang
|
||||
|
||||
import com.bartlomiejpluta.smnp.ext.lang.constructor.IntConstructor
|
||||
import com.bartlomiejpluta.smnp.ext.lang.constructor.NoteConstructor
|
||||
import com.bartlomiejpluta.smnp.ext.lang.function.TypeOfFunction
|
||||
import com.bartlomiejpluta.smnp.ext.lang.method.CharAtMethod
|
||||
import com.bartlomiejpluta.smnp.ext.lang.method.ListAccessMethod
|
||||
import com.bartlomiejpluta.smnp.ext.lang.method.MapAccessMethod
|
||||
import com.bartlomiejpluta.smnp.ext.lang.method.StringifyMethod
|
||||
import com.bartlomiejpluta.smnp.ext.provider.NativeModuleProvider
|
||||
import org.pf4j.Extension
|
||||
|
||||
@Extension
|
||||
class LangModule : NativeModuleProvider("smnp.lang") {
|
||||
override fun functions() = listOf(IntConstructor(), NoteConstructor(), TypeOfFunction())
|
||||
override fun methods() = listOf(ListAccessMethod(), MapAccessMethod(), CharAtMethod(), StringifyMethod())
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.constructor
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.function.Function
|
||||
import com.bartlomiejpluta.smnp.callable.function.FunctionDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.FLOAT
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.INT
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class IntConstructor : Function("Int") {
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
new function simple(ofType(INT)) body { _, (int) ->
|
||||
int
|
||||
}
|
||||
|
||||
new function simple(ofType(FLOAT)) body { _, (float) ->
|
||||
Value.int((float.value as Float).toInt())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
package io.smnp.ext.lang.constructor
|
||||
package com.bartlomiejpluta.smnp.ext.lang.constructor
|
||||
|
||||
import io.smnp.callable.function.Function
|
||||
import io.smnp.callable.function.FunctionDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.data.entity.Note
|
||||
import io.smnp.data.enumeration.Pitch
|
||||
import io.smnp.math.Fraction
|
||||
import io.smnp.type.enumeration.DataType.*
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
import com.bartlomiejpluta.smnp.callable.function.Function
|
||||
import com.bartlomiejpluta.smnp.callable.function.FunctionDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.data.entity.Note
|
||||
import com.bartlomiejpluta.smnp.data.enumeration.Pitch
|
||||
import com.bartlomiejpluta.smnp.math.Fraction
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.*
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class NoteConstructor : Function("Note") {
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.function
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.function.Function
|
||||
import com.bartlomiejpluta.smnp.callable.function.FunctionDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class TypeOfFunction : Function("typeOf") {
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
new function simple(anyType()) body { _, (obj) ->
|
||||
Value.string(obj.typeName)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.method
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.method.Method
|
||||
import com.bartlomiejpluta.smnp.callable.method.MethodDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.error.EvaluationException
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.INT
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.STRING
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class CharAtMethod : Method(ofType(STRING),"charAt") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(ofType(INT)) body { _, obj, (index) ->
|
||||
Value.string((obj.value as String).getOrNull(index.value as Int)?.toString() ?: throw EvaluationException("Index '${index.value}' runs out of string bounds"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.method
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.method.Method
|
||||
import com.bartlomiejpluta.smnp.callable.method.MethodDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.error.EvaluationException
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.INT
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.LIST
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class ListAccessMethod : Method(ofType(LIST), "get") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(ofType(INT)) body { _, value, (index) ->
|
||||
val list = value.value as List<Value>
|
||||
val i = index.value as Int
|
||||
|
||||
if(i >= list.size) {
|
||||
throw EvaluationException("Index '$i' runs out of array bounds")
|
||||
}
|
||||
|
||||
list[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.method
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.method.Method
|
||||
import com.bartlomiejpluta.smnp.callable.method.MethodDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.error.EvaluationException
|
||||
import com.bartlomiejpluta.smnp.type.enumeration.DataType.MAP
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class MapAccessMethod : Method(ofType(MAP), "get") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(anyType()) body { _, obj, (key) ->
|
||||
val map = (obj.value as Map<Value, Value>)
|
||||
map[key] ?: throw EvaluationException("Key '${key.value}' not found")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.bartlomiejpluta.smnp.ext.lang.method
|
||||
|
||||
import com.bartlomiejpluta.smnp.callable.method.Method
|
||||
import com.bartlomiejpluta.smnp.callable.method.MethodDefinitionTool
|
||||
import com.bartlomiejpluta.smnp.callable.signature.Signature.Companion.simple
|
||||
import com.bartlomiejpluta.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import com.bartlomiejpluta.smnp.type.model.Value
|
||||
|
||||
class StringifyMethod : Method(anyType(), "toString") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple() body { _, obj, _ ->
|
||||
Value.string(obj.stringify())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
package io.smnp.ext.lang
|
||||
|
||||
import io.smnp.ext.provider.NativeModuleProvider
|
||||
import io.smnp.ext.lang.constructor.IntConstructor
|
||||
import io.smnp.ext.lang.constructor.NoteConstructor
|
||||
import io.smnp.ext.lang.function.TypeOfFunction
|
||||
import io.smnp.ext.lang.method.CharAtMethod
|
||||
import io.smnp.ext.lang.method.ListAccessMethod
|
||||
import io.smnp.ext.lang.method.MapAccessMethod
|
||||
import io.smnp.ext.lang.method.StringifyMethod
|
||||
import org.pf4j.Extension
|
||||
|
||||
@Extension
|
||||
class LangModule : NativeModuleProvider("smnp.lang") {
|
||||
override fun functions() = listOf(IntConstructor(), NoteConstructor(), TypeOfFunction())
|
||||
override fun methods() = listOf(ListAccessMethod(), MapAccessMethod(), CharAtMethod(), StringifyMethod())
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package io.smnp.ext.lang.constructor
|
||||
|
||||
import io.smnp.callable.function.Function
|
||||
import io.smnp.callable.function.FunctionDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.type.enumeration.DataType.FLOAT
|
||||
import io.smnp.type.enumeration.DataType.INT
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class IntConstructor : Function("Int") {
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
new function simple(ofType(INT)) body { _, (int) ->
|
||||
int
|
||||
}
|
||||
|
||||
new function simple(ofType(FLOAT)) body { _, (float) ->
|
||||
Value.int((float.value as Float).toInt())
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.matcher.Matcher.Companion.anyType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class TypeOfFunction : Function("typeOf") {
|
||||
override fun define(new: FunctionDefinitionTool) {
|
||||
new function simple(anyType()) body { _, (obj) ->
|
||||
Value.string(obj.typeName)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package io.smnp.ext.lang.method
|
||||
|
||||
import io.smnp.callable.method.Method
|
||||
import io.smnp.callable.method.MethodDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.error.EvaluationException
|
||||
import io.smnp.type.enumeration.DataType.INT
|
||||
import io.smnp.type.enumeration.DataType.STRING
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class CharAtMethod : Method(ofType(STRING),"charAt") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(ofType(INT)) body { _, obj, (index) ->
|
||||
Value.string((obj.value as String).getOrNull(index.value as Int)?.toString() ?: throw EvaluationException("Index '${index.value}' runs out of string bounds"))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +0,0 @@
|
||||
package io.smnp.ext.lang.method
|
||||
|
||||
import io.smnp.callable.method.Method
|
||||
import io.smnp.callable.method.MethodDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.error.EvaluationException
|
||||
import io.smnp.type.enumeration.DataType.INT
|
||||
import io.smnp.type.enumeration.DataType.LIST
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class ListAccessMethod : Method(ofType(LIST), "get") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(ofType(INT)) body { _, value, (index) ->
|
||||
val list = value.value as List<Value>
|
||||
val i = index.value as Int
|
||||
|
||||
if(i >= list.size) {
|
||||
throw EvaluationException("Index '$i' runs out of array bounds")
|
||||
}
|
||||
|
||||
list[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package io.smnp.ext.lang.method
|
||||
|
||||
import io.smnp.callable.method.Method
|
||||
import io.smnp.callable.method.MethodDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.error.EvaluationException
|
||||
import io.smnp.type.enumeration.DataType.MAP
|
||||
import io.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import io.smnp.type.matcher.Matcher.Companion.ofType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class MapAccessMethod : Method(ofType(MAP), "get") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple(anyType()) body { _, obj, (key) ->
|
||||
val map = (obj.value as Map<Value, Value>)
|
||||
map[key] ?: throw EvaluationException("Key '${key.value}' not found")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package io.smnp.ext.lang.method
|
||||
|
||||
import io.smnp.callable.method.Method
|
||||
import io.smnp.callable.method.MethodDefinitionTool
|
||||
import io.smnp.callable.signature.Signature.Companion.simple
|
||||
import io.smnp.type.matcher.Matcher.Companion.anyType
|
||||
import io.smnp.type.model.Value
|
||||
|
||||
class StringifyMethod : Method(anyType(), "toString") {
|
||||
override fun define(new: MethodDefinitionTool) {
|
||||
new method simple() body { _, obj, _ ->
|
||||
Value.string(obj.stringify())
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user