Parsing fix, vector test.
authorRobert Bradshaw <robertwb@math.washington.edu>
Sun, 21 Feb 2010 09:41:28 +0000 (01:41 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Sun, 21 Feb 2010 09:41:28 +0000 (01:41 -0800)
Cython/Compiler/Parsing.py
tests/run/cpp_stl_vector.pyx

index f35498f1e259bd259fd5e80379b28134b6e9165b..b234963aa1fda1d169653dbd7f36b0c4973664c3 100644 (file)
@@ -1853,13 +1853,13 @@ def p_c_simple_base_type(s, self_flag, nonempty, templates = None):
             # Make sure this is not a declaration of a variable or function.  
             if s.sy == '(':
                 s.next()
-                if s.sy == '*' or s.sy == '**':
+                if s.sy == '*' or s.sy == '**' or s.sy == '&':
                     s.put_back('(', '(')
                 else:
                     s.put_back('(', '(')
                     s.put_back('IDENT', name)
                     name = None
-            elif s.sy not in ('*', '**', '['):
+            elif s.sy not in ('*', '**', '[', '&'):
                 s.put_back('IDENT', name)
                 name = None
 
index 159d2bd0f74766c19d3d3eca3d8efe32222dd8bb..eee6ef893b2e11f8a3db175e12eb7a1b6703564a 100644 (file)
@@ -1,16 +1,17 @@
+from cython.operator cimport dereference as d
+
 cdef extern from "<vector>" namespace "std":
 
     cdef cppclass vector[T]:
         void push_back(T)
         size_t size()
-        T operator[](size_t)
+        T& operator[](size_t)
 
 def simple_test(double x):
     """
     >>> simple_test(55)
     3
     """
-    cdef vector[double] *v 
     try:
         v = new vector[double]()
         v.push_back(1.0)
@@ -30,7 +31,6 @@ def list_test(L):
     >>> list_test([-1] * 1000)
     (1000, 1000)
     """
-    cdef vector[int] *v 
     try:
         v = new vector[int]()
         for a in L:
@@ -46,7 +46,6 @@ def index_test(L):
     >>> index_test([1.25])
     (1.25, 1.25)
     """
-    cdef vector[double] *v 
     try:
         v = new vector[double]()
         for a in L:
@@ -54,3 +53,21 @@ def index_test(L):
         return v[0][0], v[0][len(L)-1]
     finally:
         del v
+
+
+def index_set_test(L):
+    """
+    >>> index_set_test([1,2,4,8])
+    (-1.0, -8.0)
+    >>> index_set_test([1.25])
+    (-1.25, -1.25)
+    """
+    try:
+        v = new vector[double]()
+        for a in L:
+            v.push_back(a)
+        for i in range(v.size()):
+            d(v)[i] = -d(v)[i]
+        return d(v)[0], d(v)[v.size()-1]
+    finally:
+        del v