-
Notifications
You must be signed in to change notification settings - Fork 47
/
opcodes_base.go
230 lines (209 loc) · 6.69 KB
/
opcodes_base.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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// +build base opengl
package cxcore
// op codes
const (
// time
OP_TIME_SLEEP = iota + END_OF_CORE_OPS
OP_TIME_UNIX
OP_TIME_UNIX_MILLI
OP_TIME_UNIX_NANO
// serialize
OP_SERIAL_PROGRAM
// os
OP_OS_GET_WORKING_DIRECTORY
OP_OS_OPEN
OP_OS_CLOSE
OP_OS_SEEK
OP_OS_READ_ALL_TEXT
OP_OS_READ_F32
OP_OS_READ_UI32
OP_OS_READ_UI16
OP_OS_READ_F32_SLICE
OP_OS_READ_UI32_SLICE
OP_OS_READ_UI16_SLICE
OP_OS_RUN
OP_OS_EXIT
// json
OP_JSON_OPEN
OP_JSON_CLOSE
OP_JSON_TOKEN_MORE
OP_JSON_TOKEN_NEXT
OP_JSON_TOKEN_TYPE
OP_JSON_TOKEN_DELIM
OP_JSON_TOKEN_BOOL
OP_JSON_TOKEN_F64
OP_JSON_TOKEN_I64
OP_JSON_TOKEN_STR
// profile
OP_START_CPU_PROFILE
OP_STOP_CPU_PROFILE
// http
// OP_HTTP_GET
// object explorer
OP_OBJ_QUERY
END_OF_BASE_OPS
)
func init() {
// time
AddOpCode(OP_TIME_SLEEP, "time.Sleep",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{})
AddOpCode(OP_TIME_UNIX_MILLI, "time.UnixMilli",
[]*CXArgument{},
[]*CXArgument{newOpPar(TYPE_I64, false)})
AddOpCode(OP_TIME_UNIX_NANO, "time.UnixNano",
[]*CXArgument{},
[]*CXArgument{newOpPar(TYPE_I64, false)})
// http
// AddOpCode(OP_HTTP_GET, "http.Get",
// []*CXArgument{newOpPar(TYPE_STR, false)},
// []*CXArgument{newOpPar(TYPE_STR, false)})
// os
AddOpCode(OP_OS_GET_WORKING_DIRECTORY, "os.GetWorkingDirectory",
[]*CXArgument{},
[]*CXArgument{newOpPar(TYPE_STR, false)})
AddOpCode(OP_OS_OPEN, "os.Open",
[]*CXArgument{newOpPar(TYPE_STR, false)},
[]*CXArgument{newOpPar(TYPE_I32, false)})
AddOpCode(OP_OS_CLOSE, "os.Close",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_SEEK, "os.Seek",
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_I64, false), newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_I64, false)})
AddOpCode(OP_OS_READ_F32, "os.ReadF32",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_F32, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_UI32, "os.ReadUI32",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_UI32, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_UI16, "os.ReadUI16",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_UI16, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_F32_SLICE, "os.ReadF32Slice",
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_F32, true), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_UI32_SLICE, "os.ReadUI32Slice",
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_UI32, true), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_UI16_SLICE, "os.ReadUI16Slice",
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_UI16, true), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_READ_ALL_TEXT, "os.ReadAllText",
[]*CXArgument{newOpPar(TYPE_STR, false)},
[]*CXArgument{newOpPar(TYPE_STR, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_OS_RUN, "os.Run",
[]*CXArgument{newOpPar(TYPE_STR, false), newOpPar(TYPE_I32, false), newOpPar(TYPE_I32, false), newOpPar(TYPE_STR, false)},
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_I32, false), newOpPar(TYPE_STR, false)})
AddOpCode(OP_OS_EXIT, "os.Exit",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{})
// json
AddOpCode(OP_JSON_OPEN, "json.Open",
[]*CXArgument{newOpPar(TYPE_STR, false)},
[]*CXArgument{newOpPar(TYPE_I32, false)})
AddOpCode(OP_JSON_CLOSE, "json.Close",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_MORE, "json.More",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_BOOL, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_NEXT, "json.Next",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_TYPE, "json.Type",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_DELIM, "json.Delim",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_I32, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_BOOL, "json.Bool",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_BOOL, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_F64, "json.Float64",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_F64, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_I64, "json.Int64",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_I64, false), newOpPar(TYPE_BOOL, false)})
AddOpCode(OP_JSON_TOKEN_STR, "json.Str",
[]*CXArgument{newOpPar(TYPE_I32, false)},
[]*CXArgument{newOpPar(TYPE_STR, false), newOpPar(TYPE_BOOL, false)})
// profile
AddOpCode(OP_START_CPU_PROFILE, "StartCPUProfile",
[]*CXArgument{newOpPar(TYPE_STR, false), newOpPar(TYPE_I32, false)},
[]*CXArgument{})
AddOpCode(OP_STOP_CPU_PROFILE, "StopCPUProfile",
[]*CXArgument{newOpPar(TYPE_STR, false)},
[]*CXArgument{})
opcodeHandlerFinders = append(opcodeHandlerFinders, handleBaseOpcode)
}
func handleBaseOpcode(opCode int) opcodeHandler {
switch opCode {
// time
case OP_TIME_SLEEP:
return op_time_Sleep
case OP_TIME_UNIX:
case OP_TIME_UNIX_MILLI:
return op_time_UnixMilli
case OP_TIME_UNIX_NANO:
return op_time_UnixNano
// http
// case OP_HTTP_GET:
// return op_http_get
// os
case OP_OS_GET_WORKING_DIRECTORY:
return op_os_GetWorkingDirectory
case OP_OS_OPEN:
return op_os_Open
case OP_OS_CLOSE:
return op_os_Close
case OP_OS_SEEK:
return op_os_Seek
case OP_OS_READ_F32:
return op_os_ReadF32
case OP_OS_READ_UI32:
return op_os_ReadUI32
case OP_OS_READ_UI16:
return op_os_ReadUI16
case OP_OS_READ_F32_SLICE:
return op_os_ReadF32Slice
case OP_OS_READ_UI32_SLICE:
return op_os_ReadUI32Slice
case OP_OS_READ_UI16_SLICE:
return op_os_ReadUI16Slice
case OP_OS_READ_ALL_TEXT:
return op_os_ReadAllText
case OP_OS_RUN:
return op_os_Run
case OP_OS_EXIT:
return op_os_Exit
// json
case OP_JSON_OPEN:
return opJSONOpen
case OP_JSON_CLOSE:
return opJSONClose
case OP_JSON_TOKEN_MORE:
return opJSONTokenMore
case OP_JSON_TOKEN_NEXT:
return opJSONTokenNext
case OP_JSON_TOKEN_TYPE:
return opJSONTokenType
case OP_JSON_TOKEN_DELIM:
return opJSONTokenDelim
case OP_JSON_TOKEN_BOOL:
return opJSONTokenBool
case OP_JSON_TOKEN_F64:
return opJSONTokenF64
case OP_JSON_TOKEN_I64:
return opJSONTokenI64
case OP_JSON_TOKEN_STR:
return opJSONTokenStr
// profile
case OP_START_CPU_PROFILE:
return opStartProfile
case OP_STOP_CPU_PROFILE:
return opStopProfile
}
return nil
}