Deleted Added
sdiff udiff text old ( 9508:dde110931867 ) new ( 10155:3b0bcc8c34ca )
full compact
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)
34
35 self.queue_name = queue_name
36 self.type_ast = type_ast
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)
61
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)
74
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)