2019-08-29  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethod): Only override declared type
	of method if implementationType is public.
	(removeRedundantMethods): Remove SYNTHETIC if redundant.
	It is not always redundant - consider StringBuilder.setLength,
	which is a syntahic wrapper for AbstractStringBuilder.setLength.

2019-07-09  Per Bothner  <per@bothner.com>

	Fixes to handling of length keyword for native-array constructors.
	* Invoke.java (applyToObject): Add (back) support for length keyword.
	* CompileInvoke.java (validateApplyInvoke): Some keywork cleanup.

2018-01-13  Per Bothner  <per@bothner.com>

	For invoke-static and similarstatic, prefer static methods.
	This fixes GitLab issue#25 "invoke-static on virtual method".
	* CompileInvoke.java (validateNamedInvoke): Prefer static methods;
	warn if no static methods found.
	* ClassMethods.java (getMethods): Filter on (non-)static.
	* Invoke.java (invokeStatic): Change 'kind' letter.

2017-08-31  Per Bothner  <per@bothner.com>

	* SlotSet.java (set$Mnfield$Ex, set$Mnstatic$Mnfield$Ex):
	Rename to be mangling-independent.

2017-08-04  Per Bothner  <per@bothner.com>

	* MappedArrayType.java (isCompatibleWithValue): Always convert.
	Don't return 2 (meaning no-runtime conversion needed), because it
	always is.

2017-08-03  Per Bothner  <per@bothner.com>

	* MappedArrayType.java (maybe): New static convenience method.

2017-07-15  Per Bothner  <per@bothner.com>

	Fix scan patterns with type specifiers.
	* MappedArrayType.java (emitCoerceFromObject): New method.
	(emiTestCoerce): New helper method.
	(encodeType): New method.

2017-05-16  Per Bothner  <per@bothner.com>

	* MappedArrayType.java (emitTestIf): Handle non-TypeValue element types.

2017-05-12  Per Bothner  <per@bothner.com>

	* MappedArrayType.java: New class, extends ObjectType.

2017-04-30  Per Bothner  <per@bothner.com>

	* ClassMethods.java: Accept any CharSequence as a string.
	* CompileBuildObject.java: Likewise.
	* Invoke.java: Likewise.

2017-04-01  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validate): Optimize 'class' static pseudo-field.
	* SlotGet.java (validateApplySlotGet): Don't optimize 'class' here.
	This fixes problem of T:class where T is a not-yet-compiled ClassExp.

2017-01-06  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (define): Check SourceName attribute.

	* ClassMemberLocation.java: Allow lazy ClassType creation, from name.
	(<init>(Object,String,String)): New constructor.
	(getDeclaringClassname): New method.
	(type): Make private.
	* FieldLocation.java: Make use of supertype changes.
	* StaticFieldLocation.java: Likewise.

2016-12-03  Per Bothner  <per@bothner.com>

	* MultValuesType.java (isCompatibleWithValue): Use Type.isSame.

	* MakeAnnotation.java (validate):  Use language-type for annotaton value.

	* CompileReflect.java: Use CharSequence instead of String-orFString.
	* SlotGet.java: Likewise.
	* SlotSet.java: Likewise.

	* CompileInvoke.java (validateNamedInvoke): Handle parameterized List type.

2016-11-27  Per Bothner  <per@bothner.com>

	* CompileInvoke.java: Fix two bugs relating to splices.
	(validateNamedInvoke): Fix adjustment of splice start.
	Also, call PrimProcedure.canCompile to check if we can.

2016-04-21  Per Bothner  <per@bothner.com>

	* ClassMethods.java (removeRedundantMethods): Use new Type.isSame.
	This fixes Savannah bug #47725 "Same method candidate found twice
	causing warning".

2016-03-08  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validateApplySlotGet):
	If no slot is found, emit warning, not error.
	Don't emit either if type is 'dynamic'.

2016-02-11  Per Bothner  <per@bothner.com>

	* MultValuesType.java (isCompatibleWithValue): New method.

2015-10-23  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java: Various fixes and improvements.
	(hasAddChildMethod): Use getAddChildMethodName instead of always "add".
	(make): Fix warning message.
	(findNamedMember): Likewise.
	(make): Allow binding to be a class value, not just a string name.
	(make): Use context ClassLoader.

2015-06-08  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java: Re-write keyword handling.
	(keywordStart): Replace field by method.
	(numKeywordArgs): New methods.
	* CompileInvoke.java: Update accordingly.
	(hasKeywordArgument): Remove method.

2015-06-07  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java (make): If type is a LangObjType,
	call the latter's getBuildObject method.

2015-06-03  Per Bothner  <per@bothner.com>

	* CompileArrays.java (compileSet): Get a truncating StackTarget.

2015-02-26  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (compile): Fix handling of toStringType.

2015-02-12  Per Bothner  <per@bothner.com>

	* SingletonType.java: Implement Externalizable.
	(writeExternal, readExternal, readResolve): New methods.
	* MultValuesType.java (writeExternal, readExternal): New methods.

2015-02-01  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validateApplyTypeSwitch): Set PASSES_TAILCALLS.

2015-01-21  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validateApplyTypeSwitch): Use new
	2-argument setInlineOnly method.

2015-01-09  Andrea Bernardini <andrebask@gmail.com>

	* TypeSwitch.java (compile): Tweak for enableANF.

2014-12-22  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (compile): Handle PATTERN_NESTED parameters
	that have init-expressions.

2014-12-16  Per Bothner  <per@bothner.com>

	* OccurrenceType.java: No longer extends ObjectType, just Type.
	(compare): Check item counts for compatibility.
	(compatibleWithCount, itemCountMin, itemCountMax): New static methods.
	* MultValuesType.java: New class, extends OccurrenceType.

2014-12-09  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (compile): Special case for toStringType.

2014-12-08  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (compile): Force Lazy value if appropriate.

	* TypeSwitch.java (compile): Re-do logic in preparation for patterns.

2014-08-28  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (getInstance): Optimize if base
	is an OccurrenceType.

2014-07-31  Per Bothner  <per@bothner.com>

	* CompileReflect.java (inlineClassName): Update in-place.

	* CompileReflect.java (validateApplyInstanceOf): Only constant-fold
	if type is a plain ClassType.  This fixes Savannah bug #42722
	"Explicit type declaration, later instance? check issues".
	* InstanceOf.java (compile): Use implementation-type.

	* CompileReflect.java (validateApplyInstanceOf): Warn if type
	argument isn't a type or class.
	* InstanceOf.java (compile): Better source location on error.

2014-07-27  Per Bothner  <per@bothner.com>

	* ClassMethods.java (selectApplicable):  Add extra 'restType'
	argument to handle splices.
	* CompileInvoke.java (selectApplicable): Handle splices.

2014-07-06  Per Bothner  <per@bothner.com>

	* WrongArguments.java (checkArgCount): Take haSplicies argument.

2014-07-05  Per Bothner  <per@bothner.com>

	* ArrayMake.java (makeObjectArray): New constant.
	(getInstance): New factory method.
	* CompileInvoke.java (validateApplyInvoke): Use getInstance.

	* CompileArrays.java (createArray): Optimize the case when there are
	no splices.

2014-07-03  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateNamedInvoke): Optimize calls with
	splices if the argument list only matches a single method.

2014-06-30  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (encodeType): New method.

	* ArraySet (apply3): Add call to convertToRaw.

2014-06-17  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Move a good chunk
	of the code into a new method.  This allows the latter to be
	called directly from CompileNamedPart.
	(validateNamedInvoke): New method.  Don't call getMethods
	if methods were passed in parameter.

