Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions quickjs/_demo/add/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package main

import (
"github.com/goplus/lib/c"
"github.com/goplus/llpkg/quickjs"
)

func main() {
rt := quickjs.JSNewRuntime()
if rt == nil {
panic("none")
}
rt.JsStdInitHandlers()
ctx := rt.JSNewContext()
if ctx == nil {
panic("none")
}
ctx.JsStdAddHelpers(0, nil)
jsCode := c.Str("console.log('Hello from QuickJS! 1 + 2 =', 1 + 2);")
ctx.JSEval(jsCode, c.Strlen(jsCode), c.Str("<input>"), 0)
ctx.JSFreeContext()
rt.JSFreeRuntime()
}
107 changes: 107 additions & 0 deletions quickjs/cutils.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package quickjs

import (
"github.com/goplus/lib/c"
_ "unsafe"
)

const UTF8_CHAR_LEN_MAX = 6

type BOOL c.Int

const (
FALSE c.Int = 0
TRUE c.Int = 1
)

//go:linkname Pstrcpy C.pstrcpy
func Pstrcpy(buf *c.Char, buf_size c.Int, str *c.Char)

//go:linkname Pstrcat C.pstrcat
func Pstrcat(buf *c.Char, buf_size c.Int, s *c.Char) *c.Char

//go:linkname Strstart C.strstart
func Strstart(str *c.Char, val *c.Char, ptr **c.Char) c.Int

//go:linkname HasSuffix C.has_suffix
func HasSuffix(str *c.Char, suffix *c.Char) c.Int

type PackedU64 struct {
V c.Uint64T
}

type PackedU32 struct {
V c.Uint32T
}

type PackedU16 struct {
V c.Uint16T
}

// llgo:type C
type DynBufReallocFunc func(c.Pointer, c.Pointer, c.SizeT) c.Pointer

type DynBuf struct {
Buf *c.Uint8T
Size c.SizeT
AllocatedSize c.SizeT
Error BOOL
ReallocFunc *c.Pointer
Opaque c.Pointer
}

// llgo:link (*DynBuf).DbufInit C.dbuf_init
func (recv_ *DynBuf) DbufInit() {
}

// llgo:link (*DynBuf).DbufInit2 C.dbuf_init2
func (recv_ *DynBuf) DbufInit2(opaque c.Pointer, realloc_func DynBufReallocFunc) {
}

// llgo:link (*DynBuf).DbufRealloc C.dbuf_realloc
func (recv_ *DynBuf) DbufRealloc(new_size c.SizeT) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufWrite C.dbuf_write
func (recv_ *DynBuf) DbufWrite(offset c.SizeT, data *c.Uint8T, len c.SizeT) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufPut C.dbuf_put
func (recv_ *DynBuf) DbufPut(data *c.Uint8T, len c.SizeT) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufPutSelf C.dbuf_put_self
func (recv_ *DynBuf) DbufPutSelf(offset c.SizeT, len c.SizeT) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufPutc C.dbuf_putc
func (recv_ *DynBuf) DbufPutc(c c.Uint8T) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufPutstr C.dbuf_putstr
func (recv_ *DynBuf) DbufPutstr(str *c.Char) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufPrintf C.dbuf_printf
func (recv_ *DynBuf) DbufPrintf(fmt *c.Char, __llgo_va_list ...interface{}) c.Int {
return 0
}

// llgo:link (*DynBuf).DbufFree C.dbuf_free
func (recv_ *DynBuf) DbufFree() {
}

//go:linkname UnicodeToUtf8 C.unicode_to_utf8
func UnicodeToUtf8(buf *c.Uint8T, c c.Uint) c.Int

//go:linkname UnicodeFromUtf8 C.unicode_from_utf8
func UnicodeFromUtf8(p *c.Uint8T, max_len c.Int, pp **c.Uint8T) c.Int

//go:linkname Rqsort C.rqsort
func Rqsort(base c.Pointer, nmemb c.SizeT, size c.SizeT, cmp func(c.Pointer, c.Pointer, c.Pointer) c.Int, arg c.Pointer)
5 changes: 5 additions & 0 deletions quickjs/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
module github.com/goplus/llpkg/quickjs

go 1.20

require github.com/goplus/lib v0.2.0
2 changes: 2 additions & 0 deletions quickjs/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/goplus/lib v0.2.0 h1:AjqkN1XK5H23wZMMlpaUYAMCDAdSBQ2NMFrLtSh7W4g=
github.com/goplus/lib v0.2.0/go.mod h1:SgJv3oPqLLHCu0gcL46ejOP3x7/2ry2Jtxu7ta32kp0=
34 changes: 34 additions & 0 deletions quickjs/libregexp.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package quickjs

import (
"github.com/goplus/lib/c"
_ "unsafe"
)

//go:linkname LreCompile C.lre_compile
func LreCompile(plen *c.Int, error_msg *c.Char, error_msg_size c.Int, buf *c.Char, buf_len c.SizeT, re_flags c.Int, opaque c.Pointer) *c.Uint8T

//go:linkname LreGetCaptureCount C.lre_get_capture_count
func LreGetCaptureCount(bc_buf *c.Uint8T) c.Int

//go:linkname LreGetFlags C.lre_get_flags
func LreGetFlags(bc_buf *c.Uint8T) c.Int

//go:linkname LreGetGroupnames C.lre_get_groupnames
func LreGetGroupnames(bc_buf *c.Uint8T) *c.Char

//go:linkname LreExec C.lre_exec
func LreExec(capture **c.Uint8T, bc_buf *c.Uint8T, cbuf *c.Uint8T, cindex c.Int, clen c.Int, cbuf_type c.Int, opaque c.Pointer) c.Int

//go:linkname LreParseEscape C.lre_parse_escape
func LreParseEscape(pp **c.Uint8T, allow_utf16 c.Int) c.Int

//go:linkname LreIsSpace C.lre_is_space
func LreIsSpace(c c.Int) c.Int

/* must be provided by the user */
//go:linkname LreCheckStackOverflow C.lre_check_stack_overflow
func LreCheckStackOverflow(opaque c.Pointer, alloca_size c.SizeT) c.Int

//go:linkname LreRealloc C.lre_realloc
func LreRealloc(opaque c.Pointer, ptr c.Pointer, size c.SizeT) c.Pointer
Loading
Loading