forked from go-python/gpython
/
vm.go
44 lines (38 loc) · 1.2 KB
/
vm.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Copyright 2018 The go-python Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Python virtual machine
package vm
import (
"github.com/go-python/gpython/py"
)
//go:generate stringer -type=vmStatus,OpCode -output stringer.go
// VM status code
type vmStatus byte
// VM Status code for main loop (reason for stack unwind)
const (
whyNot vmStatus = iota // No error
whyException // Exception occurred
whyReturn // 'return' statement
whyBreak // 'break' statement
whyContinue // 'continue' statement
whyYield // 'yield' operator
whySilenced // Exception silenced by 'with'
)
// Virtual machine state
type Vm struct {
// Current frame
frame *py.Frame
// Whether ext should be added to the next arg
extended bool
// 16 bit extension for argument for next opcode
ext int32
// Return value
retval py.Object
// VM Status code for main loop
why vmStatus
// Current Pending exception type, value and traceback
curexc py.ExceptionInfo
// Previous exception type, value and traceback
exc py.ExceptionInfo
}