FuncDeclAST.py (10984:a86f453a7caa) | FuncDeclAST.py (11030:17240f381d6a) |
---|---|
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; --- 31 unchanged lines hidden (view full) --- 40 def __repr__(self): 41 return "[FuncDecl: %s]" % self.ident 42 43 def files(self, parent=None): 44 return set() 45 46 def generate(self, parent = None): 47 types = [] | 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; --- 31 unchanged lines hidden (view full) --- 40 def __repr__(self): 41 return "[FuncDecl: %s]" % self.ident 42 43 def files(self, parent=None): 44 return set() 45 46 def generate(self, parent = None): 47 types = [] |
48 params = [] | 48 proto_params = [] 49 body_params = [] 50 default_count = 0 |
49 void_type = self.symtab.find("void", Type) 50 51 # Generate definition code 52 self.symtab.pushFrame() 53 54 # Lookup return type 55 return_type = self.return_type.type 56 57 # Generate function header 58 for formal in self.formals: 59 # Lookup parameter types 60 try: | 51 void_type = self.symtab.find("void", Type) 52 53 # Generate definition code 54 self.symtab.pushFrame() 55 56 # Lookup return type 57 return_type = self.return_type.type 58 59 # Generate function header 60 for formal in self.formals: 61 # Lookup parameter types 62 try: |
61 type, ident = formal.generate() | 63 type, proto, body, default = formal.generate() |
62 types.append(type) | 64 types.append(type) |
63 params.append(ident) | 65 proto_params.append(proto) 66 body_params.append(body) 67 if default: 68 default_count += 1 |
64 65 except AttributeError: 66 types.append(formal.type) | 69 70 except AttributeError: 71 types.append(formal.type) |
67 params.append(None) | 72 proto_params.append(None) 73 body_params.append(None) |
68 69 body = self.slicc.codeFormatter() 70 if self.statements is None: 71 self["external"] = "yes" 72 else: 73 rtype = self.statements.generate(body, return_type) 74 75 self.symtab.popFrame() --- 6 unchanged lines hidden (view full) --- 82 if isinstance(arg, FormalParamAST): 83 arg_name = arg.type_ast.ident 84 else: 85 arg_name = arg 86 func_name_args += "_" + str(arg_name) 87 88 machine = self.state_machine 89 func = Func(self.symtab, func_name_args, self.ident, self.location, | 74 75 body = self.slicc.codeFormatter() 76 if self.statements is None: 77 self["external"] = "yes" 78 else: 79 rtype = self.statements.generate(body, return_type) 80 81 self.symtab.popFrame() --- 6 unchanged lines hidden (view full) --- 88 if isinstance(arg, FormalParamAST): 89 arg_name = arg.type_ast.ident 90 else: 91 arg_name = arg 92 func_name_args += "_" + str(arg_name) 93 94 machine = self.state_machine 95 func = Func(self.symtab, func_name_args, self.ident, self.location, |
90 return_type, types, params, str(body), self.pairs) | 96 return_type, types, proto_params, 97 body_params, str(body), self.pairs, default_count) |
91 92 if parent is not None: 93 if not parent.addFunc(func): 94 self.error("Duplicate method: %s:%s()" % (parent, self.ident)) 95 func.class_name = parent.c_ident 96 97 elif machine is not None: 98 machine.addFunc(func) 99 func.isInternalMachineFunc = True 100 func.class_name = "%s_Controller" % machine 101 else: 102 self.symtab.newSymbol(func) | 98 99 if parent is not None: 100 if not parent.addFunc(func): 101 self.error("Duplicate method: %s:%s()" % (parent, self.ident)) 102 func.class_name = parent.c_ident 103 104 elif machine is not None: 105 machine.addFunc(func) 106 func.isInternalMachineFunc = True 107 func.class_name = "%s_Controller" % machine 108 else: 109 self.symtab.newSymbol(func) |