[pure-lang-svn] SF.net SVN: pure-lang:[772] pure/trunk/interpreter.cc
Status: Beta
Brought to you by:
agraef
From: <ag...@us...> - 2008-09-16 17:30:16
|
Revision: 772 http://pure-lang.svn.sourceforge.net/pure-lang/?rev=772&view=rev Author: agraef Date: 2008-09-16 17:30:27 +0000 (Tue, 16 Sep 2008) Log Message: ----------- Bugfixes. Modified Paths: -------------- pure/trunk/interpreter.cc Modified: pure/trunk/interpreter.cc =================================================================== --- pure/trunk/interpreter.cc 2008-09-16 12:45:29 UTC (rev 771) +++ pure/trunk/interpreter.cc 2008-09-16 17:30:27 UTC (rev 772) @@ -6096,8 +6096,13 @@ else { // typed variable, must match type tag against value if (!tagv) tagv = f.CreateLoadGEP(x, Zero, Zero, "tag"); - f.builder.CreateCondBr - (f.builder.CreateICmpEQ(tagv, SInt(t.ttag)), matchedbb, failedbb); + if (t.ttag == EXPR::MATRIX) { + Value *tagv1 = f.builder.CreateAnd(tagv, UInt(0xfffffff0)); + f.builder.CreateCondBr + (f.builder.CreateICmpEQ(tagv1, SInt(t.ttag)), matchedbb, failedbb); + } else + f.builder.CreateCondBr + (f.builder.CreateICmpEQ(tagv, SInt(t.ttag)), matchedbb, failedbb); } s = t.st; break; @@ -6465,6 +6470,10 @@ vtransbb.push_back (BasicBlock::Create(mklabel("trans.state", s->s, t->st->s))); sw->addCase(SInt(t->ttag), vtransbb[i]); + if (t->ttag == EXPR::MATRIX) { + sw->addCase(SInt(EXPR::CMATRIX), vtransbb[i]); + sw->addCase(SInt(EXPR::IMATRIX), vtransbb[i]); + } } // now handle the transitions on the different type tags for (t = t1, i = 0; t != s->tr.end() && t->tag == EXPR::VAR; t++, i++) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |