Changeset 906 for proto/Compiler


Ignore:
Timestamp:
Feb 12, 2011, 4:53:13 PM (8 years ago)
Author:
cameron
Message:

Add generation of do_segment functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • proto/Compiler/pablo.py

    r903 r906  
    424424                                                stream_function.initializations,
    425425                                                stream_function.statements)             
     426
     427                do_segment_function = self.do_segment(self.do_segment_parameters(stream_function.parameters),
     428                                                self.do_segment_args(stream_function.parameters))       
     429
    426430                return self.indent(icount) + "struct " + stream_function.type_name + " {" \
    427431                + "\n" + self.indent(icount) + constructor \
    428432                + "\n" + self.indent(icount) + do_block_function \
     433                + "\n" + self.indent(icount) + do_segment_function \
    429434                + "\n" + self.indent(icount) + carry_declaration \
    430435                + "\n" + self.indent(icount) + "};\n\n"
     
    438443                + "\n" + self.indent(icount) + initializations \
    439444                + "\n" + self.indent(icount) + statements \
     445                + "\n" + self.indent(icount + 2) + "}"
     446
     447        def do_segment(self, parameters, do_block_call_args, icount=0):
     448                return self.indent(icount) + "void do_segment(" + parameters + ") {" \
     449            + "\n" + self.indent(icount) + "  for (int i = 0; i < SEGMENT_BLOCKS; i++)" \
     450                + "\n" + self.indent(icount) + "    do_block(" + do_block_call_args + ");" \
    440451                + "\n" + self.indent(icount + 2) + "}"
    441452
     
    473484                return "".join(do_block_parameters)             
    474485               
     486        def do_segment_parameters(self, parameters):
     487               
     488                do_segment_parameters = []
     489               
     490                for name in parameters:
     491                        type_name = name[0].upper() + name[1:]
     492                        argument_name = name[0].lower() + name[1:]
     493                        do_segment_parameters.append(type_name)
     494                        do_segment_parameters.append(" ")
     495                        do_segment_parameters.append(argument_name)
     496                        do_segment_parameters.append("[]")
     497                        do_segment_parameters.append(", ")
     498                if len(do_segment_parameters) > 0:             
     499                        do_segment_parameters.pop()
     500                                       
     501                return "".join(do_segment_parameters)           
     502
     503        def do_segment_args(self, parameters):
     504               
     505                do_segment_args = []
     506               
     507                for name in parameters:
     508                        argument_name = name[0].lower() + name[1:]
     509                        do_segment_args.append(argument_name)
     510                        do_segment_args.append("[i]")
     511                        do_segment_args.append(", ")
     512                if len(do_segment_args) > 0:           
     513                        do_segment_args.pop()
     514                                       
     515                return "".join(do_segment_args)                 
     516               
    475517def main(infilename, outfile = sys.stdout):
    476518  t = ast.parse(file(infilename).read())
Note: See TracChangeset for help on using the changeset viewer.