()
| 969 | } |
| 970 | |
| 971 | func (l *State) executeSwitch() { |
| 972 | ci := l.callInfo |
| 973 | frame, closure, constants := newFrame(l, ci) |
| 974 | for { |
| 975 | if l.hookMask&(MaskLine|MaskCount) != 0 { |
| 976 | if l.hookCount--; l.hookCount == 0 || l.hookMask&MaskLine != 0 { |
| 977 | l.traceExecution() |
| 978 | frame = ci.frame |
| 979 | } |
| 980 | } |
| 981 | switch i := ci.step(); i.opCode() { |
| 982 | case opMove: |
| 983 | frame[i.a()] = frame[i.b()] |
| 984 | case opLoadConstant: |
| 985 | frame[i.a()] = constants[i.bx()] |
| 986 | case opLoadConstantEx: |
| 987 | frame[i.a()] = constants[expectNext(ci, opExtraArg).ax()] |
| 988 | case opLoadBool: |
| 989 | frame[i.a()] = i.b() != 0 |
| 990 | if i.c() != 0 { |
| 991 | ci.skip() |
| 992 | } |
| 993 | case opLoadNil: |
| 994 | a, b := i.a(), i.b() |
| 995 | clear(frame[a : a+b+1]) |
| 996 | case opGetUpValue: |
| 997 | frame[i.a()] = closure.upValue(i.b()) |
| 998 | case opGetTableUp: |
| 999 | tmp := l.tableAt(closure.upValue(i.b()), k(i.c(), constants, frame)) |
| 1000 | frame = ci.frame |
| 1001 | frame[i.a()] = tmp |
| 1002 | case opGetTable: |
| 1003 | tmp := l.tableAt(frame[i.b()], k(i.c(), constants, frame)) |
| 1004 | frame = ci.frame |
| 1005 | frame[i.a()] = tmp |
| 1006 | case opSetTableUp: |
| 1007 | l.setTableAt(closure.upValue(i.a()), k(i.b(), constants, frame), k(i.c(), constants, frame)) |
| 1008 | frame = ci.frame |
| 1009 | case opSetUpValue: |
| 1010 | closure.setUpValue(i.b(), frame[i.a()]) |
| 1011 | case opSetTable: |
| 1012 | l.setTableAt(frame[i.a()], k(i.b(), constants, frame), k(i.c(), constants, frame)) |
| 1013 | frame = ci.frame |
| 1014 | case opNewTable: |
| 1015 | a := i.a() |
| 1016 | if b, c := float8(i.b()), float8(i.c()); b != 0 || c != 0 { |
| 1017 | frame[a] = newTableWithSize(intFromFloat8(b), intFromFloat8(c)) |
| 1018 | } else { |
| 1019 | frame[a] = newTable() |
| 1020 | } |
| 1021 | clear(frame[a+1:]) |
| 1022 | case opSelf: |
| 1023 | a, t := i.a(), frame[i.b()] |
| 1024 | tmp := l.tableAt(t, k(i.c(), constants, frame)) |
| 1025 | frame = ci.frame |
| 1026 | frame[a+1], frame[a] = t, tmp |
| 1027 | case opAdd: |
| 1028 | b := k(i.b(), constants, frame) |
nothing calls this directly
no test coverage detected