ref: 7979dfca14134208fe237097f44a7a080e42b62f
parent: 27ae521c8504a1de9feac7e6183e47cda2d9a497
author: hexyl <[email protected]>
date: Sun Jan 8 10:21:59 EST 2023
rewrite in go
--- a/README
+++ b/README
@@ -1,21 +1,18 @@
libtroll
--------
-libtroll is a tiny codegen library written in C, normally used in compilers & such
+libtroll is a tiny codegen library written in go, normally used in compilers & such
libtroll isnt very optimized so be aware of that.
plans
-----
the plans are in order of how ill make them
-[ ] generate portable C
[ ] generate C++
[ ] generate JS
-[ ] generate Python
not everything is done
usage
-----
-plop src/libtroll.c & src/libtroll.h into your project
-make sure to compile the C file
+dont use it yet, thanks!
license
-------
--- /dev/null
+++ b/backend.go
@@ -1,0 +1,9 @@
+package libtroll
+
+type Backend interface {
+ Function() string
+ Variable() string
+ Constant() string
+ Struct() string
+ Finalize() string
+}
--- /dev/null
+++ b/backends/cpp.go
@@ -1,0 +1,24 @@
+package backends
+
+type BackendCPP struct {
+}
+
+func (b BackendCPP) Function() string {
+ return "not done"
+}
+
+func (b BackendCPP) Variable() string {
+ return "not done"
+}
+
+func (b BackendCPP) Constant() string {
+ return "not done"
+}
+
+func (b BackendCPP) Struct() string {
+ return "not done"
+}
+
+func (b BackendCPP) Finalize() string {
+ return "not done"
+}
--- /dev/null
+++ b/go.mod
@@ -1,0 +1,3 @@
+module shithub.us/hexyl/libtroll
+
+go 1.19
--- /dev/null
+++ b/libtroll.go
@@ -1,0 +1,38 @@
+package libtroll
+
+import (
+ "fmt"
+ "os"
+ "strconv"
+ "time"
+
+ "shithub.us/hexyl/libtroll/utils"
+)
+
+type Type int64
+
+type Program struct {
+ name string
+ typ Type
+ out os.File
+ backend Backend
+}
+
+func (p *Program) Init(b Backend) {
+ timestamp := strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
+ tmp := fmt.Sprintf("%s-%s.src", p.name, timestamp)
+ f, err := os.CreateTemp("", tmp)
+ utils.Check(err)
+ p.out = *f
+ p.backend = b
+ defer os.Remove(f.Name())
+}
+
+func New(name string, typ Type) Program {
+ tmpnew := Program{
+ name: name,
+ typ: typ,
+ }
+
+ return tmpnew
+}
--- /dev/null
+++ b/libtroll_test.go
@@ -1,0 +1,13 @@
+package libtroll_test
+
+import (
+ "testing"
+
+ "shithub.us/hexyl/libtroll"
+ "shithub.us/hexyl/libtroll/backends"
+)
+
+func TestInit(t *testing.T) {
+ troll := libtroll.New("test", 0)
+ troll.Init(backends.BackendCPP{})
+}
--- a/mkfile
+++ /dev/null
@@ -1,10 +1,0 @@
-</$objtype/mkfile
-
-LIB=/$objtype/lib/libtroll.a
-OFILES=libtroll.$O
-HFILES=src/libtroll.h
-
-</sys/src/cmd/mksyslib
-
-install:V: $LIB $HFILES
- cp $HFILES /sys/include
--- a/src/libtroll.c
+++ /dev/null
@@ -1,1 +1,0 @@
-#include "libtroll.h"
\ No newline at end of file
--- a/src/libtroll.h
+++ /dev/null
@@ -1,5 +1,0 @@
-#ifndef LIBTROLL_H
-#define LIBTROLL_H
-
-
-#endif
\ No newline at end of file
--- /dev/null
+++ b/utils/utils.go
@@ -1,0 +1,7 @@
+package utils
+
+func Check(e error) {
+ if e != nil {
+ panic(e)
+ }
+}