Skip to content

Commit ac9ca13

Browse files
committed
compiler: del and raise
1 parent de8f9c5 commit ac9ca13

File tree

3 files changed

+111
-4
lines changed

3 files changed

+111
-4
lines changed

compile/compile.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,9 @@ func (c *compiler) Stmt(stmt ast.Stmt) {
247247
panic("FIXME compile: Return not implemented")
248248
case *ast.Delete:
249249
// Targets []Expr
250-
panic("FIXME compile: Delete not implemented")
250+
for _, target := range node.Targets {
251+
c.Expr(target)
252+
}
251253
case *ast.Assign:
252254
// Targets []Expr
253255
// Value Expr
@@ -325,7 +327,16 @@ func (c *compiler) Stmt(stmt ast.Stmt) {
325327
case *ast.Raise:
326328
// Exc Expr
327329
// Cause Expr
328-
panic("FIXME compile: Raise not implemented")
330+
args := uint32(0)
331+
if node.Exc != nil {
332+
args++
333+
c.Expr(node.Exc)
334+
if node.Cause != nil {
335+
args++
336+
c.Expr(node.Cause)
337+
}
338+
}
339+
c.OpArg(vm.RAISE_VARARGS, args)
329340
case *ast.Try:
330341
// Body []Stmt
331342
// Handlers []*ExceptHandler
@@ -619,7 +630,8 @@ func (c *compiler) Expr(expr ast.Expr) {
619630
c.OpArg(vm.LOAD_NAME, c.Name(node.Id))
620631
case ast.Store:
621632
c.OpArg(vm.STORE_NAME, c.Name(node.Id))
622-
// case ast.Del:
633+
case ast.Del:
634+
c.OpArg(vm.DELETE_NAME, c.Name(node.Id))
623635
// case ast.AugLoad:
624636
// case ast.AugStore:
625637
// case ast.Param:

compile/compile_data_test.go

+86-1
Original file line numberDiff line numberDiff line change
@@ -1149,7 +1149,7 @@ var compileTestData = []struct {
11491149
Name: "<module>",
11501150
Firstlineno: 1,
11511151
Lnotab: "",
1152-
}, " 1 0 LOAD_CONST 0 (<code object <lambda> at 0x7fa8931d3e40, file \"<string>\", line 1>)\n 3 LOAD_CONST 1 ('<lambda>')\n 6 MAKE_FUNCTION 0\n 9 RETURN_VALUE\n"},
1152+
}, " 1 0 LOAD_CONST 0 (<code object <lambda> at 0x7fd0bed8ee40, file \"<string>\", line 1>)\n 3 LOAD_CONST 1 ('<lambda>')\n 6 MAKE_FUNCTION 0\n 9 RETURN_VALUE\n"},
11531153
{"pass", "exec", &py.Code{
11541154
Argcount: 0,
11551155
Kwonlyargcount: 0,
@@ -1490,4 +1490,89 @@ var compileTestData = []struct {
14901490
Firstlineno: 1,
14911491
Lnotab: "",
14921492
}, " 1 0 LOAD_NAME 0 (a)\n 3 LOAD_CONST 0 (1)\n 6 INPLACE_FLOOR_DIVIDE\n 7 STORE_NAME 0 (a)\n 10 LOAD_CONST 1 (None)\n 13 RETURN_VALUE\n"},
1493+
{"del a", "exec", &py.Code{
1494+
Argcount: 0,
1495+
Kwonlyargcount: 0,
1496+
Nlocals: 0,
1497+
Stacksize: 1,
1498+
Flags: 64,
1499+
Code: "\x5b\x00\x00\x64\x00\x00\x53",
1500+
Consts: []py.Object{py.None},
1501+
Names: []string{"a"},
1502+
Varnames: []string{},
1503+
Freevars: []string{},
1504+
Cellvars: []string{},
1505+
Filename: "<string>",
1506+
Name: "<module>",
1507+
Firstlineno: 1,
1508+
Lnotab: "",
1509+
}, " 1 0 DELETE_NAME 0 (a)\n 3 LOAD_CONST 0 (None)\n 6 RETURN_VALUE\n"},
1510+
{"del a, b", "exec", &py.Code{
1511+
Argcount: 0,
1512+
Kwonlyargcount: 0,
1513+
Nlocals: 0,
1514+
Stacksize: 1,
1515+
Flags: 64,
1516+
Code: "\x5b\x00\x00\x5b\x01\x00\x64\x00\x00\x53",
1517+
Consts: []py.Object{py.None},
1518+
Names: []string{"a", "b"},
1519+
Varnames: []string{},
1520+
Freevars: []string{},
1521+
Cellvars: []string{},
1522+
Filename: "<string>",
1523+
Name: "<module>",
1524+
Firstlineno: 1,
1525+
Lnotab: "",
1526+
}, " 1 0 DELETE_NAME 0 (a)\n 3 DELETE_NAME 1 (b)\n 6 LOAD_CONST 0 (None)\n 9 RETURN_VALUE\n"},
1527+
{"raise", "exec", &py.Code{
1528+
Argcount: 0,
1529+
Kwonlyargcount: 0,
1530+
Nlocals: 0,
1531+
Stacksize: 1,
1532+
Flags: 64,
1533+
Code: "\x82\x00\x00\x64\x00\x00\x53",
1534+
Consts: []py.Object{py.None},
1535+
Names: []string{},
1536+
Varnames: []string{},
1537+
Freevars: []string{},
1538+
Cellvars: []string{},
1539+
Filename: "<string>",
1540+
Name: "<module>",
1541+
Firstlineno: 1,
1542+
Lnotab: "",
1543+
}, " 1 0 RAISE_VARARGS 0\n 3 LOAD_CONST 0 (None)\n 6 RETURN_VALUE\n"},
1544+
{"raise a", "exec", &py.Code{
1545+
Argcount: 0,
1546+
Kwonlyargcount: 0,
1547+
Nlocals: 0,
1548+
Stacksize: 1,
1549+
Flags: 64,
1550+
Code: "\x65\x00\x00\x82\x01\x00\x64\x00\x00\x53",
1551+
Consts: []py.Object{py.None},
1552+
Names: []string{"a"},
1553+
Varnames: []string{},
1554+
Freevars: []string{},
1555+
Cellvars: []string{},
1556+
Filename: "<string>",
1557+
Name: "<module>",
1558+
Firstlineno: 1,
1559+
Lnotab: "",
1560+
}, " 1 0 LOAD_NAME 0 (a)\n 3 RAISE_VARARGS 1\n 6 LOAD_CONST 0 (None)\n 9 RETURN_VALUE\n"},
1561+
{"raise a from b", "exec", &py.Code{
1562+
Argcount: 0,
1563+
Kwonlyargcount: 0,
1564+
Nlocals: 0,
1565+
Stacksize: 2,
1566+
Flags: 64,
1567+
Code: "\x65\x00\x00\x65\x01\x00\x82\x02\x00\x64\x00\x00\x53",
1568+
Consts: []py.Object{py.None},
1569+
Names: []string{"a", "b"},
1570+
Varnames: []string{},
1571+
Freevars: []string{},
1572+
Cellvars: []string{},
1573+
Filename: "<string>",
1574+
Name: "<module>",
1575+
Firstlineno: 1,
1576+
Lnotab: "",
1577+
}, " 1 0 LOAD_NAME 0 (a)\n 3 LOAD_NAME 1 (b)\n 6 RAISE_VARARGS 2\n 9 LOAD_CONST 0 (None)\n 12 RETURN_VALUE\n"},
14931578
}

compile/make_compile_test.py

+10
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,16 @@
122122
('''a&=1''', "exec"),
123123
('''a//=1''', "exec"),
124124
# FIXME ('''a[1]+=1''', "exec"),
125+
# delete
126+
('''del a''', "exec"),
127+
('''del a, b''', "exec"),
128+
# FIXME ('''del a[1]''', "exec"),
129+
# raise
130+
('''raise''', "exec"),
131+
('''raise a''', "exec"),
132+
('''raise a from b''', "exec"),
133+
134+
125135
]
126136

127137
def string(s):

0 commit comments

Comments
 (0)