compiler_norace.go 849 B

1234567891011121314151617181920212223242526272829303132
  1. //go:build !race
  2. // +build !race
  3. package encoder
  4. func CompileToGetCodeSet(ctx *RuntimeContext, typeptr uintptr) (*OpcodeSet, error) {
  5. if typeptr > typeAddr.MaxTypeAddr || typeptr < typeAddr.BaseTypeAddr {
  6. codeSet, err := compileToGetCodeSetSlowPath(typeptr)
  7. if err != nil {
  8. return nil, err
  9. }
  10. return getFilteredCodeSetIfNeeded(ctx, codeSet)
  11. }
  12. index := (typeptr - typeAddr.BaseTypeAddr) >> typeAddr.AddrShift
  13. if codeSet := cachedOpcodeSets[index]; codeSet != nil {
  14. filtered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)
  15. if err != nil {
  16. return nil, err
  17. }
  18. return filtered, nil
  19. }
  20. codeSet, err := newCompiler().compile(typeptr)
  21. if err != nil {
  22. return nil, err
  23. }
  24. filtered, err := getFilteredCodeSetIfNeeded(ctx, codeSet)
  25. if err != nil {
  26. return nil, err
  27. }
  28. cachedOpcodeSets[index] = codeSet
  29. return filtered, nil
  30. }