Added support for partial evaluation of && and || expressions.
authorbvassche <bvassche@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Wed, 15 Jul 2009 15:55:20 +0000 (15:55 +0000)
committerbvassche <bvassche@d57e44dd-8a1f-0410-8b47-8ef2f437770f>
Wed, 15 Jul 2009 15:55:20 +0000 (15:55 +0000)
git-svn-id: https://scst.svn.sourceforge.net/svnroot/scst/trunk@957 d57e44dd-8a1f-0410-8b47-8ef2f437770f

scripts/specialize-patch

index c2aec89..cb25c06 100755 (executable)
@@ -42,8 +42,10 @@ function version_code(kver) {
 # it is the same order as the order of operators in C.
 
 function evaluate(stmnt) {
+  # Remove C-style comments.
   gsub(" *\\/\\*[^*]*\\*\\/ *", "", stmnt)
 
+  # Remove the spaces before the #-sign.
   gsub("^+ *# *", "+#", stmnt)
 
   if (match(stmnt, "^+#ifdef (.*)$", arg))
@@ -99,7 +101,7 @@ function evaluate(stmnt) {
       sub(pattern, op[1] == 0, stmnt)
     }
     
-    pattern="KERNEL_VERSION\\(([0-9]+) *, *([0-9]+) *, *([0-9]+) *\\)"
+    pattern="KERNEL_VERSION\\( *([0-9]+) *, *([0-9]+) *, *([0-9]+) *\\)"
     while (match(stmnt, pattern, op) != 0)
     {
       sub(pattern, op[1] * 65536 + op[2] * 256 + op[3], stmnt)
@@ -123,12 +125,24 @@ function evaluate(stmnt) {
       sub(pattern, (op[1] != 0) && (op[2] != 0), stmnt)
     }
   
+    pattern="([0-9]+) *\\&\\& *(!* *defined\\([^)]*\\))"
+    while (match(stmnt, pattern, op) != 0)
+    {
+      sub(pattern, (op[1] != 0) ? op[2] : "0", stmnt)
+    }
+  
     pattern="([0-9]+) *\\|\\| *([0-9]+)"
     while (match(stmnt, pattern, op) != 0)
     {
       sub(pattern, (op[1] != 0) || (op[2] != 0), stmnt)
     }
   
+    pattern="([0-9]+) *\\|\\| *(!* *defined\\([^)]*\\))"
+    while (match(stmnt, pattern, op) != 0)
+    {
+      sub(pattern, (op[1] != 0) ? "1" : op[2], stmnt)
+    }
+  
     pattern="\\(([0-9]+)\\)"
     while (match(stmnt, pattern, op) != 0)
     {