2014-06-04  Per Bothner  <per@bothner.com>

	Some incomplete hooks for overload resolution with splices.
	* ClassMethods.java (selectApplicable): Take maybeMore parameter.
	* CompileInvoke.java (validateApplyInvoke): Update.
	* CompileBuildObject.java (hasAddChildMethod): Update.

2014-05-26  Per Bothner  <per@bothner.com>

	* ArrayGet.java: Convert to use new compilerXKey protocol.
	* ArrayLength.java: Likewise.
	* ArrayNew.java: Likewise.
	* ArraySet.java: Likewise.
	* CompileArrays.java: No longer implements Inlineable.

	Improve bytecode for creating arrays with splices.
	* ArrayMake.java: New class, extends ProcedureN.
	* CompileArrays.java (compileMake, createArrays): New static methods.
	* CompileInvoke.java: Handle splices when creating arrays.
	* Invoke.java: Update since validateApplyInvoke handles splices.

2014-05-06  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN): Add support for constructing a ConstVector.

2014-02-16  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java: Likewise.
	* CompileInvoke.java: Likewise.
	* CompileReflect.java: Likewise.
	* FieldLocation.java: Likewise.
	* Invoke.java: Likewise.
	* MakeAnnotation.java: Likewise.

2014-02-12  Per Bothner  <per@bothner.com>

	* SlotGet.java: Use WrappedException.rethrow.
	* SlotSet.java: Likewise..
	* FieldLocation.java (getFieldValue): Likewise.
	(set): Catch Exception only so we don't wrap Error.

2014-01-05  Per Bothner  <per@bothner.com>

	* Makefile.am: Merge into ../../../gnu/Makefile.am and remove.

2013-12-20  Per Bothner  <per@bothner.com>

	* Invoke.java (lookupMethods): Minor tweaks.

2013-09-07  Per Bothner  <per@bothner.com>

	* CompileReflect.java: Update for mostSpecific metho being moved.

2013-06-02  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Use Language.unionType.

2013-05-11  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Instead of replacing Method with
	declaring-class-adjusted method, pass both to PrimProcedure.
	Specifically use the initial method for overload resolution and
	only use the adjusted method for code-generation.

	* ClassMethods.java: Update to use Java2 List with generics.

2012-12-15  Per Bothner  <per@bothner.com>

	* Throw.java: Moved from kawa/standard/prim_throw.
	Set validateApply handler.
	(compile): Don't create new ClassType instance for Throwable, as
	that causes pointless cast.
	(getReturnType): Remove.
	* Makefile.am: Update for new class.
	* CompileReflect.java (validateThrow): New method.

2012-11-19  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java (insertArgument, useBuilder): New methods.
	(getArg, getArgCount, setArg): New convenience methods.
	* CompileInvoke.java (validateApplyInvoke): Move logic to decide if
	using CompileBuildObject#build into CompileBuildObject#useBuilder.

2012-11-07  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java (make): Search superclasses for matching
	ObjectBuilder binding.
	(getAddChildMethodName): New method.
	(buildAddChild): Use it.

2012-11-06  Per Bothner  <per@bothner.com>

	* SlotGet.java (getSlotValue): Look for a member class.
	This fixes Savannah bug#37684 "Nested class types of field".

2012-07-16  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods):  When calling an Object method (such
	as hashCode) though an interface reference, general an invokevirtual
	on Object rather than an invokeinterface.  This is compatible with
	javac, and is required by the Dalvik VM - though not the Java VM.
	This fixes Savannah bug #36847 "CharSequence#hashCode".

2012-06-26  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java: Update for Location being made generic.
	* FieldLocation.java: Likewise.

2012-05-03  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Set line number if
	creating new ApplyExp for object construction.

2012-03-21  Per Bothner  <per@bothner.com>

	* ProceduralProxy.java (invoke):  Special-case for methods of Object.

2012-03-20  Per Bothner  <per@bothner.com>

	* CompileInvoke.java: Add needed setCanRead call.
	* CompileBuildObject.java: Likewise.

2012-02-09  Per Bothner  <per@bothner.com>

	* SlotGet.scm (lookupMember): Look for "isXxx" method.

2012-01-31  Per Bothner  <per@bothner.com>

	* ProceduralProxy.java: New class.
	* Makefile.am: Update accordingly.

2012-01-29  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): We should optimize
	even if Compiler#mustCompile is false.

2012-01-27  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): If type is LangObjType,
	call getConstructorType.

2012-01-15  Per Bothner  <per@bothner.com>

	* LazyType.java (getLazyType): New static method.

2011-12-29  Per Bothner  <per@bothner.com>

	* LazyType.java: New class, extends ObjectType.
	* Makefile.am: Update accordingly.
	* OccurrenceType.java (compare): Check for LazyType.

2011-12-12  Per Bothner  <per@bothner.com>

	* CompileInvoke.java: isInterface call no longer needs cast.
	* ClassMethods.java: Likewise.

2011-12-09  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validateApplySlotGet):  Set expression type.
	Don't immediately return if object is array, unless the field
	is "length".  This allows "class" property (i.e. getClass) to work.
	* SlotGet.java (getReturnType): Remove method - no longer needed.

2011-08-29  Charles Turner <chturne@gmail.com>

	* FieldLocation.java (setKindFlags): Throw a RuntimeException if
	the declared field is null.

2011-08-28  Per Bothner  <per@bothner.com>

	* CompileReflect.java (inlineClassName): Don't inline if
	checkKnownClass returns -1.
	This fixes Savannah bug#34003 "Unknown class confuses inliner".

2011-08-17  Per Bothner  <per@bothner.com>

	* CompileBuildObject.java (make): Use Compilation#lookup as it is
	more general/robust than ScopeExp#lookup.

2011-07-13  Per Bothner  <per@bothner.com>

	Refactoring for "object building" to make support custom bulders.
	* CompileBuildObject.java: New class.
	* Makefile.am: Update accordingly.
	* CompileInvoke.java: Some object construction logic moved to
	CompileBuildObject.

	* Invoke.java (applyN): Remove two ClassType casts, so the code will
	also work for other types, such as LangObjType.

2011-07-12  Per Bothner  <per@bothner.com>

	* MakeAnnotation.java (asAnnotation): Moved to
	gnu/bytecode/AnnotationEntry.java.

2011-07-04  Per Bothner  <bothner@kuling.bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Complain if an object
	constructor has post-keyword "children" arguments, but no add method.

2011-06-29  Per Bothner  <bothner@kuling.bothner.com>

	* ClassMethods.java (removeRedundantMethods): Handle TypeVariable.
	(getMethods): Handle lookup in a ParameterizedType.

2011-06-16  Per Bothner  <per@bothner.com>

	* CompileReflect.java (makeSetterCall): New method.
	(validateApplySlotSet): Rerite to do lookup, type inference
	and error checking here, rather than at code-generation time.
	* CompileInvoke.java (validateApplyInvoke): A Method returned from
	checkKeywords isn't necessarily applicable or the best match.
	Thus use CompileReflect.makeSetterCall for proper typing.
	* SlotSet.java (compile): Simplify, since lookup now done earlier.
	(compileSet): Remove method.

	* CompileInvoke.java (validateApplyInvoke): Use ALLOCATE_ON_STACK
	instead of SlotSet.setFieldReturnObject.
	* SlotSet.java (returnSelf, setFieldReturnObject): Remove fields.
	(apply3, compile) Remove support for returnSelf option.

	* CompileReflect.java (validateApplySlotSet): Likewise.

