From 9adb708c38a7cf2e85b9c0a8a084b43bc8d9e2a2 Mon Sep 17 00:00:00 2001 From: Bert Wesarg Date: Wed, 15 Oct 2008 17:55:27 +0200 Subject: [PATCH] ternary ?: operator import from ajbj B.W. --- Patch: +ternary-operator.patch --- series | 1 + ternary-operator.patch | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 ternary-operator.patch diff --git a/series b/series index 4e85ac3..022b053 100644 --- a/series +++ b/series @@ -128,3 +128,4 @@ symbol-lookup.patch MultipleAssignment-redux.patch MultipleAssignment-selector.patch key-grammar.patch +ternary-operator.patch diff --git a/ternary-operator.patch b/ternary-operator.patch new file mode 100644 index 0000000..69791a6 --- /dev/null +++ b/ternary-operator.patch @@ -0,0 +1,51 @@ +--- + + source/parse.y | 15 +++++++++++++++ + 1 file changed, 15 insertions(+) + +diff --quilt old/source/parse.y new/source/parse.y +--- old/source/parse.y ++++ new/source/parse.y +@@ -134,6 +134,7 @@ static int nextSymIsField = 0; + %type lvlist + %type lventry + %token ARGSEP ++%type thenx elsex + + %nonassoc IF_NO_ELSE + %nonassoc ELSE +@@ -141,6 +142,7 @@ static int nextSymIsField = 0; + %nonassoc ';' + %nonassoc SYMBOL ARG_LOOKUP + %right '=' ADDEQ SUBEQ MULEQ DIVEQ MODEQ ANDEQ OREQ ++%left '?' ':' + %left CONCAT + %left OR + %left AND +@@ -670,6 +672,10 @@ numexpr: '(' blank expr blank ')' + | numexpr or blank numexpr %prec OR { + ADD_OP(OP_OR); SET_BR_OFF($2, GetPC()); + } ++ | numexpr thenx blank numexpr elsex blank numexpr %prec '?' { ++ SET_BR_OFF($2, $5 + 1); /* thenx limb ends at $5.v+1 */ ++ SET_BR_OFF($5, GetPC()); /* elsex limb ends here */ ++ } + | incrdecr blank SYMBOL %prec INCR { + ADD_OP(OP_PUSH_SYM); ADD_SYM($3); ADD_OP($1); + ADD_OP(OP_DUP); ADD_OP(OP_ASSIGN); ADD_SYM($3); +@@ -731,6 +737,15 @@ or: OR { + } + ; + ++thenx: '?' { ++ ADD_OP(OP_BRANCH_FALSE); $$ = GetPC(); ++ ADD_BR_OFF(0); ++ } ++elsex: ':' { ++ ADD_OP(OP_BRANCH); $$ = GetPC(); ++ ADD_BR_OFF(0); ++ } ++ + dot: '.' %prec '.' { + nextSymIsField = 1; + } -- 2.11.4.GIT