[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.
|