2011-06-15  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Revert previous change
	using RETURN_ARG.  Instead use a normal LetExp, but mark temporary
	variable with ALLOCATE_ON_STACK flag.

	* CompileInvoke.java (validateApplyInvoke): Use new ApplyExp.RETURN_ARG0
	flag to optimize some object initialization.

2011-03-23  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Use letStart/letVariable
	etc methods instead of creating LetExp directly.
	* Invoke.java (makeInvokeStatic): Change to have varargs interface.

2011-02-27  Per Bothner  <per@bothner.com>

	* SlotGet.java (lookupMember): Also check for member classes.
	(apply2): If second arg is a ClassType, return it.
	* CompileReflect.java (validateApplySlotGet): If lookupMember
	returned a static member class, return that.

2011-01-24  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Report error if
	invoke-special on unknown or invalid type.

2011-01-19  Per Bothner  <per@bothner.com>

	* ClassMethods.java: Update isValidJavaName call.

2011-01-07  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Guard against
	Array.set failures.

	* MakeAnnotation.java (asAnnotationValue): Handle nested annotation
	value.

2011-01-03  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Add special handling
	for LangObjType.constVectorType, including coercion to array and List.

2010-12-24  Per Bothner  <per@bothner.com>

	* MakeAnnotation.java (validate): Fix SourceLocator used for
	unknown annotation element name error message.

	* MakeAnnotation.java: New class, extends ProcedureN.
	* Makefile.am: Update accordingly.
	* CompileInvoke.java (validateApplyInvoke): Constant-fold array
	construction if processingAnnotations().

2010-12-23  Per Bothner  <per@bothner.com>

	* CompileReflect.java (validateApplySlotGet): Inline access to enum
	constant to constant enum value.
	Also inline reference to member class.

2010-11-26  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Fix some errors in
	resolution of constructor calls.

2010-11-04  Per Bothner  <per@bothner.com>

	* CompileInvoke.java: Update to use new warnInvokeUnknownMethod
	from Compilation.
	* SlotSet.java (compile): Check Compilation#warnUnknownMember.
	* CompileRefect.java (validateApplySlotGet): Likewise.
	* CompileNamedPart.java (validateGetNamedPart): Likewise.

	* SlotGet.java (compile): Generalize to ObjectType.

2010-10-23  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile): Simplify using Language#getLangTypeFor.
	* CompileReflect.java (checkKnownClass): Cast is no longer needed.

2010-10-22  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Allow constructor
	arguments before keyword setters.
	* Invoke.java (applyN): Update to support (most of) the newer
	functionality supported by the compiler.

2010-10-20  Per Bothner  <per@bothner.com>

	Fixes Savannah bug #31355 "warn-access-unknown-field".
	* SlotSet.java (compileSet): Generalize to ObjectType.
	(compile): Likewise.
	* CompileReflect.java (validateApplySlotGet): Generalize handling to
	ObjectType - but not ArrayType - i.e. handle LangObjType.

2010-10-16  Per Bothner  <per@bothner.com>

	Fix Savannah bug #31353 "boolean type".
	* InstanceOf.java (apply2): If type argument is PrimType,
	used boxed type instead.
	(compile): Likewise.
	* CompileReflect.java (validateApplyInstanceOf): Likewise.

	* CompileInvoke.java (validateApplyInvoke): When visiting the value
	used to set a property, use the property's language-specific type.

2010-10-14  Per Bothner  <per@bothner.com>

	* SlotSet.java (compileSet): If we have a setter method that returns
	non-void (presumably same as this), ignore the result.
	(getReturnType): Remove method - no longer needed.
	* CompileReflect.java (validateApplySlotSet): Set result type.

2010-10-06  Per Bothner  <per@bothner.com>

	* CompileArrays.java: Update for removed CInlineable#getReturnType.
	(getReturnType): Removed.
	(validateArrayNew, validateArrayLength, validateArrayGet,
	validateArraySet): New methods.
	* ArrayGet.java: Set validate-apply property.
	* ArrayLength.java: Likewise.
	* ArrayNew.java: Likewise.
	* ArraySet.java: Likewise.
	* CompileInvoke.java (validateApplyInvoke): Set type of expression.

2010-10-05  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (convertValue): New method.

2010-10-04  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (selectApplicable): Use new checkIntValue and
	checkLongvalue methods in InlineCalls.

2010-10-01  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (checkKeywords): Also search for "add" methods.
	E.g. (define b (JButton action-listener: ...))
        gets implemented as: (define b ...) (b:addActionListener ...)
	(checkKeywords): Change parameter to ObjectType to avoid casting.
	* SlotSet.java (type1Array): Pre-allocated 1-element type array.

2010-09-30  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (hasKeywordArgument): New method.
	(validateApplyInvoke): Convert unnamed constructor arguments to
	calls to an "add" method.
	Make "visit" calls on  argument expressions be context-dependent.
	* ClassMethods.java (selectApplicable): New overloaded method.

2010-09-23  Per Bothner  <per@bothner.com>

	* SlotSet.java (apply): Handle the case where the "name" is actually
	a Field or Method, which could happen if inlining is only partial.

2010-09-20  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): A klduge - type-checking
	the last argument of a varargs method is tricky (array *or* non-array).

2010-09-17  Per Bothner  <per@bothner.com>

	* CompileInvoke.java (validateApplyInvoke): Defer visitArgs.
	This allows passing required element type when creating arrays.
	Also visit method argument when method type is known.

2010-09-16  Per Bothner  <per@bothner.com>

	* CompileReflect.java: Update validateApply methods, which no longer
	take a 'boolean argsInlined' parameter.
	* CompileInvoke.java: Likewise.

2010-08-27  Per Bothner  <per@bothner.com>

	* TypeSwitch.java: Update to use Procedure.validateApplyKey,
	and move inlineXxx method to CompileReflect.
	* InstanceOf.java: Likewise.
	* SlotSet.java: Likewise.
	* SlotGet.java: Likewise.
	* Invoke.java: Similar, but move a bunch of methods to CompileInvoke.
	* CompileInvoke.java: New class.
	* CompileReflect.java: New class.
	* Makefile.am: Update accordingly.

2010-08-20  Per Bothner  <per@bothner.com>

	* FieldLocation.java (setWithSave, setRestore): Remove unused ctx
	parameter.

2010-02-24  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Check that implementation type
	is a ClassType before casting to it.
	This fixes Savannah bug #28957 "exception in inliner".

2009-11-30  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile): Use plain emitInvoke, rather than unreliably
	trying to decide between emitInvokeVirtual/emitInvokeInterface.
	The latter fails for getters of a PairClassType.
	* SlotSet.java (compileSet): Likewise.
	* Invoke.java (inline): Only extract instanceType from PairClassType
	if this is a 'make' - otherwise we want the interface method.

2009-10-01  Per Bothner  <per@bothner.com>

	* Invoke.java (selectApplicable): If arguments are IntNum literals
	in int or long range, set argument type to int or long.

2009-09-30  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (define): Only grab name from value
	if the field is final.

	* FieldLocation.java (toString): Check for null type.

2009-09-15  Per Bothner  <per@bothner.com>

	* SlotGet.java (getSlotValue):  Don't use old language.coerceToObject;
	instead just do Integer.valueOf.

2009-08-27  Per Bothner  <per@bothner.com>

	* ArrayGet.java (isSideEffectFree): New method.
	* ArrayLength.java (isSideEffectFree): New method.
	* gnu/kawa/reflect/ArrayNew.java (isSideEffectFree): New method.

2009-08-23  Per Bothner  <per@bothner.com>

	* CompileArrays.java: New class, for Inlineable support
	for following Procedures, so we can factor it out from run-time code.
	* Makefile.am: Update accordingly.
	* ArrayGet.java: Now longer implment Inlineable.
	* ArrayLength.java: Likewise.
	* ArrayNew.java: Likewise.
	* ArraySet.java: Likewise.

2009-08-05  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Update to new ClassType API.
	(select): Use the receiver as the declaring class, for better
	java spec compatibility.

	* ClassMethods.java (getMethods): Override declared type of method
	so it matches receiver, for improved binary compatibility.

2009-06-28  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (inline): Update for new inlining framework.

2009-03-13  Per Bothner  <per@bothner.com>

	* ClassMethods.java (MethodFilter.select): Skip SYNTHETIC methods.

2008-12-29  Per Bothner  <per@bothner.com>

	* SlotGet.java (lookupMember, inline): Use new isAccessible convenience
	method, which fixes error when accessing static protected members.
	* SlotSet.java (lookupMember, inline): Likewise.
	* ClassMethods.java (select): Likewise.

2008-12-24  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): For invoke-special we shouldn't do the
	test on the receiver when checking protected methods for accessibility.

2008-12-23  Per Bothner  <per@bothner.com>

	* SlotGet.java: Update isAccessible call, needed so we can check that
	the requiremens of protected access are satisfied.
	* SlotGet.java: Likewise.
	* ClassMethods.java: Likewise.
	(class MethodFilter): Need to save receiver type in filter.

2008-02-27  Per Bothner  <per@bothner.com>

	* ArrayNew.java (apply1, compile): Use implementation-type.

2008-02-17  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (getRClass): New method.

2008-01-16  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (inline): Handle new argsInlined parameter.
	* SlotGet.java (inline): Likewise.
	* InstanceOf.java (inline): Likewise.
	* Invoke.java (inline): Likewise.
	* SlotSet.java (inline): Likewise.


2008-01-14  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Also search java.lang.Object when
	looking for an instance method.

2007-11-02  Per Bothner  <per@bothner.com>

	Some changes mainly to better handle LangObjType.
	* SlotGet.java (lookupMember): Generalize to ObjectType.
	* Slotset.java (lookupMember): Likewise.
	* Invoke.java (checkKeywords): Likewise, for slot field.

2007-04-27  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (defineAll): Pass Language as new
	explicit parameter.

2007-04-23  Per Bothner  <per@bothner.com>

	* FieldLocation.java (<init>(Object,Field)): New constructor.
	(getDeclaration): Use new ModuleInfo.find(Type) factory method.
	* StaticFieldLocation.java (<init>(Field)): New constructor.
	* ClassMemberLocation.java: Make abstract.
	(define): Change to allocate a StaticFieldLocation or FieldLocation,
	rather than a plain ClassMemberLocation.  This enables Translator's
	rewrite method map the location to a Declaration.

2007-03-31  Per Bothner  <per@bothner.com>

	* FieldLocation.java (setKindFlags): Possible optimization.

2007-02-28  Per Bothner  <per@bothner.com>

	* Invoke.java (inline): In the invoke-special case signal error if
	no best match found.  This is intended as a partial fix for 
	Savannah bug#18790, mis-compilation of invoke-special.

2007-02-26  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (inline): Update for new CanInline api.
	* SlotGet.java (inline): Likewise.
	* InstanceOf.java (inline): Likewise.
	* Invoke.java (inline): Likewise.
	* SlotSet.java (inline): Likewise.

2007-02-23  Per Bothner  <per@bothner.com>

	* FieldLocation.java (setWithSave, setRestore): New methods.

2007-02-18  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2): Also allow SimpleSymbol or SimpleSymbol.
	* SlotSet.java (apply3): Generalize method name type.

2007-01-17  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (compile): Handle default case similarly as
	other cases - specifically with variable.
	Minor optimization in case variable is unused.

2007-01-02  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods, apply): Generalize from ClassType
	to ObjectType.
	* Invoke.java (apply, applyN, lookupMethods, selectApplicable):
	Likewise.

2006-12-29  Per Bothner  <per@bothner.com>

	* Invoke.java (inline): Fix off-by-one error.

2006-12-23  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN, inline): Look for "valueOf" method if there
	is no suitable constructor.

	* Invoke.java (getMethods): Split non-reentrant method into two ...
	(getMethods, selectApplicable): ... new re-entrant methods.
	(cacheMethods, cacheArgs, cacheDefinitelyApplicableMethodCount,
	cachePossiblyApplicableMethodCount): Remove static fields.

2006-12-06  Per Bothner  <per@bothner.com>

	* OccurrenceType.java: ElementPredicate was renamed to ItemPredicate.

2006-11-16  Per Bothner  <per@bothner.com>

	* SingletonType.java (compare, coerceToSingleton, coerceFromObject,
	emitCoerceFromObject): New methods.
	* OccurrenceType.java (emptySequenceType): Use SingletonType for base.

2006-11-07  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (itemCountRange, itemCountIsOne): Fix thinko
	replacing 1001 by 0x1001.  Compare base if it is ObjectType,
	not only ClassType.

2006-11-01  Per Bothner  <per@bothner.com>

	* SingletonType.java: New class, extends ObjectType.
	* Makefile.am: Update accordingly.
	* OccurrenceType.java (getInstance): Add a special case.
	(compare): Add slightly more intelligence.
	(itemCountIsOne): New static method, expanded on and replacing
	SeriesTarget.isSingletonType.
	(itemCountRange, itemCountCode, itemCountIsZeroOrOne,
	itemPrimeType): New static methods.

2006-10-29  Per Bothner  <per@bothner.com>

	* TypeSwitch.java (apply): Fix so it actually works.

2006-10-25  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (emptySequenceType): New static final.

2006-09-28  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (getBase, minOccurs, maxOccurs): New accessors.
	(coerceFromObject): Handle singleton, if apprpriate.

2006-09-11  Per Bothner  <per@bothner.com>

	* FieldLocation.java: Remove unused local variable.
	* Invoke.java: Likewise.
	* StaticFieldLocation.java: Remove unused import.

2006-08-08  Per Bothner  <per@bothner.com>

	* FieldLocation.java (make): New factory method for immediate mode.
	* StaticFieldLocation.java (make): Likewise.

2006-07-12  Per Bothner  <per@bothner.com>

	* SlotGet.java (inline): If class unknown, return.
	* Invoke.java (checkKnownClass): Fix javadoc comment.

2006-06-27  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (getConstructor): New method.
	* Invoke.java (typeFrom): Allow any ObjectType.
	(applyN): If dtype is a TypeValue, check for non-null getConstructor.
	(inline): Likewise.  Merge in private method into public method.

2006-06-16  Per Bothner  <per@bothner.com>

	* Invoke.java (typeFrom): Handle ClassNamespace.

2006-06-12  Per Bothner  <per@bothner.com>

	* Invoke.java (checkKnownClass): New method.
	(inlineClassName): Use it.
	* SlotGet.java (inline): Likewise.

2006-05-30  Per Bothner  <per@bothner.com>

	* SlotGet.java (inline): Fix bug in handling of "class" pseudo-field.

2006-05-09  Per Bothner  <per@bothner.com>

	* SlotGet.java (lookupMember): If null caller - as when evaluating -
	the use Object instead to check for accessibility.
	* SlotSet.java (lookupMember): Likewise.

2006-04-23  Per Bothner  <per@bothner.com>

	* InstanceOf.java (inline): Fold if constant.

