diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2015-08-14 19:28:43 -0500 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2015-08-14 19:28:43 -0500 |
commit | 7fc725fdb55e192520c148c87ec44f75f5d07ad0 (patch) | |
tree | 077503f95730d91127d88bcd0101c38096f8aadb /src/mem/slicc/ast/MethodCallExprAST.py | |
parent | f391cee5e1f9192bc35978df236e15f921a690cf (diff) | |
download | gem5-7fc725fdb55e192520c148c87ec44f75f5d07ad0.tar.xz |
ruby: slicc: avoid duplicate code for function argument check
Both FuncCallExprAST and MethodCallExprAST had code for checking the arguments
with which a function is being called. The patch does away with this
duplication. Now the code for checking function call arguments resides in the
Func class.
Diffstat (limited to 'src/mem/slicc/ast/MethodCallExprAST.py')
-rw-r--r-- | src/mem/slicc/ast/MethodCallExprAST.py | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/src/mem/slicc/ast/MethodCallExprAST.py b/src/mem/slicc/ast/MethodCallExprAST.py index 8be319a40..104d6f8df 100644 --- a/src/mem/slicc/ast/MethodCallExprAST.py +++ b/src/mem/slicc/ast/MethodCallExprAST.py @@ -56,20 +56,8 @@ class MethodCallExprAST(ExprAST): self.error("Invalid method call: Type '%s' does not have a method '%s'", obj_type, methodId) - if len(self.expr_ast_vec) != \ - len(obj_type.methods[methodId].param_types): - # Right number of parameters - self.error("Wrong number of parameters for function name: '%s', " + \ - "expected: , actual: ", proc_name, - len(obj_type.methods[methodId].param_types), - len(self.expr_ast_vec)) - - for actual_type, expected_type in \ - zip(paramTypes, obj_type.methods[methodId].param_types): - if actual_type != expected_type and \ - str(actual_type["interface"]) != str(expected_type): - self.error("Type mismatch: expected: %s actual: %s", - expected_type, actual_type) + func = obj_type.methods[methodId] + func.checkArguments(self.expr_ast_vec) # Return the return type of the method return obj_type.methods[methodId].return_type @@ -78,10 +66,9 @@ class MethodCallExprAST(ExprAST): pass class MemberMethodCallExprAST(MethodCallExprAST): - def __init__(self, slicc, obj_expr_ast, proc_name, expr_ast_vec): + def __init__(self, slicc, obj_expr_ast, func_call): s = super(MemberMethodCallExprAST, self) - s.__init__(slicc, proc_name, expr_ast_vec) - + s.__init__(slicc, func_call.proc_name, func_call.exprs) self.obj_expr_ast = obj_expr_ast def __repr__(self): |