computedGoto编译指示

calculateGoto 编译指示可用于告诉编译器如何编译在 while true 语句中中的Nim case 语句。 从语法上讲,它必须在循环中用作语句:

  1. type
  2. MyEnum = enum
  3. enumA, enumB, enumC, enumD, enumE
  4.  
  5. proc vm() =
  6. var instructions: array[0..100, MyEnum]
  7. instructions[2] = enumC
  8. instructions[3] = enumD
  9. instructions[4] = enumA
  10. instructions[5] = enumD
  11. instructions[6] = enumC
  12. instructions[7] = enumA
  13. instructions[8] = enumB
  14.  
  15. instructions[12] = enumE
  16. var pc = 0
  17. while true:
  18. {.computedGoto.}
  19. let instr = instructions[pc]
  20. case instr
  21. of enumA:
  22. echo "yeah A"
  23. of enumC, enumD:
  24. echo "yeah CD"
  25. of enumB:
  26. echo "yeah B"
  27. of enumE:
  28. break
  29. inc(pc)
  30.  
  31. vm()

如示例所示, computedGoto 对解释器最有用。 如果底层后端(C编译器)不支持计算的goto扩展,则简单地忽略编译指示。