https://github.com/hrszpuk/remeta
A metaprogramming tool for porting Go packages over to the ReRect programming language
https://github.com/hrszpuk/remeta
binding-generator go golang metaprogramming parser rect rerect
Last synced: over 1 year ago
JSON representation
A metaprogramming tool for porting Go packages over to the ReRect programming language
- Host: GitHub
- URL: https://github.com/hrszpuk/remeta
- Owner: hrszpuk
- Created: 2023-09-11T13:18:44.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2023-09-21T15:06:00.000Z (almost 3 years ago)
- Last Synced: 2025-01-07T06:15:32.369Z (over 1 year ago)
- Topics: binding-generator, go, golang, metaprogramming, parser, rect, rerect
- Language: Go
- Homepage:
- Size: 850 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
Awesome Lists containing this project
README
Automatically generate Go package bindings for ReRect!
Remeta uses Go's parser and some metaprogramming magic to quickly generate easy to read bindings
Installation
User Guide
Contributing
Go module
ReRect bindings
```go
package test
type Vector3 struct {
x int
y int
z int
}
func Vector3Add(v1, v2 Vector3) Vector3 {
return Vector3{
x: v1.x + v2.x,
y: v1.y + v2.y,
z: v1.z + v2.z,
}
}
func (v1 Vector3) Add(v2 Vector3) Vector3 {
return Vector3Add(v1, v2)
}
```
```go
package gopackages
import (
"bytespace.network/rerect/compunit"
"bytespace.network/rerect/eval_objects"
"bytespace.network/rerect/symbols"
_origin "bytespace.network/rerect/go_packages/test"
)
func LoadTest() {
test := registerPackage("test")
Vector3TypeSymbol := symbols.NewTypeSymbol(
"Vector3",
[]*symbols.TypeSymbol{},
symbols.CON,
0,
nil,
)
Vector3Container := symbols.NewContainerSymbol(
test, "Vector3", Vector3TypeSymbol,
)
Vector3Container.Fields = append(
Vector3Container.Fields,
symbols.NewFieldSymbol(
Vector3Container, "x",
compunit.GlobalDataTypeRegister["int"],
),
)
Vector3Container.Fields = append(
Vector3Container.Fields,
symbols.NewFieldSymbol(
Vector3Container, "y",
compunit.GlobalDataTypeRegister["int"],
),
)
Vector3Container.Fields = append(
Vector3Container.Fields,
symbols.NewFieldSymbol(
Vector3Container, "z",
compunit.GlobalDataTypeRegister["int"],
),
)
symbols.NewVMFunctionSymbol(
test,
"Vector3Add",
compunit.GlobalDataTypeRegister["Vector3"],
[]*symbols.ParameterSymbol{
symbols.NewParameterSymbol(
"v1",
0,
compunit.GlobalDataTypeRegister["Vector3"],
),
},
Vector3Add,
)
symbols.NewVMFunctionSymbol(
test,
"Add",
compunit.GlobalDataTypeRegister["Vector3"],
[]*symbols.ParameterSymbol{
symbols.NewParameterSymbol(
"v2",
0,
compunit.GlobalDataTypeRegister["Vector3"],
),
},
Add,
)
}
func Vector3Add(args []any) any {
v1 := args[0].(Vector3)
v2 := args[0].(Vector3)
return _origin.Vector3Add(v1, v2)
}
func Vector3_Add(instance any, args []any) any {
v2 := args[0].(Vector3)
return Add(v2)
}
```