1# Copyright (c) 1999-2008 Mark D. Hill and David A. Wood 2# Copyright (c) 2009 The Hewlett-Packard Development Company 3# All rights reserved. 4# 5# Redistribution and use in source and binary forms, with or without 6# modification, are permitted provided that the following conditions are 7# met: redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer; --- 15 unchanged lines hidden (view full) --- 24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 28from slicc.ast.StatementAST import StatementAST 29from slicc.symbols import Var 30 31class PeekStatementAST(StatementAST): |
32 def __init__(self, slicc, queue_name, type_ast, pairs, statements, method): 33 super(PeekStatementAST, self).__init__(slicc, pairs) |
34 35 self.queue_name = queue_name 36 self.type_ast = type_ast 37 self.statements = statements 38 self.method = method 39 40 def __repr__(self): 41 return "[PeekStatementAST: %r queue_name: %r type: %r %r]" % \ --- 16 unchanged lines hidden (view full) --- 58 mtid = msg_type.ident 59 qcode = self.queue_name.var.code 60 code(''' 61{ 62 const $mtid* in_msg_ptr; 63 in_msg_ptr = dynamic_cast<const $mtid *>(($qcode).${{self.method}}()); 64 assert(in_msg_ptr != NULL); 65''') |
66 if self.pairs.has_key("block_on"): 67 address_field = self.pairs['block_on'] 68 code(''' 69 if ( (m_is_blocking == true) && 70 (m_block_map.count(in_msg_ptr->m_$address_field) == 1) ) { 71 if (m_block_map[in_msg_ptr->m_$address_field] != &$qcode) { 72 $qcode.delayHead(); 73 continue; 74 } 75 } 76 ''') |
77 78 # The other statements 79 self.statements.generate(code, return_type) 80 self.symtab.popFrame() 81 code("}") 82 83 def findResources(self, resources): 84 self.statements.findResources(resources) |