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 '+'