compiler_norace.go 864 B

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