From 47500154234f254dd6896a30468f66ed827eee71 Mon Sep 17 00:00:00 2001 From: Darryl Pogue Date: Wed, 5 Jan 2011 22:15:22 -0800 Subject: [PATCH] Support storing slices. --- ASTree.cpp | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/ASTree.cpp b/ASTree.cpp index 97263d9..0772a6f 100644 --- a/ASTree.cpp +++ b/ASTree.cpp @@ -669,6 +669,17 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) }*/ } break; + case Pyc::ROT_TWO: + { + PycRef one = stack.top(); + stack.pop(); + PycRef two = stack.top(); + stack.pop(); + + stack.push(one); + stack.push(two); + } + break; case Pyc::ROT_THREE: { PycRef one = stack.top(); @@ -807,6 +818,54 @@ PycRef BuildFromCode(PycRef code, PycModule* mod) curblock->append(new ASTStore(value, name)); } break; + case Pyc::STORE_SLICE_0: + { + PycRef dest = stack.top(); + stack.pop(); + PycRef value = stack.top(); + stack.pop(); + + curblock->append(new ASTStore(value, new ASTSubscr(dest, new ASTSlice(ASTSlice::SLICE0)))); + } + break; + case Pyc::STORE_SLICE_1: + { + PycRef upper = stack.top(); + stack.pop(); + PycRef dest = stack.top(); + stack.pop(); + PycRef value = stack.top(); + stack.pop(); + + curblock->append(new ASTStore(value, new ASTSubscr(dest, new ASTSlice(ASTSlice::SLICE1, upper)))); + } + break; + case Pyc::STORE_SLICE_2: + { + PycRef lower = stack.top(); + stack.pop(); + PycRef dest = stack.top(); + stack.pop(); + PycRef value = stack.top(); + stack.pop(); + + curblock->append(new ASTStore(value, new ASTSubscr(dest, new ASTSlice(ASTSlice::SLICE2, Node_NULL, lower)))); + } + break; + case Pyc::STORE_SLICE_3: + { + PycRef lower = stack.top(); + stack.pop(); + PycRef upper = stack.top(); + stack.pop(); + PycRef dest = stack.top(); + stack.pop(); + PycRef value = stack.top(); + stack.pop(); + + curblock->append(new ASTStore(value, new ASTSubscr(dest, new ASTSlice(ASTSlice::SLICE3, upper, lower)))); + } + break; case Pyc::STORE_SUBSCR: { PycRef subscr = stack.top();