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 EnqueueStatementAST(StatementAST): |
32 def __init__(self, slicc, queue_name, type_ast, lexpr, statements): 33 super(EnqueueStatementAST, self).__init__(slicc) |
34 35 self.queue_name = queue_name 36 self.type_ast = type_ast |
37 self.latexpr = lexpr |
38 self.statements = statements 39 40 def __repr__(self): 41 return "[EnqueueStatementAst: %s %s %s]" % \ 42 (self.queue_name, self.type_ast.ident, self.statements) 43 44 def generate(self, code, return_type): 45 code("{") --- 8 unchanged lines hidden (view full) --- 54 self.symtab.newSymbol(v) 55 56 # Declare message 57 code("${{msg_type.ident}} *out_msg = "\ 58 "new ${{msg_type.ident}}(clockEdge());") 59 60 # The other statements 61 t = self.statements.generate(code, None) |
62 self.queue_name.assertType("OutPort") 63 |
64 if self.latexpr != None: 65 ret_type, rcode = self.latexpr.inline(True) 66 code("(${{self.queue_name.var.code}}).enqueue(" \ 67 "out_msg, Cycles($rcode));") 68 else: 69 code("(${{self.queue_name.var.code}}).enqueue(out_msg);") |
70 |
71 # End scope 72 self.symtab.popFrame() 73 code.dedent() 74 code("}") 75 76 def findResources(self, resources): 77 var = self.queue_name.var 78 res_count = int(resources.get(var, 0)) 79 resources[var] = str(res_count + 1) |