2006-03-27  Per Bothner  <per@bothner.com>

	* SlotGet.java (getSlotValue, inline): Pass unmangled rather than
	mangled name to ClassExp.slotToMethodName.
	* SlotSet.java (apply): Likewise.
	(inline): Don't call ClassMethods.checkName, which mangles.
	* SlotSet.java (inline): Combine Field/Method handling using Member.

	* SlotGet.java: If the slot name is literal but we don't know the
	object type, then pre-mangle the field name at compile time.
	Based on an idea and prototype by Dean Ferreyra <dferreyra@igc.org>.
	(getSlotValue): New static function.
	(apply2): Call getSlotValue.
	(inline): Rewrite to do field lookup now rather than at compile time.
	(getReturnType): Can therefore be simplified.
	(inline): If field unknown but field name literal, replace by
	invocation of getSlotValue.

2006-03-25  Per Bothner  <per@bothner.com>

	* SlotGet.java (slotRef): New field.

2006-03-24  Per Bothner  <per@bothner.com>

	* SlotGet.java (makeGetField): Change return type.

2006-03-17  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (getInstance): New factory method.

2006-03-15  Per Bothner  <per@bothner.com>

	* InstanceOf.java (language): Make protected, for use by new CastableAs.

	* Invoke.java (inlineClassName): Don't lower a PairClassType to its
	implementationType - that's only correct for 'make' - which does not
	use this method.

2006-03-13  Per Bothner  <per@bothner.com>

	* OccurrenceType.java (compare): Instead of a throw return -2.

	* SlotGet.java (apply): Fix WrongType exception value thrown.

2006-03-03  Per Bothner  <per@bothner.com>

	* Invoke.java (inlineClassName): Make return type more specific.

2006-02-19  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Combine two methods into one,
	and simplify parameter list to take a 'mode'.
	Pass mode to PrimProcedure constructor.
	(apply - both variants): Simplify parameter list.
	* Invoke.java (invoke): New can also match static methods.
	(apply(Objct[],CallContext)): Merge into caller.
	Handle more kinds.
	(applyN(Invoke,Object[])): Merge into caller.  Likewise handle more.
	(lookupMethods): New method.
	(apply, applyN): Use it.
	(getMethods): Handle more kinds.

	* SlotGet.java (getField): Return Member, and rename to lookupMember.
	(compile, getReturnType): Update accordingly.
	* SlotSet.java (lookupFieldOrMethod): Rename to lookupMember,
	and change return type to Member.
	(compile): Update accordingly. Can now simplify a bit.
	* Invoke.java (checkKeywords): Update appropriately.

2006-02-09  Per Bothner  <per@bothner.com>

	* Invoke.java (inline): Don't inline, unless mustCompile.
	* SlotGet.java (inline): Likewise.
	* SlotSet.java (inline): Likewise.

	* ArrayGet.java (apply2): Added missing coercion.

2006-02-07  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java: Remove no-longer needed file.
	* Makefile: Update accordingly.
	* ClassMethods.java (apply): Extra Language parameter.
	* Invoke.java: Update callers.

2006-02-06  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java: Remove a bunch of no-longer needed crub.
	The entire file will be removed soon.

2006-02-01  Per Bothner  <per@bothner.com>

	* ArrayGet.java (compile): Use ArrayType.make rather than creating
	a new ArrayType - which may not compare correctly.
	* ArrayLength.java (compile): Likewise.
	* ArrayNew.java (compile, getReturnType): Likewise.
	* ArraySet.java (compile): Likewise.

2006-01-24  Per Bothner  <per@bothner.com>

	* SlotSet.java (getField): Look for method using getMethod rather than
	getDeclaredMethod, so we can check inherited methods.
	Fixes bug introduced 2006-01-11.

2006-01-20  Per Bothner  <per@bothner.com>

	* Invoke.java: Extend 'make' procedure for primitive-array allocation.
	(typeFrom): Allow to return an ArrayType if this is 'make'.
	(apply, applyN): Update call-sites accordingly.
	(applyN, inline): Handle allocation of arrays.

	* Invoke.java (typeFrom): Fix arguments to WrongType constructor.
	We used to get a NullPointerException is WrappedException.<init>.

2006-01-11  Per Bothner  <per@bothner.com>

	* SlotSet.java (apply2): Use WrappedException.wrapIfNeeded.

	* SlotSet.java (getField): Simplify seraching for a setter method.
	Specifically, look for any 1-argument method.

2006-01-05  Per Bothner  <per@bothner.com>

	* SlotGet.java: Use new Compilation.loadClasRef variant.

2006-01-04  Per Bothner  <per@bothner.com>

	* SlotGet.java (getField, compile): Pass the declaring-class of the
	field or method to isAccessible, not the possibly-derived class.
	* SlotSet.java (getField, compile): Likewise.

2005-12-05  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile): Don't return compile-time-class for "class",
	unless isStatic.  Fixes Savannah bug #15151.

2005-12-03  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java (CLASSTYPE_FOR): New constant.
	(makeExp): New method overloading.

2005-11-28  Per Bothner  <per@bothner.com>

	* SlotSet.java (compileSet):  Coerce argument to language-specific
	type, using new getLangTypeFor method. Use CheckedTarget.

	* SlotSet.java (compile): Fix name - for error message.

2005-11-25  Per Bothner  <per@bothner.com>

	* Invoke.java (checkKeywords): Take caller parameter.
	* SlotGet.java (getField): Use new caller parameter so we can look
	for method if Field isn't applicable.
	Simplify - type is always ClassType and name is always non-null.
	* SlotSet.java (getField): Likewise.

2005-11-23  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN): Don't need to check for staticLink here.
	Instead, assume extra parameter for ClassType.
	(inline): Can more inline constructors regardless of whether
	there is or will be a static link.

2005-11-22  Per Bothner  <per@bothner.com>

	* SlotGet.java (getField): Adjust for updated ClassType.getField,
	to request all fields, not just public|protected ones.
	* SlotSet.java (getField): Likewise.

2005-11-16  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2): Use WrappedException.

	* ClassMethods.java (getMethods): Pass caller's package, if known,
	as context to ClassType.getMethods.

2005-10-16  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods): Kludge to search Type.string_type
	rather than type.tostring_type for methods.

2005-09-25  Per Bothner  <per@bothner.com>

	* Invoke.java (typeFrom): New private helper method.
	(apply(CallContext), apply(Object[],CallContext)): New methods.
	(applyN): Use typeFrom.
	* ClassMethodProc.java (kind): New field.
	(fixup): New method to initialize 'kind' field.
	(make, readExternal): Use fixup.
	(apply(CallContext)): New method - optimimization.
	(applyN, rewrite): Slight optimization by using kind field.
	(rewrite): Generalize func to handle QuoteExp and ReferenceExp.
	(toString): New method.

2005-08-08  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java (castDecl): New static field.
	(CAST_METHOD_NAME, INSTANCEOF_METHOD_NAME): New constants.
	(applyN, rewrite): Support class cast operation.

2005-08-07  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2, compile): Implement "class" pseudo-field.

2005-08-04  Per Bothner  <per@bothner.com>

	* Invoke.java (getClassType, inline): Inline in 2-argument inline
	(inline): Overload to take a Compilation.
	* Invoke.java (inline): Allow inlining of constructor even if it
	doesn't yet exist as long as the class is static.

2005-08-03  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java: Major rewrite. Now extends ProcedureN
	rather than GenericProc.
	(getMethods, inline, isApplicable, mtch0, match1, match2, match,
	match4, numArgs): Remove no-longer-appropriate methods.
	(makeExp, applyN, setN, rewrite): New methods.
	(makeMethod, makeMethodExp, fieldDecl, staticFieldDecl, makeDecl,
	invokeDecl, invokeStaticDecl): New static fields.

	* SlotSet.java (setField$Ex): Rename to set$Mnfield$Ex to match current
	mangling scheme for field names.
	(setStaticField$Ex): Likewise rename to set$Mnstatic$Mnfield$Ex.
	* SlotGet.java (field, staticField): Update setter references.

	* FieldLocation.java (get): Return defaultValue on setup exception.

