summaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-07-02 20:12:57 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-07-02 20:12:57 +0000
commitf0c703d42f85c87411966714c14aec8087819125 (patch)
tree72a89269fa7c0a461a3af3f1a880ac492eefbbe9 /src/runtime
parent2948231e0f3dfaab58e68c74d13c36b84c70ff2a (diff)
complete pgf_expr_eq in the C runtime
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/c/pgf/expr.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/src/runtime/c/pgf/expr.c b/src/runtime/c/pgf/expr.c
index 1394f7a91..4e9c3c1c4 100644
--- a/src/runtime/c/pgf/expr.c
+++ b/src/runtime/c/pgf/expr.c
@@ -799,10 +799,11 @@ pgf_expr_eq(PgfExpr e1, PgfExpr e2)
return false;
switch (ei1.tag) {
- case PGF_EXPR_FUN: {
- PgfExprFun* fun1 = ei1.data;
- PgfExprFun* fun2 = ei2.data;
- return gu_string_eq(fun1->fun, fun2->fun);
+ case PGF_EXPR_ABS: {
+ PgfExprAbs* abs1 = ei1.data;
+ PgfExprAbs* abs2 = ei2.data;
+ return gu_string_eq(abs1->id, abs2->id) &&
+ pgf_expr_eq(abs1->body, abs2->body);
}
case PGF_EXPR_APP: {
PgfExprApp* app1 = ei1.data;
@@ -815,14 +816,32 @@ pgf_expr_eq(PgfExpr e1, PgfExpr e2)
PgfExprLit* lit2 = ei2.data;
return (pgf_literal_eq(lit1->lit,lit2->lit));
}
- case PGF_EXPR_META:
- return true;
- case PGF_EXPR_ABS:
- case PGF_EXPR_VAR:
- case PGF_EXPR_TYPED:
- case PGF_EXPR_IMPL_ARG:
- gu_impossible();
- break;
+ case PGF_EXPR_META: {
+ PgfExprMeta* meta1 = ei1.data;
+ PgfExprMeta* meta2 = ei2.data;
+ return (meta1->id == meta2->id);
+ }
+ case PGF_EXPR_FUN: {
+ PgfExprFun* fun1 = ei1.data;
+ PgfExprFun* fun2 = ei2.data;
+ return gu_string_eq(fun1->fun, fun2->fun);
+ }
+ case PGF_EXPR_VAR: {
+ PgfExprVar* var1 = ei1.data;
+ PgfExprVar* var2 = ei2.data;
+ return (var1->var == var2->var);
+ }
+ case PGF_EXPR_TYPED: {
+ PgfExprTyped* typed1 = ei1.data;
+ PgfExprTyped* typed2 = ei2.data;
+ return pgf_expr_eq(typed1->expr, typed2->expr) &&
+ pgf_type_eq(typed1->type, typed2->type);
+ }
+ case PGF_EXPR_IMPL_ARG: {
+ PgfExprImplArg* impl1 = ei1.data;
+ PgfExprImplArg* impl2 = ei2.data;
+ return pgf_expr_eq(impl1->expr, impl2->expr);
+ }
default:
gu_impossible();
}