MCPcopy Create free account
hub / github.com/Autodesk/AutomaticComponentToolkit / buildGoCallFunction

Function buildGoCallFunction

Source/buildbindinggo.go:432–466  ·  view source on GitHub ↗
(component ComponentDefinition, implw LanguageWriter)

Source from the content-addressed store, hash-verified

430}
431
432func buildGoCallFunction(component ComponentDefinition, implw LanguageWriter) {
433 NameSpace := component.NameSpace
434
435 implw.Writeln("func (implementation *%sImplementation) CallFunction(funcptr uintptr, parameters ... uintptr) (error) {", NameSpace)
436 implw.Writeln(" var ret uintptr;")
437 implw.Writeln(" if (!implementation.Initialized) {")
438 implw.Writeln(" return errors.New(\"%s Implementation has not been initialized!\")", NameSpace)
439 implw.Writeln(" }")
440 implw.Writeln(" ")
441 implw.Writeln(" switch len(parameters) { ")
442 implw.Writeln(" case 0: ret, _, _ = syscall.Syscall(funcptr, 0, 0, 0, 0)")
443 implw.Writeln(" case 1: ret, _, _ = syscall.Syscall(funcptr, 1, uintptr(parameters[0]), 0, 0)")
444 implw.Writeln(" case 2: ret, _, _ = syscall.Syscall(funcptr, 2, uintptr(parameters[0]), uintptr(parameters[1]), 0)")
445 implw.Writeln(" case 3: ret, _, _ = syscall.Syscall(funcptr, 3, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]))")
446 implw.Writeln(" case 4: ret, _, _ = syscall.Syscall6(funcptr, 4, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), 0, 0)")
447 implw.Writeln(" case 5: ret, _, _ = syscall.Syscall6(funcptr, 5, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), 0)")
448 implw.Writeln(" case 6: ret, _, _ = syscall.Syscall6(funcptr, 6, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]))")
449 implw.Writeln(" case 7: ret, _, _ = syscall.Syscall9(funcptr, 7, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), 0, 0)")
450 implw.Writeln(" case 8: ret, _, _ = syscall.Syscall9(funcptr, 8, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), uintptr(parameters[7]), 0)")
451 implw.Writeln(" case 9: ret, _, _ = syscall.Syscall9(funcptr, 9, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), uintptr(parameters[7]), uintptr(parameters[8]))")
452 implw.Writeln(" case 10: ret, _, _ = syscall.Syscall12(funcptr, 10, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), uintptr(parameters[7]), uintptr(parameters[8]), uintptr(parameters[9]), 0, 0)")
453 implw.Writeln(" case 11: ret, _, _ = syscall.Syscall12(funcptr, 11, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), uintptr(parameters[7]), uintptr(parameters[8]), uintptr(parameters[9]), uintptr(parameters[10]), 0)")
454 implw.Writeln(" case 12: ret, _, _ = syscall.Syscall12(funcptr, 12, uintptr(parameters[0]), uintptr(parameters[1]), uintptr(parameters[2]), uintptr(parameters[3]), uintptr(parameters[4]), uintptr(parameters[5]), uintptr(parameters[6]), uintptr(parameters[7]), uintptr(parameters[8]), uintptr(parameters[9]), uintptr(parameters[10]), uintptr(parameters[11]))")
455 implw.Writeln(" default: ")
456 implw.Writeln(" return errors.New(\"Invalid DLL function parameter count!\");")
457 implw.Writeln(" }")
458 implw.Writeln(" ")
459 implw.Writeln(" if (int(ret) != 0) {")
460 implw.Writeln(" return errors.New(fmt.Sprintf(\"%s Error: %%.04x (%%s)\", int(ret), Get%sErrorMessage(uint32(ret))))", NameSpace, NameSpace)
461 implw.Writeln(" }")
462 implw.Writeln(" ")
463 implw.Writeln(" return nil")
464 implw.Writeln("}")
465 implw.Writeln("")
466}
467
468
469func buildGoClass(component ComponentDefinition, class ComponentDefinitionClass, w LanguageWriter, implw LanguageWriter, NameSpace string, classdefinitions* []string) (error) {

Callers 1

buildGoWrapperFunction · 0.85

Calls 1

WritelnMethod · 0.80

Tested by

no test coverage detected