From b95e920fbc866cd2b885d8d7436d3f8a4afbbd3c Mon Sep 17 00:00:00 2001 From: neuromancer Date: Wed, 30 Dec 2020 21:26:15 -0300 Subject: [PATCH] PRIVATE: code to compare expr --- engines/private/code.cpp | 60 +++++++++++++++++++++++++++++++++++++++ engines/private/grammar.h | 4 +++ engines/private/grammar.y | 4 +-- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/engines/private/code.cpp b/engines/private/code.cpp index 264d15b3ab3..370772bdacc 100644 --- a/engines/private/code.cpp +++ b/engines/private/code.cpp @@ -132,6 +132,66 @@ int assign() /* assign top value to next value */ return 0; } +int gt() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val > d2.val); + push(d1); + return 0; +} + +int lt() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val < d2.val); + push(d1); + return 0; +} + +int ge() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val >= d2.val); + push(d1); + return 0; +} + +int le() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val <= d2.val); + push(d1); + return 0; +} + +int eq() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val == d2.val); + push(d1); + return 0; +} + +int ne() +{ + Datum d1, d2; + d2 = pop(); + d1 = pop(); + d1.val = (int)(d1.val != d2.val); + push(d1); + return 0; +} + int print() /* pop top value from stack, print it */ { Datum d; diff --git a/engines/private/grammar.h b/engines/private/grammar.h index 0ced6359341..98692c3cb83 100644 --- a/engines/private/grammar.h +++ b/engines/private/grammar.h @@ -36,6 +36,10 @@ extern int constpush(); extern int strpush(); extern int print(); +extern int lt(); +extern int gt(); + + extern void initcode(char *); extern void execute(Inst *); diff --git a/engines/private/grammar.y b/engines/private/grammar.y index 4fbacf14785..c443f32af3b 100644 --- a/engines/private/grammar.y +++ b/engines/private/grammar.y @@ -101,8 +101,8 @@ expr: value | value EQ value | value NEQ value | value '+' value { code1(Private::add); } - | value '<' value - | value '>' value + | value '<' value { code1(Private::lt); } + | value '>' value { code1(Private::gt); } | value LTE value | value GTE value | value '+'