2005-07-21  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (defineAll): Inline one overload in other,
	since we we only need/use one variation.

2005-07-20  Per Bothner  <per@bothner.com>

	* StaticFieldLocation.java (isConstant): Remove - use inherited method.

2005-06-02  Per Bothner  <per@bothner.com>

	* FieldLocation.java (getDeclaration): Trivial improvement.

2005-05-27  Per Bothner  <per@bothner.com>

	* FieldLocation.java (get): Fix handling of INDIRECT_LOCATION.

2005-05-19  Per Bothner  <per@bothner.com>

	* ClassMethods.java (checkMethod): New method overloading.
	* SlotGet.java (compile): Use new method to avoid premature mangling.
	(getField): Instead, we have to mangle a field name here.

2005-05-17  Per Bothner  <per@bothner.com>

	* Invoke.java (inline): Fix logic error in okCount==0 case.
	(append): New private jeper method.
	(inline): Use append to format warnings.

2005-05-14  Per Bothner  <per@bothner.com>

	* StaticFieldLocation.java (get): Setting value field from result
	of super.get violates latter's invariant.

2005-04-20  Per Bothner  <per@bothner.com>

	* FieldLocation.java (setup): Call super.setup() to set rfield.

	* ClassMemberLocation.java (setup): Use initCause to set cause, if
	use:java.lang.Throwable.getCause PreProcess keyword is set (default).

2005-03-29  Per Bothner  <per@bothner.com>

	* FieldLocation.java (isIndirectLocation): Make public - for require.
	(getDeclaration): Get declaration via ModuleInfo.

2005-03-28  Per Bothner  <per@bothner.com>

	* SlotGet.java (field, staticField): Make fields final.
	* SlotGet.java (compile): Remove ineffective/obsolete test for
	indirection if Symbol - was never updated to use Location.
	(apply): Remove extra indirection if Location.
	* SlotSet.java (apply, compile): Likewise.

2005-03-24  Per Bothner  <per@bothner.com>

	* FieldLocation.java (getField, getFType): New methods.

	* FieldLocation.java (getDeclaration): Do setKindFlags if needed.

2005-03-23  Per Bothner  <per@bothner.com>

	* FieldLocation.java (PROCEDURE, SYNTAX, KIND_FLAGS_SET): New flags.
	(setProcedure, setSyntax): Also set CONSTANT and KIND_FLAGS_SET.
	(setKindFlags): New function.
	(isProcedureOrSyntax, getDeclaration, setup): Use setKindFlags.
	(isConstant, isBound):  Use setKindFlags to avoid loading class..

2005-03-16  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (defineAll): Skip PRIVATE_PREFIX and
	"*$instance" fields.

2005-03-11  Per Bothner  <per@bothner.com>

	* FieldLocation.java (PROCEDURE, SYNTAX): New constants.
	(setup): Tweak accordingly.
	(setProcedure, setSyntax, isProcedureOrSyntax): New methods.
	* StaticFieldLocation.java (define): Return StaticFieldLocation.

2005-03-07  Per Bothner  <per@bothner.com>

	* InstanceOf.java: Update Interpreter -> Language.

2005-03-04  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java: Update Interpreter -> Language.
	* SlotGet.java: Likewise.
	* SlotSet.java: Likewise.

2005-03-03  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (getInstance, setInstance): New methods.
	(make): Remove method.
	* FieldLocation.java: Mew class, extends ClassMemberLocation.
	* Makefile.am: Update accordingly.
	* StaticFieldLocation.java: Changed to extend FieldLocation.
	(decl, value, getDeclaration): Moved to FieldLocation.

2005-03-02  Per Bothner  <per@bothner.com>

	* InstanceOf.java (emitIsInstance): Update getInterpreter->getLanguage.

2005-02-24  Per Bothner  <per@bothner.com>

	* ClassMethodProc.java: Update Interpreter->Language.
	* ClassMethods.java: Likewise.
	* Invoke.java: Likewise.

2005-02-07  Per Bothner  <per@bothner.com>

	* ClassMethods.java (classMethods): New static field.

	* StaticFieldLocation.java (make): New static factory method.
	* ClassMemberLocation (make(String,String)): Remove factory method.

2005-01-29  Per Bothner  <per@bothner.com>

	* ClassMethods.java (apply(String, String)): Remove no-longer-used
	static method.

2005-01-07  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2): Update to use non-deprecated method.

	* StaticFieldLocation.java: Split imports to avoid gcj 3.4.2 bug.

2004-12-29  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (define): Minor non-functional tweaks.

	* StaticFieldLocation.java: New constructor - currently unused.

2004-12-27  Per Bothner  <per@bothner.com>

	* ClassMemberLocation.java (defineAll): Ignore fields whose names
	start with PRIVATE_PREFIX.

2004-12-07  Per Bothner  <per@bothner.com>

	* SlotGet.java: Update to use Location in place of Symbol.
	* SlotSet.java: Likewise.

	* ClassMemberConstraint.java: Removed class, replaced by ...
	* ClassMemberLocation.java: New class, extends Location.
	* StaticFieldConstraint.java: Removed class, replaced by ...
	* StaticFieldLocation.java: New class, extends ClassMemberLocation.
	* Makefile.am: Update accordingly.

2004-12-05  Per Bothner  <per@bothner.com>

	* Invoke.java (inline): Add overloading.  Support constructing
	PairClasstype instances with static-link.

	* ClassMethodProc.java: New class, extends GenericProc.
	* Makefile.am: Update accordingly.

2004-10-14  Per Bothner  <per@bothner.com>

	* InstanceOf.java (compile):  Call usedClass.
	Fixes bug reported today by Dominique Boucher.

2004-08-05  Chris Dean  <ctdean@sokitomi.com>

	* SlotGet.java (Inlineable):  Check for "isFname" methods.
	* SlotSet.java (Inlineable):  Likewise.

2004-08-08  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN):  Use new matchN method.  Don't use applyV.
	* TypeSwitch.java (apply):  Use new matchN/check0 methods.

2004-08-03  Per Bothner  <per@bothner.com>

	* TypeSwitch.java:  Extend MethodProc instead of CpsProcedure.

2004-07-20  Per Bothner  <per@bothner.com>

	* ArrayLength.java:  Remove unused import statements.
	* TypeSwitch.java:  Likewise.

2004-05-03  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  If existing constaint is
	ClassMemberConstraint and value is the same, do nothing.  This fixes
	an optimization bug where car/cdr GenericProcs did not get resolved.

2004-04-17  Per Bothner  <per@bothner.com>

	* Invoke.java (inline):  Suppress most warnings if the flag
	warn-invoke-unknown-method flag is turned off.

2004-02-11  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods - two overloads):  New parameter
	'caller'; pass it to MethodFilter.  Remove redundant modifiers test.
	(class MethodFilter):  Add caller field.
	(select):  Check if method is accessible.
	* Invoke.java (getMethods):  New parameter 'caller'.
	(inline):  Get our calling class and pass it to getMethods.
	(getMethods(5 params)):  Inline in getStaticMethod.
	* SlotGet.java (compile):  Check if field/method is accessible.
	* SlotSet.java (compile):  Check if field/method is accessible.

2003-11-09  Per Bothner  <per@bothner.com>

	* ClassMethods.java (class MethodFilter):  Enhance so it also matches
	methods whose names in "$X" or "$V$X".

