• computedGoto编译指示

    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扩展,则简单地忽略编译指示。