コード例 #1
0
ファイル: FuncDeclAST.py プロジェクト: Yicheng22/gem5-patch
    def generate(self, parent=None, **kwargs):
        types = []
        params = []
        void_type = self.symtab.find("void", Type)

        # Generate definition code
        self.symtab.pushFrame()

        # Lookup return type
        return_type = self.return_type.type

        # Generate function header
        for formal in self.formals:
            # Lookup parameter types
            try:
                type, ident = formal.generate()
                types.append(type)
                params.append(ident)

            except AttributeError:
                types.append(formal.type)
                params.append(None)

        body = self.slicc.codeFormatter()
        if self.statements is None:
            self["external"] = "yes"
        else:
            rtype = self.statements.generate(body, return_type)

        self.symtab.popFrame()

        func_name_args = self.ident

        if parent is None:
            for arg in self.formals:
                from slicc.ast import FormalParamAST
                if isinstance(arg, FormalParamAST):
                    arg_name = arg.type_ast.ident
                else:
                    arg_name = arg
                func_name_args += "_" + str(arg_name)

        machine = self.state_machine
        func = Func(self.symtab, func_name_args, self.ident, self.location,
                    return_type, types, params, str(body), self.pairs)

        if parent is not None:
            if not parent.addFunc(func):
                self.error("Duplicate method: %s:%s()" % (parent, self.ident))
            func.class_name = parent.c_ident

        elif machine is not None:
            machine.addFunc(func)
            func.isInternalMachineFunc = True
            func.class_name = "%s_Controller" % machine
        else:
            self.symtab.newSymbol(func)
コード例 #2
0
ファイル: FuncDeclAST.py プロジェクト: AMDmi3/gem5
    def generate(self, parent = None):
        types = []
        params = []
        void_type = self.symtab.find("void", Type)

        # Generate definition code
        self.symtab.pushFrame()

        # Lookup return type
        return_type = self.return_type.type

        # Generate function header
        for formal in self.formals:
            # Lookup parameter types
            try:
                type, ident = formal.generate()
                types.append(type)
                params.append(ident)

            except AttributeError:
                types.append(formal.type)
                params.append(None)

        body = self.slicc.codeFormatter()
        if self.statements is None:
            self["external"] = "yes"
        else:
            rtype = self.statements.generate(body, return_type)

        self.symtab.popFrame()

        func_name_args = self.ident

        if parent is None:
            for arg in self.formals:
                from slicc.ast import FormalParamAST
                if isinstance(arg, FormalParamAST):
                    arg_name = arg.type_ast.ident
                else:
                    arg_name = arg
                func_name_args += "_" + str(arg_name)

        machine = self.state_machine
        func = Func(self.symtab, func_name_args, self.ident, self.location,
                    return_type, types, params, str(body), self.pairs)

        if parent is not None:
            if not parent.addFunc(func):
                self.error("Duplicate method: %s:%s()" % (parent, self.ident))
            func.class_name = parent.c_ident

        elif machine is not None:
            machine.addFunc(func)
            func.isInternalMachineFunc = True
            func.class_name = "%s_Controller" % machine
        else:
            self.symtab.newSymbol(func)
コード例 #3
0
    def generate(self, parent = None):
        types = []
        params = []
        void_type = self.symtab.find("void", Type)
	print "FuncDeclAST.py generate" #Urmish
	print void_type #Urmish
        # Generate definition code
        self.symtab.pushFrame()

        # Lookup return type
        return_type = self.return_type.type

        # Generate function header
        for formal in self.formals:
            # Lookup parameter types
            try:
                type, ident = formal.generate()
                types.append(type)
                params.append(ident)

            except AttributeError:
                types.append(formal.type)
                params.append(None)

        body = self.slicc.codeFormatter()
        if self.statements is None:
            self["external"] = "yes"
        else:
            rtype = self.statements.generate(body, return_type)

        self.symtab.popFrame()

        machine = self.state_machine
        func = Func(self.symtab, self.ident, self.location, return_type,
                    types, params, str(body), self.pairs)

        if parent is not None:
            if not parent.addFunc(func):
                self.error("Duplicate method: %s:%s()" % (parent, self.ident))
            func.class_name = parent.c_ident

        elif machine is not None:
            machine.addFunc(func)
            func.isInternalMachineFunc = True
            func.class_name = "%s_Controller" % machine
        else:
            self.symtab.newSymbol(func)
コード例 #4
0
    def generate(self, parent = None):
        types = []
        params = []
        void_type = self.symtab.find("void", Type)

        # Generate definition code
        self.symtab.pushFrame()

        # Lookup return type
        return_type = self.return_type.type

        # Generate function header
        for formal in self.formals:
            # Lookup parameter types
            type, ident = formal.generate()
            types.append(type)
            params.append(ident)

        body = self.slicc.codeFormatter()
        if self.statements is None:
            self["external"] = "yes"
        else:
            rtype = self.statements.generate(body, return_type)

        self.symtab.popFrame()

        machine = self.state_machine
        func = Func(self.symtab, self.ident, self.location, return_type,
                    types, params, str(body), self.pairs)

        if parent is not None:
            if not parent.addFunc(func):
                self.error("Duplicate method: %s:%s()" % (parent, self.ident))
            func.class_name = parent.c_ident

        elif machine is not None:
            machine.addFunc(func)
            func.isInternalMachineFunc = True
            func.class_name = "%s_Controller" % machine
        else:
            self.symtab.newSymbol(func)