2003-10-30  Per Bothner  <per@bothner.com>

	* OccurrenceType.java:  Change to extends ObjectType.  This sets
	size to 4 so isVoid returns false.

	* OccurrenceType.java (toString):  New method.

2003-10-19  Per Bothner  <per@bothner.com>

	* Invoke.java (inline):  Check 'warn-invoke-unknown-method' option
	before emitting warning.

2003-10-07  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Check for Procedure
	whose name is a Symbol.

2003-09-30  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (get):  Inline the 'setup' method,
	but return defaultValue instead of throwing UnboundSymbol.

2003-08-09  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Demangle field name
	when field is non-final.

2003-07-15  Chris Dean  <Chris.Dean@sokitomi.com>

	* ClassMethods.java (removeRedundantMethods):  New helper method.
	(getMethods):  Handle extra is_special flag, for invoke-special.
	* Invoke.java (invokeSpecial):  New static field.
	(applyN):  Check for and dis-allow invoke-special.
	(getMethods):  Handle invoke-special.
	
2003-07-12  Chris Dean  <Chris.Dean@sokitomi.com>

	* ArrayGet.java (Externalizable): Implement writeExternal, 
	readExternal.  Fixes Savannah bug #4289
	* ArraySet.java (Externalizable): Likewise
	* ArrayNew.java (Externalizable): Likewise
	* ArrayLength.java (Externalizable): Likewise
    
2003-06-06  Per Bothner  <per@bothner.com>

	* Invoke.java (inlineClassName, inline): Call ApplyExp.setLine.

2003-05-17  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN, applyN):  Use Symbol's getName method.

	* Invoke.java (inlineClassName):  Take InlineCalls parameter instead
	of Interpreter.  Get latter from former.
	If type is a Classtype and isExisting, emit error is not found.

	* InstanceOf.java (inline):  Update call to inlineClassName.
	* SlotGet.java (inline):  Likewise.
	* SlotSet.java (inline):  Likewise.

2003-05-16  Per Bothner  <per@bothner.com>

	* ClassMethods.java (checkName):  Take new 'reversible' parameter.
	* Invoke.java (getMethodName):  Pass false to checkName.
	* SlotGet.java (compile, getReturnType):  Pass true to checkName.
	* SlotSet.java (compile):  Likewise.
	Fixes bug reported 05-13 by Chris Dean <Chris.Dean@sokitomi.com>.

2003-05-13  Per Bothner  <per@bothner.com>

	* OccurrenceType.java:  New class, extends Type.
	* Makefile.am (java_sources):  Add new file.

2003-05-04  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN):  Revert 04-30 change.
	* ClassMethods.java (apply):  Mangle method names non-reversibly.
	(checkName):  Likewise.

2003-04-30  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN):  Use mangleNameIfNeeded rather than plain
	mangleName for consistency.

2002-11-23  Per Bothner  <per@bothner.com>

	* StaticFieldConstraint.java:  Moved from kawa.standard.
	* Makefile.am (java_sources):  Add new file.

2002-11-20  Per Bothner  <bothner@bothner.com>

	* ClassMethods.java:  Convert from ProcedureN to Procedure2.
	(apply2):  New method, replaces applyN.
	(apply(String,String)):  New method.

	* InvokeNamed.java:  Remove - don't need it after all.
	* Makefile.am:  Update accordingly.

2002-11-16  Per Bothner  <per@bothner.com>

	* InvokeNamed.java:  New class, extends ProcedureN.
	* Makefile.am (java_sources):  Add InvokeNamed.java.

2002-11-15  Per Bothner  <per@bothner.com>

	* ClassMethods.java (checkName):  Use Symbol's getName, not toString.

2002-11-10  Per Bothner  <per@bothner.com>

	* Invoke.java (kind):  New otpions 's' is static methods only;  'S' is
	changed to static or non-static (as documented for invoke-static).
	(applyN, getMethods, inline):  Handle both 's' and 'S' kinds.
	(inline):  If kinds=='S' and there is a single definitely ok static
	method, prefer it over non-static methods.

2002-09-26  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Special handling for aliases,
	recognized by having the type gnu.mapping.Location.

2002-09-21  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile):  If there is no reflect-class (mapbe because
	we're currently compiling it), don't try to get its lang-specific type.

	* Invoke.java (inline):  Don't inline 'make' for new non-existing type.

2002-08-16  Per Bothner  <per@bothner.com>

	* Invoke.java (inlineClassName):  Allow plain Type, not just
	ClassType.  This allows (as <int> exp) to be inlined better.

2002-08-07  Per Bothner  <per@bothner.com>

	* SlotSet.java (compile):  Handle cals whose 2nd arg is a Field or
	Method, as created when inlining (make <type> field: value).

2002-07-25  Per Bothner  <per@bothner.com>

	* SlotSet.java (returnSelf):  New field.
	(setFieldReturnObject):  New static final field.
	(apply3, compile, getReturnType):  Handle returnSelf.
	* Invoke.java:  No longer implement Inlineable.
	(compile, getReturnType):  Remove methods.
	(inline):  Enhance, using most of the old logic from compile.
	We can do better type propagation easier this way.

2002-07-21  Per Bothner  <per@bothner.com>

	* InstanceOf.java, Invoke.java, SlotGet.java, SlotSet.java,
	TypeSwitch.java (inline):  Update to take extra ExpWalker parameter.

2002-06-18  Per Bothner  <per@bothner.com>

	* SlotSet.java (getField):  Call Compilation.mangleNameIfNeeded.

2002-06-05  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile):  Convert field type to language type.

	* SlotGet.java (apply2, inline):  Use getInterpreter method.

2002-05-19  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (setup):  Fix name/this.name confusion.

2002-02-12  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  If value is Named,
	handle case where getName() returns null.

	* Invoke.java (applyN):  Use CallContext.getInstance().

2002-01-31  Per Bothner  <per@bothner.com>

	* Invoke.java (inlineClassName):  New static method.
	* Invoke.java:  Implement CanInline.
	(inline): New method calls inlineClassName
	* InstanceOf.java:  Likewise.
	* SlotGet.java:  Likewise.
	* SlotSet.java:  Likewise.

2001-12-24  Per Bothner  <per@bothner.com>

	* TypeSwitch.java:  New class, implements XQuery 'typeswitch'.
	* Makefile.am (java_sources):  Update accordingly.

	* InstanceOf.java (emitIsInstance):  New static helper method.
	(compile):  If type us TypeValue, calls its emitIsInstance method.

2001-11-24  Per Bothner  <per@bothner.com>

	* SlotGet.java (makeGetField):  New method, moved from Expression.

2001-11-21  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods):  Match change in ClassType's
	getMethods class.  Now use "-" to specify "no package" - i.e. skip all
	private classes.  Fixes problem reported by Walter Pelissero

2001-11-18  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods):  Use ClassType's new getMethods
	method, using Vector instead of Method[].
	Fix off-by-one loop when duplicate found - don't increment i.

2001-11-05  Per Bothner  <per@bothner.com>

	* Invoke.java (compile):  Better warning - list applicable methods.

2001-10-19  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (get):  New takes defaultValue param.

	* Invoke.java:  Various methods now specify throws Throwable.

2001-10-05  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (set):  If we cannot set the field,
	change the constraint to a TrivialConstraint (kludge).

2001-08-30  Per Bothner  <per@bothner.com>

	* ClassMethods.java (checkName):  Use mangleNameIfNeeded.
	* SlotGet.java (apply2):  Likewise.
	* SlotSet.java (apply):  Likewise.

