[pure-lang-svn] SF.net SVN: pure-lang:[771] pure/trunk
Status: Beta
Brought to you by:
agraef
|
From: <ag...@us...> - 2008-09-16 12:45:19
|
Revision: 771
http://pure-lang.svn.sourceforge.net/pure-lang/?rev=771&view=rev
Author: agraef
Date: 2008-09-16 12:45:29 +0000 (Tue, 16 Sep 2008)
Log Message:
-----------
Bugfixes.
Modified Paths:
--------------
pure/trunk/interpreter.cc
pure/trunk/printer.cc
pure/trunk/runtime.cc
pure/trunk/runtime.h
Modified: pure/trunk/interpreter.cc
===================================================================
--- pure/trunk/interpreter.cc 2008-09-16 12:22:28 UTC (rev 770)
+++ pure/trunk/interpreter.cc 2008-09-16 12:45:29 UTC (rev 771)
@@ -870,8 +870,8 @@
return expr(EXPR::PTR, x->data.p);
case EXPR::MATRIX: {
#ifdef HAVE_GSL
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix *m = (gsl_matrix*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix *m = (gsl_matrix*)x->data.mat.p;
exprll *xs = new exprll;
for (size_t i = 0; i < m->size1; i++) {
xs->push_back(exprl());
@@ -890,8 +890,8 @@
}
case EXPR::IMATRIX: {
#ifdef HAVE_GSL
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat.p;
exprll *xs = new exprll;
for (size_t i = 0; i < m->size1; i++) {
xs->push_back(exprl());
@@ -910,8 +910,8 @@
}
case EXPR::CMATRIX: {
#ifdef HAVE_GSL
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat.p;
exprll *xs = new exprll;
for (size_t i = 0; i < m->size1; i++) {
xs->push_back(exprl());
Modified: pure/trunk/printer.cc
===================================================================
--- pure/trunk/printer.cc 2008-09-16 12:22:28 UTC (rev 770)
+++ pure/trunk/printer.cc 2008-09-16 12:45:29 UTC (rev 771)
@@ -759,8 +759,8 @@
a whole. */
case EXPR::MATRIX:
os << "{";
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix *m = (gsl_matrix*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix *m = (gsl_matrix*)x->data.mat.p;
for (size_t i = 0; i < m->size1; i++) {
if (i > 0) os << ";";
for (size_t j = 0; j < m->size2; j++) {
@@ -772,8 +772,8 @@
return os << "}";
case EXPR::IMATRIX:
os << "{";
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat.p;
for (size_t i = 0; i < m->size1; i++) {
if (i > 0) os << ";";
for (size_t j = 0; j < m->size2; j++) {
@@ -785,8 +785,8 @@
return os << "}";
case EXPR::CMATRIX:
os << "{";
- if (x->data.mat && x->data.mat->p) {
- gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat->p;
+ if (x->data.mat.p) {
+ gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat.p;
for (size_t i = 0; i < m->size1; i++) {
if (i > 0) os << ";";
for (size_t j = 0; j < m->size2; j++) {
Modified: pure/trunk/runtime.cc
===================================================================
--- pure/trunk/runtime.cc 2008-09-16 12:22:28 UTC (rev 770)
+++ pure/trunk/runtime.cc 2008-09-16 12:45:29 UTC (rev 771)
@@ -272,26 +272,26 @@
static void pure_free_matrix(pure_expr *x)
{
- assert(x->data.mat && "pure_free_matrix: null data");
- assert(x->data.mat->refc > 0 && "pure_free_matrix: unreferenced data");
- assert(x->data.mat->p && "pure_free_matrix: corrupt data");
- bool owner = --x->data.mat->refc == 0;
+ if (!x->data.mat.p) return;
+ assert(x->data.mat.refc && "pure_free_matrix: corrupt data");
+ assert(*x->data.mat.refc > 0 && "pure_free_matrix: unreferenced data");
+ bool owner = --*x->data.mat.refc == 0;
#ifdef HAVE_GSL
switch (x->tag) {
case EXPR::MATRIX: {
- gsl_matrix *m = (gsl_matrix*)x->data.mat->p;
+ gsl_matrix *m = (gsl_matrix*)x->data.mat.p;
m->owner = owner;
gsl_matrix_free(m);
break;
}
case EXPR::CMATRIX: {
- gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat->p;
+ gsl_matrix_complex *m = (gsl_matrix_complex*)x->data.mat.p;
m->owner = owner;
gsl_matrix_complex_free(m);
break;
}
case EXPR::IMATRIX: {
- gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat->p;
+ gsl_matrix_int *m = (gsl_matrix_int*)x->data.mat.p;
m->owner = owner;
gsl_matrix_int_free(m);
break;
@@ -301,7 +301,7 @@
break;
}
#endif
- if (owner) free(x->data.mat);
+ if (owner) free(x->data.mat.refc);
}
#if 1
@@ -339,7 +339,7 @@
case EXPR::MATRIX:
case EXPR::CMATRIX:
case EXPR::IMATRIX:
- if (x->data.mat) pure_free_matrix(x);
+ pure_free_matrix(x);
break;
default:
assert(x->tag >= 0);
@@ -876,8 +876,8 @@
extern "C"
bool pure_is_double_matrix(const pure_expr *x, const void **p)
{
- if (x->tag == EXPR::MATRIX && x->data.mat) {
- *p = x->data.mat->p;
+ if (x->tag == EXPR::MATRIX) {
+ *p = x->data.mat.p;
return true;
} else
return false;
@@ -886,8 +886,8 @@
extern "C"
bool pure_is_complex_matrix(const pure_expr *x, const void **p)
{
- if (x->tag == EXPR::CMATRIX && x->data.mat) {
- *p = x->data.mat->p;
+ if (x->tag == EXPR::CMATRIX) {
+ *p = x->data.mat.p;
return true;
} else
return false;
@@ -896,8 +896,8 @@
extern "C"
bool pure_is_int_matrix(const pure_expr *x, const void **p)
{
- if (x->tag == EXPR::IMATRIX && x->data.mat) {
- *p = x->data.mat->p;
+ if (x->tag == EXPR::IMATRIX) {
+ *p = x->data.mat.p;
return true;
} else
return false;
Modified: pure/trunk/runtime.h
===================================================================
--- pure/trunk/runtime.h 2008-09-16 12:22:28 UTC (rev 770)
+++ pure/trunk/runtime.h 2008-09-16 12:45:29 UTC (rev 771)
@@ -36,7 +36,7 @@
these. */
typedef struct {
- uint32_t refc; // reference counter
+ uint32_t *refc; // reference counter
void *p; // pointer to GSL matrix struct
} pure_matrix;
@@ -54,7 +54,7 @@
double d; // double (EXPR::DBL)
char *s; // C string (EXPR::STR)
void *p; // generic pointer (EXPR::PTR)
- pure_matrix *mat; // matrix data (EXPR::MATRIX et al)
+ pure_matrix mat; // matrix data (EXPR::MATRIX et al)
pure_closure *clos; // closure (0 if none)
} data;
/* Internal fields (DO NOT TOUCH). The JIT doesn't care about these. */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|