diff options
author | Lena Olson <leolson@google.com> | 2017-02-05 14:47:37 -0600 |
---|---|---|
committer | Andreas Sandberg <andreas.sandberg@arm.com> | 2017-03-01 11:58:37 +0000 |
commit | efcd8ae0244ec2791b58c749815c2f7a835eb78f (patch) | |
tree | 7acec73ecc56ca4a2b2ac4b8cafaff58e262edd7 /src/mem/slicc | |
parent | 93e20c9a73523f2b95fc65b99a0192f83eb7d8f4 (diff) | |
download | gem5-efcd8ae0244ec2791b58c749815c2f7a835eb78f.tar.xz |
ruby: fix and/or precedence in slicc
The slicc compiler currently treats && and || with the same precedence.
This is highly non-intuitive to people used to C, and was probably an
error. This patch makes && bind tighter than ||.
For example, previously:
if (A || B && C)
compiled to:
if ((A || B) && C)
With this patch, it compiles to:
if (A || (B && C))
Change-Id: Idbbd5b50cc86a8d6601045adc14a253284d7b791
Signed-off-by: Lena Olson (leolson@google.com)
Reviewed-on: https://gem5-review.googlesource.com/2168
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Reviewed-by: Joe Gross <criusx@gmail.com>
Reviewed-by: Sooraj Puthoor <puthoorsooraj@gmail.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
[ Rebased onto master ]
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/mem/slicc')
-rw-r--r-- | src/mem/slicc/parser.py | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/mem/slicc/parser.py b/src/mem/slicc/parser.py index 4afe0d367..5c2b212a2 100644 --- a/src/mem/slicc/parser.py +++ b/src/mem/slicc/parser.py @@ -1,4 +1,5 @@ # Copyright (c) 2009 The Hewlett-Packard Development Company +# Copyright (c) 2017 Google Inc. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -25,6 +26,7 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # Authors: Nathan Binkert +# Lena Olson import os.path import re @@ -158,7 +160,8 @@ class SLICC(Grammar): precedence = ( ('left', 'INCR', 'DECR'), - ('left', 'AND', 'OR'), + ('left', 'OR'), + ('left', 'AND'), ('left', 'EQ', 'NE'), ('left', 'LT', 'GT', 'LE', 'GE'), ('left', 'RIGHTSHIFT', 'LEFTSHIFT'), |