[agent/codex:gpt-5.3-codex-spark] Read docs/RFC.md fully. Find ONE feature described in the sp... #10

Merged
Virgil merged 1 commit from main into dev 2026-04-03 19:21:34 +00:00
3 changed files with 124 additions and 2 deletions

View file

@ -82,7 +82,7 @@ func TestCallRejectsUnsupportedInputs(t *testing.T) {
})
assertPanics(t, "unsupported argument count", func() {
_ = Call(callFailureFunction(), 1, 2, 3, 4, 5, 6, 7)
_ = Call(callFailureFunction(), 1, 2, 3, 4, 5, 6, 7, 8, 9)
})
}
@ -94,6 +94,22 @@ func TestCallSupportsSixArguments(t *testing.T) {
}
}
func TestCallSupportsSevenArguments(t *testing.T) {
t.Parallel()
if err := Call(callSevenArgumentFunction(), 10, 11, 12, 13, 14, 15, 16); err != nil {
t.Fatalf("expected success, got error: %v", err)
}
}
func TestCallSupportsEightArguments(t *testing.T) {
t.Parallel()
if err := Call(callEightArgumentFunction(), 10, 11, 12, 13, 14, 15, 16, 17); err != nil {
t.Fatalf("expected success, got error: %v", err)
}
}
func TestCallSupportsBufferArgument(t *testing.T) {
t.Parallel()

View file

@ -22,6 +22,20 @@ int call_six_args(uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintpt
return 13;
}
int call_seven_args(uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6) {
if (a0 == 10 && a1 == 11 && a2 == 12 && a3 == 13 && a4 == 14 && a5 == 15 && a6 == 16) {
return 0;
}
return 13;
}
int call_eight_args(uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7) {
if (a0 == 10 && a1 == 11 && a2 == 12 && a3 == 13 && a4 == 14 && a5 == 15 && a6 == 16 && a7 == 17) {
return 0;
}
return 13;
}
int call_buffer_argument(uintptr_t value) {
return value == 0 ? 13 : 0;
}
@ -38,6 +52,14 @@ uintptr_t call_six_args_ptr(void) {
return (uintptr_t)&call_six_args;
}
uintptr_t call_seven_args_ptr(void) {
return (uintptr_t)&call_seven_args;
}
uintptr_t call_eight_args_ptr(void) {
return (uintptr_t)&call_eight_args;
}
uintptr_t call_buffer_argument_ptr(void) {
return (uintptr_t)&call_buffer_argument;
}
@ -62,6 +84,16 @@ func callSixArgumentFunction() unsafe.Pointer {
return *(*unsafe.Pointer)(unsafe.Pointer(&function))
}
func callSevenArgumentFunction() unsafe.Pointer {
function := C.call_seven_args_ptr()
return *(*unsafe.Pointer)(unsafe.Pointer(&function))
}
func callEightArgumentFunction() unsafe.Pointer {
function := C.call_eight_args_ptr()
return *(*unsafe.Pointer)(unsafe.Pointer(&function))
}
func callBufferArgumentFunction() unsafe.Pointer {
function := C.call_buffer_argument_ptr()
return *(*unsafe.Pointer)(unsafe.Pointer(&function))

View file

@ -11,6 +11,8 @@ typedef int (*cgo_call_int_fn3_t)(uintptr_t, uintptr_t, uintptr_t);
typedef int (*cgo_call_int_fn4_t)(uintptr_t, uintptr_t, uintptr_t, uintptr_t);
typedef int (*cgo_call_int_fn5_t)(uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
typedef int (*cgo_call_int_fn6_t)(uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
typedef int (*cgo_call_int_fn7_t)(uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
typedef int (*cgo_call_int_fn8_t)(uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
int cgo_call_0(uintptr_t fn) {
return ((cgo_call_int_fn0_t)fn)();
@ -39,6 +41,14 @@ int cgo_call_5(uintptr_t fn, uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t
int cgo_call_6(uintptr_t fn, uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5) {
return ((cgo_call_int_fn6_t)fn)(a0, a1, a2, a3, a4, a5);
}
int cgo_call_7(uintptr_t fn, uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6) {
return ((cgo_call_int_fn7_t)fn)(a0, a1, a2, a3, a4, a5, a6);
}
int cgo_call_8(uintptr_t fn, uintptr_t a0, uintptr_t a1, uintptr_t a2, uintptr_t a3, uintptr_t a4, uintptr_t a5, uintptr_t a6, uintptr_t a7) {
return ((cgo_call_int_fn8_t)fn)(a0, a1, a2, a3, a4, a5, a6, a7);
}
*/
import "C"
@ -199,8 +209,72 @@ func Call(function unsafe.Pointer, args ...interface{}) error {
panic("cgo.Call: unsupported argument type")
}
result = C.cgo_call_6(C.uintptr_t(target), C.uintptr_t(a0), C.uintptr_t(a1), C.uintptr_t(a2), C.uintptr_t(a3), C.uintptr_t(a4), C.uintptr_t(a5))
case 7:
a0, ok := toSyscallArg(args[0])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a1, ok := toSyscallArg(args[1])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a2, ok := toSyscallArg(args[2])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a3, ok := toSyscallArg(args[3])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a4, ok := toSyscallArg(args[4])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a5, ok := toSyscallArg(args[5])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a6, ok := toSyscallArg(args[6])
if !ok {
panic("cgo.Call: unsupported argument type")
}
result = C.cgo_call_7(C.uintptr_t(target), C.uintptr_t(a0), C.uintptr_t(a1), C.uintptr_t(a2), C.uintptr_t(a3), C.uintptr_t(a4), C.uintptr_t(a5), C.uintptr_t(a6))
case 8:
a0, ok := toSyscallArg(args[0])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a1, ok := toSyscallArg(args[1])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a2, ok := toSyscallArg(args[2])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a3, ok := toSyscallArg(args[3])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a4, ok := toSyscallArg(args[4])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a5, ok := toSyscallArg(args[5])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a6, ok := toSyscallArg(args[6])
if !ok {
panic("cgo.Call: unsupported argument type")
}
a7, ok := toSyscallArg(args[7])
if !ok {
panic("cgo.Call: unsupported argument type")
}
result = C.cgo_call_8(C.uintptr_t(target), C.uintptr_t(a0), C.uintptr_t(a1), C.uintptr_t(a2), C.uintptr_t(a3), C.uintptr_t(a4), C.uintptr_t(a5), C.uintptr_t(a6), C.uintptr_t(a7))
default:
panic("cgo.Call: unsupported argument count: max 6")
panic("cgo.Call: unsupported argument count: max 8")
}
if result != 0 {