qasida 2.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- forge_lang/__init__.py +4 -0
- forge_lang/allocfail.py +28 -0
- forge_lang/ast_nodes.py +345 -0
- forge_lang/checker.py +2680 -0
- forge_lang/cli.py +277 -0
- forge_lang/codegen.py +4377 -0
- forge_lang/codegen_cuda.py +94 -0
- forge_lang/codegen_rv.py +1492 -0
- forge_lang/codegen_wasm.py +992 -0
- forge_lang/compiler.py +234 -0
- forge_lang/defers.py +36 -0
- forge_lang/docgen.py +61 -0
- forge_lang/drops.py +19 -0
- forge_lang/errors.py +6 -0
- forge_lang/fixedints.py +166 -0
- forge_lang/generics.py +109 -0
- forge_lang/infer.py +391 -0
- forge_lang/lexer.py +175 -0
- forge_lang/lsp.py +173 -0
- forge_lang/mmaps.py +33 -0
- forge_lang/moves.py +29 -0
- forge_lang/never.py +105 -0
- forge_lang/opaques.py +121 -0
- forge_lang/parser.py +715 -0
- forge_lang/pins.py +29 -0
- forge_lang/pkg.py +462 -0
- forge_lang/pretty.py +276 -0
- forge_lang/ranges.py +68 -0
- forge_lang/readonly.py +109 -0
- forge_lang/registry_server.py +163 -0
- forge_lang/repl.py +125 -0
- forge_lang/sizedarrays.py +182 -0
- forge_lang/stdlib/allocator.fg +45 -0
- forge_lang/stdlib/arena.fg +50 -0
- forge_lang/stdlib/autograd.fg +182 -0
- forge_lang/stdlib/avec.fg +69 -0
- forge_lang/stdlib/base64.fg +110 -0
- forge_lang/stdlib/bench.fg +24 -0
- forge_lang/stdlib/bitset.fg +37 -0
- forge_lang/stdlib/bloom.fg +32 -0
- forge_lang/stdlib/calendar.fg +41 -0
- forge_lang/stdlib/changelog.fg +18 -0
- forge_lang/stdlib/checksum.fg +41 -0
- forge_lang/stdlib/circle.fg +19 -0
- forge_lang/stdlib/cli-table.fg +43 -0
- forge_lang/stdlib/cli.fg +71 -0
- forge_lang/stdlib/cnn.fg +98 -0
- forge_lang/stdlib/collections.fg +93 -0
- forge_lang/stdlib/color.fg +97 -0
- forge_lang/stdlib/complex.fg +36 -0
- forge_lang/stdlib/compress.fg +79 -0
- forge_lang/stdlib/cone.fg +20 -0
- forge_lang/stdlib/config.fg +56 -0
- forge_lang/stdlib/counter.fg +55 -0
- forge_lang/stdlib/cow.fg +34 -0
- forge_lang/stdlib/csv.fg +97 -0
- forge_lang/stdlib/cuboid.fg +17 -0
- forge_lang/stdlib/cylinder.fg +16 -0
- forge_lang/stdlib/dataset.fg +153 -0
- forge_lang/stdlib/dates.fg +59 -0
- forge_lang/stdlib/db.fg +70 -0
- forge_lang/stdlib/decagon.fg +15 -0
- forge_lang/stdlib/deque.fg +56 -0
- forge_lang/stdlib/difflib.fg +63 -0
- forge_lang/stdlib/digitsum.fg +22 -0
- forge_lang/stdlib/dotenv.fg +82 -0
- forge_lang/stdlib/ecs.fg +67 -0
- forge_lang/stdlib/ellipse.fg +16 -0
- forge_lang/stdlib/email-parse.fg +44 -0
- forge_lang/stdlib/embeddings.fg +85 -0
- forge_lang/stdlib/evalharness.fg +39 -0
- forge_lang/stdlib/events.fg +51 -0
- forge_lang/stdlib/factorial.fg +9 -0
- forge_lang/stdlib/fft.fg +121 -0
- forge_lang/stdlib/fib.fg +15 -0
- forge_lang/stdlib/fractions.fg +63 -0
- forge_lang/stdlib/fuzzy.fg +50 -0
- forge_lang/stdlib/gamedev.fg +26 -0
- forge_lang/stdlib/gcd.fg +14 -0
- forge_lang/stdlib/geo.fg +48 -0
- forge_lang/stdlib/gpt.fg +497 -0
- forge_lang/stdlib/gpt2.fg +520 -0
- forge_lang/stdlib/graph.fg +48 -0
- forge_lang/stdlib/heap.fg +72 -0
- forge_lang/stdlib/hemisphere.fg +15 -0
- forge_lang/stdlib/heptagon.fg +15 -0
- forge_lang/stdlib/hexagon.fg +15 -0
- forge_lang/stdlib/histogram.fg +20 -0
- forge_lang/stdlib/http_server.fg +38 -0
- forge_lang/stdlib/i18n.fg +34 -0
- forge_lang/stdlib/ical-lite.fg +55 -0
- forge_lang/stdlib/image.fg +151 -0
- forge_lang/stdlib/inference.fg +95 -0
- forge_lang/stdlib/inference_gpt2.fg +205 -0
- forge_lang/stdlib/ini.fg +79 -0
- forge_lang/stdlib/interval.fg +26 -0
- forge_lang/stdlib/json.fg +18 -0
- forge_lang/stdlib/lifetime.fg +60 -0
- forge_lang/stdlib/log.fg +51 -0
- forge_lang/stdlib/lru.fg +47 -0
- forge_lang/stdlib/map.fg +44 -0
- forge_lang/stdlib/markdown.fg +100 -0
- forge_lang/stdlib/mathex.fg +33 -0
- forge_lang/stdlib/matrix2.fg +18 -0
- forge_lang/stdlib/metrics.fg +125 -0
- forge_lang/stdlib/minmax.fg +37 -0
- forge_lang/stdlib/ml.fg +54 -0
- forge_lang/stdlib/ml_classical.fg +245 -0
- forge_lang/stdlib/mock.fg +20 -0
- forge_lang/stdlib/money.fg +25 -0
- forge_lang/stdlib/movingavg.fg +37 -0
- forge_lang/stdlib/nlp.fg +90 -0
- forge_lang/stdlib/nn.fg +510 -0
- forge_lang/stdlib/nonagon.fg +15 -0
- forge_lang/stdlib/numpy.fg +174 -0
- forge_lang/stdlib/octagon.fg +15 -0
- forge_lang/stdlib/octahedron.fg +15 -0
- forge_lang/stdlib/optimization.fg +46 -0
- forge_lang/stdlib/option.fg +23 -0
- forge_lang/stdlib/pagination.fg +18 -0
- forge_lang/stdlib/palindrome.fg +16 -0
- forge_lang/stdlib/pandas.fg +104 -0
- forge_lang/stdlib/parallelogram.fg +16 -0
- forge_lang/stdlib/password.fg +20 -0
- forge_lang/stdlib/pathlib.fg +78 -0
- forge_lang/stdlib/pentagon.fg +15 -0
- forge_lang/stdlib/physics2d.fg +41 -0
- forge_lang/stdlib/plot.fg +50 -0
- forge_lang/stdlib/polynomials.fg +59 -0
- forge_lang/stdlib/preprocess.fg +175 -0
- forge_lang/stdlib/prime.fg +21 -0
- forge_lang/stdlib/prism.fg +17 -0
- forge_lang/stdlib/profiler.fg +54 -0
- forge_lang/stdlib/progress.fg +28 -0
- forge_lang/stdlib/property.fg +29 -0
- forge_lang/stdlib/pyramid.fg +16 -0
- forge_lang/stdlib/queue.fg +31 -0
- forge_lang/stdlib/rag.fg +36 -0
- forge_lang/stdlib/rand.fg +15 -0
- forge_lang/stdlib/ratelimit.fg +24 -0
- forge_lang/stdlib/rc.fg +26 -0
- forge_lang/stdlib/rect.fg +20 -0
- forge_lang/stdlib/regex.fg +247 -0
- forge_lang/stdlib/result.fg +20 -0
- forge_lang/stdlib/retry-backoff.fg +36 -0
- forge_lang/stdlib/rhombus.fg +16 -0
- forge_lang/stdlib/rl.fg +27 -0
- forge_lang/stdlib/rnn.fg +161 -0
- forge_lang/stdlib/score.fg +33 -0
- forge_lang/stdlib/search.fg +27 -0
- forge_lang/stdlib/sector.fg +16 -0
- forge_lang/stdlib/semver.fg +58 -0
- forge_lang/stdlib/set.fg +43 -0
- forge_lang/stdlib/sklearn.fg +259 -0
- forge_lang/stdlib/slice.fg +37 -0
- forge_lang/stdlib/slugify.fg +124 -0
- forge_lang/stdlib/sort.fg +35 -0
- forge_lang/stdlib/sphere.fg +15 -0
- forge_lang/stdlib/sql.fg +152 -0
- forge_lang/stdlib/stack.fg +31 -0
- forge_lang/stdlib/statistics.fg +74 -0
- forge_lang/stdlib/stats.fg +78 -0
- forge_lang/stdlib/strings.fg +35 -0
- forge_lang/stdlib/svg.fg +70 -0
- forge_lang/stdlib/table.fg +71 -0
- forge_lang/stdlib/tempfile.fg +9 -0
- forge_lang/stdlib/template.fg +56 -0
- forge_lang/stdlib/tensor.fg +337 -0
- forge_lang/stdlib/tensor_autograd.fg +799 -0
- forge_lang/stdlib/test.fg +42 -0
- forge_lang/stdlib/tetrahedron.fg +15 -0
- forge_lang/stdlib/textwrap.fg +43 -0
- forge_lang/stdlib/tfidf.fg +55 -0
- forge_lang/stdlib/tgt.fg +311 -0
- forge_lang/stdlib/timers.fg +22 -0
- forge_lang/stdlib/timezone.fg +32 -0
- forge_lang/stdlib/tokenizer.fg +206 -0
- forge_lang/stdlib/toml.fg +133 -0
- forge_lang/stdlib/torus.fg +16 -0
- forge_lang/stdlib/trapezoid.fg +17 -0
- forge_lang/stdlib/triangle.fg +20 -0
- forge_lang/stdlib/units.fg +43 -0
- forge_lang/stdlib/url.fg +221 -0
- forge_lang/stdlib/uuid.fg +59 -0
- forge_lang/stdlib/vec2.fg +20 -0
- forge_lang/stdlib/vec3.fg +21 -0
- forge_lang/stdlib/vision.fg +55 -0
- forge_lang/stdlib/wav.fg +54 -0
- forge_lang/stdlib/xml.fg +108 -0
- forge_lang/traits.py +10 -0
- forge_lang/tuples.py +165 -0
- forge_lang/unions.py +136 -0
- forge_lang/weaks.py +31 -0
- forge_lang/wit.py +336 -0
- qasida-2.0.0.dist-info/METADATA +538 -0
- qasida-2.0.0.dist-info/RECORD +200 -0
- qasida-2.0.0.dist-info/WHEEL +5 -0
- qasida-2.0.0.dist-info/entry_points.txt +2 -0
- qasida-2.0.0.dist-info/licenses/LICENSE +21 -0
- qasida-2.0.0.dist-info/top_level.txt +1 -0
forge_lang/__init__.py
ADDED
forge_lang/allocfail.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"""Fallible allocation (Top-500 #36) in a program, for backend
|
|
2
|
+
gates. A program uses try_alloc when any call is to try_alloc.
|
|
3
|
+
try_alloc is native-only in v1 (it uses calloc on the hosted
|
|
4
|
+
runtime); big32 and WASM reject try_alloc programs with a
|
|
5
|
+
named error.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import forge_lang.ast_nodes as A
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def _walk(node):
|
|
12
|
+
if isinstance(node, A.Call) and node.name == "try_alloc":
|
|
13
|
+
return True
|
|
14
|
+
if isinstance(node, (list, tuple)):
|
|
15
|
+
return any(_walk(x) for x in node)
|
|
16
|
+
if hasattr(node, "__dict__"):
|
|
17
|
+
return any(_walk(v) for v in vars(node).values())
|
|
18
|
+
return False
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def uses_try_alloc(program):
|
|
22
|
+
"""True when any function body calls try_alloc."""
|
|
23
|
+
for fn in getattr(program, "funcs", []) or []:
|
|
24
|
+
if getattr(fn, "type_params", None):
|
|
25
|
+
continue
|
|
26
|
+
if getattr(fn, "body", None) is not None and _walk(fn.body):
|
|
27
|
+
return True
|
|
28
|
+
return False
|
forge_lang/ast_nodes.py
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@dataclass
|
|
5
|
+
class Program:
|
|
6
|
+
imports: list # [path string]
|
|
7
|
+
funcs: list
|
|
8
|
+
structs: list = None # [StructDef]; None for old call sites
|
|
9
|
+
enums: list = None # [EnumDef]
|
|
10
|
+
traits: list = None # [TraitDef]
|
|
11
|
+
impls: list = None # [ImplDef]
|
|
12
|
+
aliases: list = None # [AliasDef]
|
|
13
|
+
newtypes: list = None # [NewtypeDef]
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class StructDef:
|
|
18
|
+
name: str
|
|
19
|
+
fields: list # [(name, type)]
|
|
20
|
+
line: int
|
|
21
|
+
col: int
|
|
22
|
+
type_params: list = None # [param name] for generic structs
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class EnumDef:
|
|
27
|
+
name: str
|
|
28
|
+
variants: list # [variant name]
|
|
29
|
+
line: int
|
|
30
|
+
col: int
|
|
31
|
+
type_params: list = None
|
|
32
|
+
variant_payloads: dict = None # variant -> payload type or None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@dataclass
|
|
36
|
+
class FuncDef:
|
|
37
|
+
name: str
|
|
38
|
+
params: list
|
|
39
|
+
ret: str
|
|
40
|
+
body: object
|
|
41
|
+
line: int
|
|
42
|
+
col: int
|
|
43
|
+
is_extern: bool = False
|
|
44
|
+
type_params: list = None # [param name] for generic functions
|
|
45
|
+
# Source file this function was defined in, stamped
|
|
46
|
+
# by compiler.load_program ("" for compile_source,
|
|
47
|
+
# which has no file). Powers --debug #line output.
|
|
48
|
+
file: str = ""
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@dataclass
|
|
52
|
+
class Match:
|
|
53
|
+
expr: object
|
|
54
|
+
arms: list # [(pattern, Block)]; pattern is a variant name or "_"
|
|
55
|
+
line: int
|
|
56
|
+
col: int
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
@dataclass
|
|
60
|
+
class Spawn:
|
|
61
|
+
call: object # Call node
|
|
62
|
+
line: int
|
|
63
|
+
col: int
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@dataclass
|
|
67
|
+
class Scope:
|
|
68
|
+
body: object # Block node: tasks spawned inside are joined at its end
|
|
69
|
+
line: int
|
|
70
|
+
col: int
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
@dataclass
|
|
74
|
+
class Try:
|
|
75
|
+
expr: object
|
|
76
|
+
line: int
|
|
77
|
+
col: int
|
|
78
|
+
kind: str = None # "Option" or "Result", set by checker
|
|
79
|
+
value_type: str = None
|
|
80
|
+
ret_type: str = None
|
|
81
|
+
error_type: str = None
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass
|
|
85
|
+
class Block:
|
|
86
|
+
stmts: list
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@dataclass
|
|
90
|
+
class Let:
|
|
91
|
+
name: str
|
|
92
|
+
mutable: bool
|
|
93
|
+
ann: object
|
|
94
|
+
expr: object
|
|
95
|
+
line: int
|
|
96
|
+
col: int
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@dataclass
|
|
100
|
+
class Assign:
|
|
101
|
+
name: str
|
|
102
|
+
expr: object
|
|
103
|
+
line: int
|
|
104
|
+
col: int
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
@dataclass
|
|
108
|
+
class IndexAssign:
|
|
109
|
+
base: object # Index node whose base is a Var, a field, or another index
|
|
110
|
+
expr: object
|
|
111
|
+
line: int
|
|
112
|
+
col: int
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
@dataclass
|
|
116
|
+
class If:
|
|
117
|
+
cond: object
|
|
118
|
+
then: object
|
|
119
|
+
els: object
|
|
120
|
+
line: int
|
|
121
|
+
col: int
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@dataclass
|
|
125
|
+
class While:
|
|
126
|
+
cond: object
|
|
127
|
+
body: object
|
|
128
|
+
line: int
|
|
129
|
+
col: int
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
@dataclass
|
|
133
|
+
class For:
|
|
134
|
+
name: str
|
|
135
|
+
expr: object
|
|
136
|
+
body: object
|
|
137
|
+
line: int
|
|
138
|
+
col: int
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
@dataclass
|
|
142
|
+
class Break:
|
|
143
|
+
line: int
|
|
144
|
+
col: int
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@dataclass
|
|
148
|
+
class Continue:
|
|
149
|
+
line: int
|
|
150
|
+
col: int
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
@dataclass
|
|
154
|
+
class TraitDef:
|
|
155
|
+
name: str
|
|
156
|
+
methods: list # [(name, params, ret, line, col)]; signatures only
|
|
157
|
+
line: int
|
|
158
|
+
col: int
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
@dataclass
|
|
162
|
+
class ImplDef:
|
|
163
|
+
trait: object # trait name, or None for an inherent impl
|
|
164
|
+
struct: str
|
|
165
|
+
methods: list # [FuncDef], each with the receiver as first param
|
|
166
|
+
line: int
|
|
167
|
+
col: int
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
@dataclass
|
|
171
|
+
class AliasDef:
|
|
172
|
+
name: str
|
|
173
|
+
target: str # a type spelling, e.g. "int", "[int]", "Stack<int>"
|
|
174
|
+
line: int
|
|
175
|
+
col: int
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
@dataclass
|
|
179
|
+
class NewtypeDef:
|
|
180
|
+
name: str
|
|
181
|
+
target: str # the underlying type; the newtype is DISTINCT from it
|
|
182
|
+
line: int
|
|
183
|
+
col: int
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
@dataclass
|
|
187
|
+
class Return:
|
|
188
|
+
expr: object
|
|
189
|
+
line: int
|
|
190
|
+
col: int
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@dataclass
|
|
194
|
+
class ExprStmt:
|
|
195
|
+
expr: object
|
|
196
|
+
line: int
|
|
197
|
+
col: int
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
@dataclass
|
|
201
|
+
class IntLit:
|
|
202
|
+
value: int
|
|
203
|
+
line: int
|
|
204
|
+
col: int
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
@dataclass
|
|
208
|
+
class FloatLit:
|
|
209
|
+
value: float
|
|
210
|
+
line: int
|
|
211
|
+
col: int
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
@dataclass
|
|
215
|
+
class StrLit:
|
|
216
|
+
value: str
|
|
217
|
+
line: int
|
|
218
|
+
col: int
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
@dataclass
|
|
222
|
+
class BoolLit:
|
|
223
|
+
value: bool
|
|
224
|
+
line: int
|
|
225
|
+
col: int
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
@dataclass
|
|
229
|
+
class ArrayLit:
|
|
230
|
+
elems: list
|
|
231
|
+
line: int
|
|
232
|
+
col: int
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
@dataclass
|
|
236
|
+
class TupleLit:
|
|
237
|
+
elems: list
|
|
238
|
+
line: int
|
|
239
|
+
col: int
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
@dataclass
|
|
243
|
+
class StructLit:
|
|
244
|
+
name: str
|
|
245
|
+
fields: list # [(field_name, expr)]
|
|
246
|
+
line: int
|
|
247
|
+
col: int
|
|
248
|
+
concrete_type: str = None # set by checker: base name or "Base<args>"
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
@dataclass
|
|
252
|
+
class FieldAccess:
|
|
253
|
+
base: object
|
|
254
|
+
field: str
|
|
255
|
+
line: int
|
|
256
|
+
col: int
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
@dataclass
|
|
260
|
+
class MethodCall:
|
|
261
|
+
base: object
|
|
262
|
+
method: str
|
|
263
|
+
args: list
|
|
264
|
+
line: int
|
|
265
|
+
col: int
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
@dataclass
|
|
269
|
+
class FieldAssign:
|
|
270
|
+
target: object # FieldAccess node
|
|
271
|
+
expr: object
|
|
272
|
+
line: int
|
|
273
|
+
col: int
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
@dataclass
|
|
277
|
+
class Var:
|
|
278
|
+
name: str
|
|
279
|
+
line: int
|
|
280
|
+
col: int
|
|
281
|
+
|
|
282
|
+
|
|
283
|
+
@dataclass
|
|
284
|
+
class Call:
|
|
285
|
+
name: str
|
|
286
|
+
args: list
|
|
287
|
+
line: int
|
|
288
|
+
col: int
|
|
289
|
+
concrete_type: str = None # set by checker for enum constructions
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
@dataclass
|
|
293
|
+
class Index:
|
|
294
|
+
base: object
|
|
295
|
+
index: object
|
|
296
|
+
line: int
|
|
297
|
+
col: int
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
@dataclass
|
|
301
|
+
class TupleIndex:
|
|
302
|
+
base: object
|
|
303
|
+
index: int
|
|
304
|
+
line: int
|
|
305
|
+
col: int
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
@dataclass
|
|
309
|
+
class RangeLit:
|
|
310
|
+
start: object
|
|
311
|
+
end: object
|
|
312
|
+
line: int
|
|
313
|
+
col: int
|
|
314
|
+
|
|
315
|
+
|
|
316
|
+
@dataclass
|
|
317
|
+
class Defer:
|
|
318
|
+
call: object
|
|
319
|
+
line: int
|
|
320
|
+
col: int
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
@dataclass
|
|
324
|
+
class Cast:
|
|
325
|
+
expr: object
|
|
326
|
+
target: str
|
|
327
|
+
line: int
|
|
328
|
+
col: int
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
@dataclass
|
|
332
|
+
class BinOp:
|
|
333
|
+
op: str
|
|
334
|
+
left: object
|
|
335
|
+
right: object
|
|
336
|
+
line: int
|
|
337
|
+
col: int
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
@dataclass
|
|
341
|
+
class UnaryOp:
|
|
342
|
+
op: str
|
|
343
|
+
expr: object
|
|
344
|
+
line: int
|
|
345
|
+
col: int
|