ruby: fix and/or precedence in slicc
authorLena Olson <leolson@google.com>
Sun, 5 Feb 2017 20:47:37 +0000 (14:47 -0600)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Wed, 1 Mar 2017 11:58:37 +0000 (11:58 +0000)
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>
COPYING
src/mem/slicc/parser.py

diff --git a/COPYING b/COPYING
index 5fac93867dc0017452e9b59890e657fbb1a174b5..a72388e81cad3f2a1a3e9e2dd7206aeeb608d865 100644 (file)
--- a/COPYING
+++ b/COPYING
@@ -45,4 +45,4 @@ Copyright (c) 1994-1996 Carnegie-Mellon University.
 Copyright (c) 1993-1994 Christopher G. Demetriou
 Copyright (c) 1997-2002 Makoto Matsumoto and Takuji Nishimura
 Copyright (c) 1998,2001 Manuel Bouyer.
-Copyright (c) 2016 Google Inc.
+Copyright (c) 2016-2017 Google Inc.
index 4afe0d36753a251d4d560a1bd1b60e2dd3369c0b..5c2b212a29449732ae039de2d87568b22e179c71 100644 (file)
@@ -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'),