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

This commit is contained in:
2023-09-06 21:39:57 -07:00
parent f31e12df89
commit 0e4362eefb
18 changed files with 153 additions and 32 deletions

13
stdlib/build.gradle.kts Normal file
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"))
}

View File

@ -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
}
}

View File

@ -0,0 +1,5 @@
export func malloc(size)
native ffi "c:malloc:void*"
export func free(pointer)
native ffi "c:free:void"

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
}

View File

@ -0,0 +1 @@
numbers.pork