Changeset 2099 for proto


Ignore:
Timestamp:
May 12, 2012, 7:23:54 PM (7 years ago)
Author:
cameron
Message:

New error primitive: pablo.assert_0(stream, code)

Location:
proto/Compiler
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • proto/Compiler/config.py

    r1997 r2099  
    4444                          )
    4545       
     46        parser.add_option('-e', '--error_routine',
     47                          dest='error_routine',
     48                          default='assert_0_error',
     49                          help='Name/qualified name for error routine',
     50                          )
     51       
    4652        parser.add_option('-A', '--ALWAYS_INLINE',
    4753                          dest='always_inline',
  • proto/Compiler/pablo.py

    r2049 r2099  
    1212do_block_inline_decorator = 'IDISA_INLINE '
    1313do_final_block_inline_decorator = ''
     14error_routine = 'raise_assert'
     15
    1416
    1517def is_BuiltIn_Call(fncall, builtin_fnname, builtin_arg_cnt, builtin_fnmod_noprefix='pablo'):
     
    514516    self.Ccode += ");\n"
    515517
     518class AssertCompiler(ast.NodeTransformer):
     519  def __init__(self):
     520    self.assert_routine = ast.parse(error_routine).body[0].value
     521  def xfrm(self, t):
     522    return self.generic_visit(t)
     523  def visit_Expr(self, node):
     524    if isinstance(node.value, ast.Call):
     525        if is_BuiltIn_Call(node.value, "assert_0", 2):
     526                err_stream = node.value.args[0]
     527                err_code = node.value.args[1]
     528                return ast.If(err_stream,
     529                              [ast.Expr(mkCall(self.assert_routine, [err_stream, err_code]))],
     530                              [])
     531        else: return node
     532    else: return node
     533       
    516534#
    517535# Adding Debugging Statements
     
    784802               
    785803                StringMatchCompiler().xfrm(node)
     804                AssertCompiler().xfrm(node)
    786805                AugAssignRemoval().xfrm(node)
    787806                Bitwise_to_SIMD().xfrm(node)
     
    858877    AugAssignRemoval().xfrm(self.main_node)
    859878    Bitwise_to_SIMD().xfrm(self.main_node)
     879    Bitwise_to_SIMD().xfrm(self.main_node)
     880    AssertCompiler().xfrm(self.main_node)
    860881    final_block_main = copy.deepcopy(self.main_node)
    861882    CarryIntro().xfrm_fndef(self.main_node)
  • proto/Compiler/pablomain.py

    r1997 r2099  
    8282        input_file = args[0]
    8383        input_string = readfile(input_file)
     84
     85        pablo.error_routine = options.error_routine
    8486               
    8587        if options.use_IDISA:
Note: See TracChangeset for help on using the changeset viewer.