Make a complete todo list

This commit is contained in:
Brandon Dyck 2022-11-27 09:32:17 -07:00
parent ca847dc7c5
commit e2c1b19b3e

127
ph7.go
View File

@ -94,6 +94,8 @@ func (e *Engine) ErrLog() (string, error) {
return C.GoStringN(s, n), nil return C.GoStringN(s, n), nil
} }
// TODO All the ph7_config verbs
func (e *Engine) Compile(source []byte, phpOnly bool) (*VM, error) { func (e *Engine) Compile(source []byte, phpOnly bool) (*VM, error) {
csource := C.CBytes(source) csource := C.CBytes(source)
defer C.free(csource) defer C.free(csource)
@ -110,13 +112,129 @@ func (e *Engine) Compile(source []byte, phpOnly bool) (*VM, error) {
return newVM(cvm), nil return newVM(cvm), nil
} }
// TODO (*Engine).CompileFile
func (e *Engine) Close() error { func (e *Engine) Close() error {
return newError(C.ph7_release((*C.ph7)(e))) return newError(C.ph7_release((*C.ph7)(e)))
} }
type Context C.ph7_context
func (c *Context) ResultInt(i int) error {
return newError(C.ph7_result_int((*C.ph7_context)(c), C.int(i)))
}
func (c *Context) ResultInt64(i int64) error {
return newError(C.ph7_result_int64((*C.ph7_context)(c), C.ph7_int64(i)))
}
func (c *Context) ResultBool(b bool) error {
var cb C.int
if b {
cb = 1
}
return newError(C.ph7_result_bool((*C.ph7_context)(c), cb))
}
func (c *Context) ResultDouble(d float64) error {
return newError(C.ph7_result_double((*C.ph7_context)(c), C.double(d)))
}
func (c *Context) ResultNull() error {
return newError(C.ph7_result_null((*C.ph7_context)(c)))
}
func (c *Context) ResultString(s string) error {
cs := C.CString(s)
defer C.free(unsafe.Pointer(cs))
return newError(C.ph7_result_string((*C.ph7_context)(c), cs, C.int(len(s))))
}
// TODO (*Context).ResultStringFormat maybe? Or just use fmt.Sprint*.
func (c *Context) ResultValue(value *Value) error {
return newError(C.ph7_result_value((*C.ph7_context)(c), (*C.ph7_value)(value)))
}
// TODO (*Context).ResultResource
func (c *Context) Output(s string) error {
cs := C.CString(s)
defer C.free(unsafe.Pointer(cs))
return newError(C.ph7_context_output((*C.ph7_context)(c), cs, C.int(len(s))))
}
// TODO (*Context).OutputFormat maybe?
// TODO (*Context).ThrowError
func (c *Context) RandomNum() uint {
return uint(C.ph7_context_random_num((*C.ph7_context)(c)))
}
// TODO (*Context).RandomString
// TODO (*Context).UserData
// TODO (*Context).PushAuxData
// TODO (*Context).PeekAuxData
// TODO (*Context).PopAuxData
// TODO (*Context).ResultBufLength
// TODO (*Context).FunctionName
// TODO (*Context).AllocChunk
// TODO (*Context).ReallocChunk
// TODO (*Context).FreeChunk
type Value C.ph7_value type Value C.ph7_value
type Context C.ph7_context // TODO (*Value).ToInt
// TODO (*Value).ToBool
// TODO (*Value).ToInt64
// TODO (*Value).ToDouble
// TODO (*Value).ToString
// TODO (*Value).ToResource
// TODO (*Value).Compare
// TODO (*Value).Int
// TODO (*Value).Int64
// TODO (*Value).Bool
// TODO (*Value).Null
// TODO (*Value).Double
// TODO (*Value).String
// TODO (*Value).StringFormat maybe?
// TODO (*Value).ResetStringCursor
// TODO (*Value).Resource
// TODO (*Value).Release
// TODO (*Value).ArrayFetch
// TODO (*Value).ArrayWalk
// TODO (*Value).ArrayAddElem
// TODO (*Value).ArrayAddStrkeyElem
// TODO (*Value).ArrayAddIntkeyElem
// TODO (*Value).ArrayCount
// TODO (*Value).ObjectWalk
// TODO (*Value).ObjectFetchAttr
// TODO (*Value).ObjectGetClassName
// TODO (*Value).IsInt
// TODO (*Value).IsFloat
// TODO (*Value).IsBool
// TODO (*Value).IsString
// TODO (*Value).IsNull
// TODO (*Value).IsNumeric
// TODO (*Value).IsCallable
// TODO (*Value).IsScalar
// TODO (*Value).IsArray
// TODO (*Value).IsObject
// TODO (*Value).IsResource
// TODO (*Value).IsEmpty
// TODO Init
// TODO Config
// TODO Shutdown
// TODO IsThreadsafe
// TODO Version
// TODO Signature
// TODO Ident
// TODO Copyright
type VM struct { type VM struct {
ptr *C.ph7_vm ptr *C.ph7_vm
@ -150,6 +268,9 @@ func (vm *VM) SetOutputWriter(w io.Writer) error {
return newError(C.vm_set_output_callback(vm.ptr, vm.pointerKey)) return newError(C.vm_set_output_callback(vm.ptr, vm.pointerKey))
} }
// TODO All the ph7_vm_config verbs
// TODO (*VM).Dump(w io.Writer)
func (vm *VM) OutputWriteError() error { func (vm *VM) OutputWriteError() error {
return vm.outputWriteErr return vm.outputWriteErr
} }
@ -208,3 +329,7 @@ func (vm *VM) CreateFunction(name string, f ForeignFunction) error {
return newError(C.vm_create_function(vm.ptr, cname, fkey)) return newError(C.vm_create_function(vm.ptr, cname, fkey))
} }
// TODO (*VM).DeleteFunction
// TODO (*VM).CreateConstant
// TODO (*VM).DeleteConstant