2001-08-23  Per Bothner  <per@bothner.com>

	* Invoke.java:  Update for PairClassType field rename.

	* ClassMemberConstraint.java (define):  Use reversible demangling.

2001-08-16  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  If value isn't a Named,
	then demangle the field name.

	* Invoke.java (applyN):  Handle PairClassType and staticLink.
	(getClassType):  If PairClassType, get its instance class.

	* SlotGet.java (apply2, getField):  Use ClassExp.slotToMethodName.
	(getField):  Make static.
	* SlotSet.java (apply,, getField):  Use ClassExp.slotToMethodName.

2001-07-17  Per Bothner  <per@bothner.com>

	* SlotSet.java (isStatic):  Make non-static (duh).
	(setField$Ex, setStaticField$Ex):  New static final fields.
	(<init>):  New constructor.
	(setField, setStaticField):  New static methods.
	(apply):  Take extra isStatic parameter.
	(apply3):  Pass this.isStatic to apply.
	* Invoke.java (applyN):  Pass extra arg to SlotSet.apply.
	* SlotGet.java (set2):  Likewise.
	(setter):  New field.
	(<init>):  New init also takes setter arg.
	(field, staticField):  Specify setters.
	(getSetter):  New method.

	* SlotGet.java (apply2):  If field is final Binding, get its value.
	(compile):  Likewise handle case of indirect Binding field.
	* SLotSet.java (apply):  If field is final Binding, set its value.
	(compileSet):  Likewise handle case of indirect Binding field.

	* ClassMemberConstraint.java:  Better error messages if unbound.

2001-06-19  Per Bothner  <per@bothner.com>

	* Invoke.java:  Handle method name symbol implemented using Binding.
	* ClassMethods.java:  Likewise.

2001-05-16  Per Bothner  <per@bothner.com>

	* ArrayLength.java:  Update to use LangPrimType.
	* SlotGet.java:  Likewise.

2001-03-08  Per Bothner  <per@bothner.com>

	* ClassMethods.java, SlotGet.java:  Update for new gnu.lists.Fstring.

	* Invoke.java (compile):  Better error messages.

2000-12-13  Per Bothner  <per@bothner.com>

	* SlotGet.java (compile):  Comment out Oct 12 change - it isn't safe.

2000-10-12  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (field):  Remove field;  don't use
	gnu.bytecode.Field; only java.lang.reflect.Field.

	* Invoke.java (invoke, invokeStatic, make):  Make fields final.

	* Invoke.java (compile):  Catch missing-class exception; emit warning.

	* SlotGet.java (set2):  Swap argument order for new setter convention.

	* SlotGet.java (compile):  Inline final static int fields.

	* InstanceOf.java (<init>):  New constructor.

2000-08-17  Per Bothner  <per@bothner.com>

	* Invoke.java (applyN):  Update for new MethodProc protocol.

2000-06-17  Per Bothner  <per@bothner.com>

	* InstanceOf.java:  Moved from kawa.standard.
	* Makefile.am:  Update accordingly.

2000-06-09  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Re-structure.

2000-05-28  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2): Use Values.noArgs instead of Procedure.noArgs.

	* ClassMemberConstraint.java (define):  Trivial optimization.

2000-05-22  Per Bothner  <per@bothner.com>

	* ClassMethods.java (class MethodFilter):  New non-public class.
	(getMethods):  Re-write to use ClassType's getMethods.
	(selectMethod, getMethods, getConstructors):  Remove methods.
	* Invoke.java (interpreter):  New field.  Use it.
	(getStaticMethod, getMethod):  New methods.

2000-05-09  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):	Just use the new version of
	the Environment define method.

2000-04-12  Per Bothner  <per@bothner.com>

	* SlotGet.java (apply2, compile, getReturnType):  Handle 'length
	of an array as a special case.

2000-03-17  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Sigh.  Put in some kludge
	for languages with dual separate namespaces.

2000-02-27  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (define):  Since kawa.lang.Syntax now
	implements Named, we no longer need special case for it.

	Various tweaks for better javadoc processing.
	* package.html:  New file.

2000-01-31  Per Bothner  <per@bothner.com>

	* ClassMethods.java (getMethods):  Interpreter is now in gnu.expr.
	(apply):  Change to Interpreter.defaultInterpreter.
	* SlotGet.java (apply2):  Likewise.
	* SlotSet.java (apply):  Likewise.

2000-01-24  Per Bothner  <per@bothner.com>

	* ArrayGet.java:  Moved/renamed from kawa/lang/PrimArrayGet.java.
	* ArraySet.java:  Moved/renamed from kawa/lang/PrimArraySet.java.
	* ArrayNew.java:  Moved/renamed from kawa/lang/PrimArrayNew.java.
	* ArrayLength.java:  Moved/renamed from kawa/lang/PrimArrayLength.java.
	* StaticGet.java:  Moved/renamed from kawa/lang/GetStatic.java.
	* StaticSet.java:  Moved/renamed from kawa/lang/SetStatic.java.
	* Makefile.am, Makefile.in (java_JAVA):  Update for now classes.

2000-01-23  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (<Init>(Field)):  New constructor.
	(defineAll, define):  New static methods.

1999-12-27  Per Bothner  <per@bothner.com>

	* ClassMemberConstraint.java (<init>):  New constructor.
	(define):  New static method.

1999-12-06  Per Bothner  <per@bothner.com>

	* Invoke.java (getMethods):  Set cacheArgs *after* recursive call done.
	(compile):  Use methods instead of acheMethods.

	* ClassMemberConstraint.java:  New class;  extends Constraint.
	* Makefile.am, Makefile.in (java_JAVA): Add ClassMemberConstraint.java.
	* Invoke.java (applyN):  Throw exception if no applicable method found.
	(getMethods):  Add argsToSkip parameter.
	(compile, getReturnType):  Fix getMethods call.
	(makeInvokeStatic):  New method.

1999-11-15  Per Bothner  <per@bothner.com>

	* ClassMethods.java (selectApplicable, apply):  New static methods.
	(checkName):  New helper method.

	* Invoke.java:  Generalize to subsume InvokeStatic and MakeInstance.
	Also implement Inlineable.
	* InvokeStatic.java:  Remove class - subsumed by Invoke.
	* MakeInstance.java:  Remove class - subsumed by Invoke.
	* Makefile.am, Makefile.in (java_JAVA):  Remove rmeoved classes.
	* SlotGet.java, SlotSet.java:  Also handle `static-field'.
	Implement Inlineable.

1999-11-03  Per Bothner  <per@bothner.com>

	* ClassMethods.java (apply):  Check if method isApplicable.

	* InvokeStatic.java (invokeStatic):  New static field.
	(apply$V):  New method.
	(getMethod):  Pass argument types to ClassMethods.apply.
	* MakeInstance.java (getMethod):  Likewise.

1999-10-25  Per Bothner  <per@bothner.com>

	* ClassMethods.java (apply):  Return MethodProc, not Procedure.
	* MakeInstance.java:  Make it implement Inlineable.
	Handle "<init>" specially.
	* Invoke.java:  New class; extends ProcedureN.
	* Makefile.am, Makefile.in (java_JAVA):  Add Invoke.java.

1999-09-14  Per Bothner  <per@bothner.com>

	New package.
	* ClassMethods.java:  Moved from kawa/standard/class_methods.java.
	* InvokeStatic.java:  Moved from kawa/lang/InvokeStatic.java.
	* MakeInstance.java:  New, but subsumes kawa/standard/make.java.
	* SlotGet.java:  Moved from kawa/standard/field.java.
	* SlotSet.java:  New class.
	* Makefile.am, Makefile.in:  New files.
