EnqueueStatementAST.py (9508:dde110931867) | EnqueueStatementAST.py (10155:3b0bcc8c34ca) |
---|---|
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): | 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, pairs, statements): 33 super(EnqueueStatementAST, self).__init__(slicc, pairs) | 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 | 34 35 self.queue_name = queue_name 36 self.type_ast = type_ast |
37 self.latexpr = lexpr |
|
37 self.statements = statements 38 39 def __repr__(self): 40 return "[EnqueueStatementAst: %s %s %s]" % \ 41 (self.queue_name, self.type_ast.ident, self.statements) 42 43 def generate(self, code, return_type): 44 code("{") --- 8 unchanged lines hidden (view full) --- 53 self.symtab.newSymbol(v) 54 55 # Declare message 56 code("${{msg_type.ident}} *out_msg = "\ 57 "new ${{msg_type.ident}}(clockEdge());") 58 59 # The other statements 60 t = self.statements.generate(code, None) | 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) |
61 | |
62 self.queue_name.assertType("OutPort") 63 | 62 self.queue_name.assertType("OutPort") 63 |
64 args = [ "out_msg" ] 65 if "latency" in self: 66 latency = self["latency"] 67 try: 68 # see if this is an integer 69 latency = int(latency) 70 args.append("Cycles(%s)" % latency) 71 except ValueError: 72 # if not, it should be a member 73 args.append("m_%s" % latency) | 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);") |
74 | 70 |
75 args = ", ".join(args) 76 code('(${{self.queue_name.var.code}}).enqueue($args);') 77 78 | |
79 # End scope 80 self.symtab.popFrame() 81 code.dedent() 82 code("}") 83 84 def findResources(self, resources): 85 var = self.queue_name.var 86 res_count = int(resources.get(var, 0)) 87 resources[var] = str(res_count + 1) | 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) |