args, kwds = self.explicit_args_kwds()
items = []
for arg, member in zip(args, type.scope.var_entries):
- items.append(DictItemNode(pos=arg.pos, key=NameNode(pos=arg.pos, name=member.name), value=arg))
+ items.append(DictItemNode(pos=arg.pos, key=IdentifierStringNode(pos=arg.pos, value=member.name), value=arg))
if kwds:
items += kwds.key_value_pairs
self.key_value_pairs = items
for item in self.key_value_pairs:
if isinstance(item.key, CoerceToPyTypeNode):
item.key = item.key.arg
- if isinstance(item.key, (StringNode, IdentifierStringNode)):
- item.key = NameNode(pos=item.key.pos, name=item.key.value)
- if not isinstance(item.key, NameNode):
- print item.key
- error(item.key.pos, "Struct field must be a name")
+ if not isinstance(item.key, (StringNode, IdentifierStringNode)):
+ error(item.key.pos, "Invalid struct field identifier")
+ item.key = IdentifierStringNode(item.key.pos, value="<error>")
else:
- member = dst_type.scope.lookup_here(item.key.name)
+ member = dst_type.scope.lookup_here(item.key.value)
if not member:
- error(item.key.pos, "struct '%s' has no field '%s'" % (dst_type, item.key.name))
+ error(item.key.pos, "struct '%s' has no field '%s'" % (dst_type, item.key.value))
else:
value = item.value
if isinstance(value, CoerceToPyTypeNode):
else:
code.putln("%s.%s = %s;" % (
self.result(),
- item.key.name,
+ item.key.value,
item.value.result()))
item.generate_disposal_code(code)
return p
def test_dict_construction(x, y, color):
- cdef Point p = {color: color, x: x, y: y}
+ cdef Point p = {'color': color, 'x': x, 'y': y}
return p
cdef union int_or_float:
void* ptr
def test_pointers(int n, double x):
- cdef with_pointers a = [True, {n: n}, NULL]
- cdef with_pointers b = with_pointers(False, {x: x}, NULL)
+ cdef with_pointers a = [True, {'n': n}, NULL]
+ cdef with_pointers b = with_pointers(False, {'x': x}, NULL)
print a.data.n
print b.data.x
- print a.ptr == b.ptr == NULL
\ No newline at end of file
+ print a.ptr == b.ptr == NULL