You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-commits@lucene.apache.org by va...@apache.org on 2011/12/18 10:41:09 UTC
svn commit: r1220359 - in /lucene/pylucene/trunk/jcc: CHANGES jcc/cpp.py
jcc/python.py
Author: vajda
Date: Sun Dec 18 09:41:09 2011
New Revision: 1220359
URL: http://svn.apache.org/viewvc?rev=1220359&view=rev
Log:
- fixed bug with name collision between method and static field of same name
Modified:
lucene/pylucene/trunk/jcc/CHANGES
lucene/pylucene/trunk/jcc/jcc/cpp.py
lucene/pylucene/trunk/jcc/jcc/python.py
Modified: lucene/pylucene/trunk/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/CHANGES?rev=1220359&r1=1220358&r2=1220359&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/CHANGES (original)
+++ lucene/pylucene/trunk/jcc/CHANGES Sun Dec 18 09:41:09 2011
@@ -1,3 +1,7 @@
+Version 2.12 ->
+---------------
+ - fixed bug with name collision between method and static field of same name
+ -
Version 2.11 -> 2.12
--------------------
Modified: lucene/pylucene/trunk/jcc/jcc/cpp.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/cpp.py?rev=1220359&r1=1220358&r2=1220359&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/cpp.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/cpp.py Sun Dec 18 09:41:09 2011
@@ -98,6 +98,9 @@ RESERVED = set(['delete', 'and', 'or', '
'const', 'bool', 'operator', 'typeof', 'asm',
'NULL', 'DOMAIN', 'IGNORE'])
+RENAME_METHOD_SUFFIX = '_'
+RENAME_FIELD_SUFFIX = '__'
+
def cppname(name):
if name in RESERVED:
@@ -598,7 +601,7 @@ def jcc(args):
line(out_h, 0, '#define %s_H', '_'.join(names))
(superCls, constructors, methods, protectedMethods,
- fields, instanceFields, declares) = \
+ methodNames, fields, instanceFields, declares) = \
header(env, out_h, cls, typeset, packages, excludes,
generics, _dll_export)
@@ -607,13 +610,13 @@ def jcc(args):
names, superNames = code(env, out_cpp,
cls, superCls, constructors,
methods, protectedMethods,
- fields, instanceFields,
+ methodNames, fields, instanceFields,
declares, typeset)
if moduleName:
python(env, out_h, out_cpp,
cls, superCls, names, superNames,
constructors, methods, protectedMethods,
- fields, instanceFields,
+ methodNames, fields, instanceFields,
mappings.get(className), sequences.get(className),
renames.get(className),
declares, typeset, moduleName, generics,
@@ -762,6 +765,7 @@ def header(env, out, cls, typeset, packa
methods = methods.values()
sort(methods, fn=_compare)
+ methodNames = set([cppname(method.getName()) for method in methods])
for constructor in constructors:
if generics:
@@ -874,6 +878,9 @@ def header(env, out, cls, typeset, packa
for field in fields:
fieldType = field.getType()
fieldName = cppname(field.getName())
+ if fieldName in methodNames:
+ print >>sys.stderr, " Warning: renaming static variable '%s' on class %s to '%s%s' since it is shadowed by a method of same name." %(fieldName, '.'.join(names), fieldName, RENAME_FIELD_SUFFIX)
+ fieldName += RENAME_FIELD_SUFFIX
if fieldType.isPrimitive():
line(out, indent, 'static %s %s;',
typename(fieldType, cls, False), fieldName)
@@ -925,11 +932,11 @@ def header(env, out, cls, typeset, packa
line(out, indent, '}')
return (superCls, constructors, methods, protectedMethods,
- fields, instanceFields, declares)
+ methodNames, fields, instanceFields, declares)
def code(env, out, cls, superCls, constructors, methods, protectedMethods,
- fields, instanceFields, declares, typeset):
+ methodNames, fields, instanceFields, declares, typeset):
className = cls.getName()
names = className.split('.')
@@ -964,6 +971,8 @@ def code(env, out, cls, superCls, constr
for field in fields:
fieldType = field.getType()
fieldName = cppname(field.getName())
+ if fieldName in methodNames:
+ fieldName += RENAME_FIELD_SUFFIX
typeName = typename(fieldType, cls, False)
if fieldType.isPrimitive():
line(out, indent, '%s %s::%s = (%s) 0;',
@@ -1027,15 +1036,18 @@ def code(env, out, cls, superCls, constr
for field in fields:
fieldType = field.getType()
fieldName = field.getName()
+ cppFieldName = cppname(fieldName)
+ if cppFieldName in methodNames:
+ cppFieldName += RENAME_FIELD_SUFFIX
if fieldType.isPrimitive():
line(out, indent + 2,
'%s = env->getStatic%sField(cls, "%s");',
- cppname(fieldName), fieldType.getName().capitalize(),
+ cppFieldName, fieldType.getName().capitalize(),
fieldName)
else:
line(out, indent + 2,
'%s = new %s(env->getStaticObjectField(cls, "%s", "%s"));',
- cppname(fieldName), typename(fieldType, cls, False),
+ cppFieldName, typename(fieldType, cls, False),
fieldName, signature(field))
line(out, indent + 1, '}')
Modified: lucene/pylucene/trunk/jcc/jcc/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/python.py?rev=1220359&r1=1220358&r2=1220359&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/python.py Sun Dec 18 09:41:09 2011
@@ -16,6 +16,7 @@ import os, sys, platform, shutil, _jcc
from itertools import izip
from cpp import PRIMITIVES, INDENT, HALF_INDENT
+from cpp import RENAME_METHOD_SUFFIX, RENAME_FIELD_SUFFIX
from cpp import cppname, cppnames, absname, typename, findClass
from cpp import line, signature, find_method, split_pkg, sort
from cpp import Modifier, Class, Method
@@ -540,7 +541,8 @@ def extension(env, out, indent, cls, nam
def python(env, out_h, out, cls, superCls, names, superNames,
- constructors, methods, protectedMethods, fields, instanceFields,
+ constructors, methods, protectedMethods,
+ methodNames, fields, instanceFields,
mapping, sequence, rename, declares, typeset, moduleName, generics,
_dll_export):
@@ -664,18 +666,18 @@ def python(env, out_h, out, cls, superCl
if name in allMethods:
if Modifier.isStatic(allMethods[name][0].getModifiers()):
allMethods[name].append(method)
- elif name + '_' in allMethods:
- allMethods[name + '_'].append(method)
+ elif name + RENAME_METHOD_SUFFIX in allMethods:
+ allMethods[name + RENAME_METHOD_SUFFIX].append(method)
else:
- print >>sys.stderr, " Warning: renaming static method '%s' on class %s to '%s_' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name)
- allMethods[name + '_'] = [method]
+ print >>sys.stderr, " Warning: renaming static method '%s' on class %s to '%s%s' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name, RENAME_METHOD_SUFFIX)
+ allMethods[name + RENAME_METHOD_SUFFIX] = [method]
else:
allMethods[name] = [method]
else:
if name in allMethods:
if Modifier.isStatic(allMethods[name][0].getModifiers()):
- print >>sys.stderr, " Warning: renaming static method '%s' on class %s to '%s_' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name)
- allMethods[name + '_'] = allMethods[name]
+ print >>sys.stderr, " Warning: renaming static method '%s' on class %s to '%s%s' since it is shadowed by non-static method of same name." %(name, '.'.join(names), name, RENAME_METHOD_SUFFIX)
+ allMethods[name + RENAME_METHOD_SUFFIX] = allMethods[name]
allMethods[name] = [method]
else:
allMethods[name].append(method)
@@ -1090,7 +1092,11 @@ def python(env, out_h, out, cls, superCl
for field in fields:
fieldType = field.getType()
fieldName = field.getName()
- value = '%s::%s' %(cppname(names[-1]), cppname(fieldName))
+ cppFieldName = cppname(fieldName)
+ if cppFieldName in methodNames:
+ fieldName += RENAME_FIELD_SUFFIX
+ cppFieldName += RENAME_FIELD_SUFFIX
+ value = '%s::%s' %(cppname(names[-1]), cppFieldName)
value = fieldValue(cls, value, fieldType)
line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "%s", make_descriptor(%s));',
names[-1], fieldName, value)