add a standard library, and introduce formed imports (import std "myfile.pork")

This commit is contained in:
alex committed 2023-09-06 21:39:57 -07:00
1 parent f31e12df89
commit 0e4362eefb
18 files changed
+153 -32

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
plugins {
id("gay.pizza.pork.module")
}
tasks.processResources {
from("src/main/pork") {
into("pork/stdlib")
}
}
dependencies {
implementation(project(":frontend"))
}
@@ -0,0 +1,33 @@
package gay.pizza.pork.stdlib
import gay.pizza.pork.frontend.ContentSource
import gay.pizza.pork.parser.CharSource
import gay.pizza.pork.parser.StringCharSource
object PorkStdlib : ContentSource {
private val stdlibClass = PorkStdlib::class.java
private fun readManifestFiles(): List<String> {
val manifestContent = read("stdlib.manifest")
return manifestContent.split("\n").filter { line ->
val trimmed = line.trim()
trimmed.isNotEmpty() && !trimmed.startsWith("#")
}
}
val files: List<String> = readManifestFiles()
private fun read(path: String): String {
val stream = stdlibClass.getResourceAsStream("/pork/stdlib/${path}")
?: throw RuntimeException("Stdlib does not contain file '${path}'")
return String(stream.readAllBytes())
}
override fun loadAsCharSource(path: String): CharSource {
return StringCharSource(read(path))
}
override fun stableContentIdentity(path: String): String {
return path
}
}
+5
View File
@@ -0,0 +1,5 @@
export func malloc(size)
native ffi "c:malloc:void*"
export func free(pointer)
native ffi "c:free:void"
+15
View File
@@ -0,0 +1,15 @@
export func add(a, b) {
a + b
}
export func subtract(a, b) {
a - b
}
export func multiply(a, b) {
a * b
}
export func divide(a, b) {
a / b
}
+1
View File
@@ -0,0 +1 @@
numbers.pork