AST function factory for binomial operations, such as :code:`+,-,*,` etc. ast.Binop fields are :code:`(left,op,right)`
(self: NumExpr, node: ast.AST)
| 1234 | return outputRegister |
| 1235 | |
| 1236 | def _binop(self: NumExpr, node: ast.AST) -> NumReg: |
| 1237 | ''' |
| 1238 | AST function factory for binomial operations, such as :code:`+,-,*,` etc. |
| 1239 | |
| 1240 | ast.Binop fields are :code:`(left,op,right)` |
| 1241 | ''' |
| 1242 | # info('$ast.Binop: %s'%node.op) |
| 1243 | # (left,op,right) |
| 1244 | leftRegister = _ASTAssembler[type(node.left)](self, node.left) |
| 1245 | rightRegister = _ASTAssembler[type(node.right)](self, node.right) |
| 1246 | |
| 1247 | # Check to see if a cast is required |
| 1248 | leftRegister, rightRegister = self._cast2(leftRegister, rightRegister) |
| 1249 | |
| 1250 | # Format: (opCode, lib, left_register, right_register) |
| 1251 | try: |
| 1252 | opWord, self.assignDChar = OPTABLE[(type(node.op), self.lib, leftRegister.dchar, rightRegister.dchar)] |
| 1253 | except KeyError as e: |
| 1254 | if leftRegister.dchar == None or rightRegister.dchar == None: |
| 1255 | raise ValueError( |
| 1256 | 'Binop did not find arrays: left: {}, right: {}. Possibly a stack depth issue'.format( |
| 1257 | leftRegister.name, rightRegister.name)) |
| 1258 | else: |
| 1259 | raise e |
| 1260 | |
| 1261 | # Make/reuse a temporary for output |
| 1262 | outputRegister = self._transmit2(leftRegister, rightRegister) |
| 1263 | |
| 1264 | #_messages.append( 'BinOp: %s %s %s' %( node.left, type(node.op), node.right ) ) |
| 1265 | self._codeStream.write(b''.join((opWord, outputRegister.token, leftRegister.token, rightRegister.token, _NULL_REG ))) |
| 1266 | |
| 1267 | # Release the leftRegister and rightRegister if they are temporaries and weren't reused. |
| 1268 | self._releaseTemp(leftRegister, outputRegister) |
| 1269 | self._releaseTemp(rightRegister, outputRegister) |
| 1270 | return outputRegister |
| 1271 | |
| 1272 | def _call(self: NumExpr, node: ast.AST) -> NumReg: |
| 1273 | ''' |
no test coverage detected
searching dependent graphs…