diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-07-02 20:12:57 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-07-02 20:12:57 +0000 |
| commit | f0c703d42f85c87411966714c14aec8087819125 (patch) | |
| tree | 72a89269fa7c0a461a3af3f1a880ac492eefbbe9 /src | |
| parent | 2948231e0f3dfaab58e68c74d13c36b84c70ff2a (diff) | |
complete pgf_expr_eq in the C runtime
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/c/pgf/expr.c | 43 |
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(); } |
