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

	* ModuleInfo.java (checkCurrent): Use ClassType.getContextClass.

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

	* Language.java (formatType): New method.

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

	* ModuleInfo.java (find): Set moduleClass field.

	* ModuleInfo.java (checkCurrent): Use context-ClassLoaxder rather than
	ModuleManager's defaultClassLoader.  Recover from SecurityException.
	* ModuleManager.java (defaultClassLoader): Remove no-longer-used field.
	* ModuleExp.java (evalToClass): Pass context ClassLoader as parent
	of new ArrayClassLoader.  Catch SecurityException.
	(evalToClass): Use one-argument version of loadClass, since
	2-argument version is now protected if JAVA2 is enabled.
	* Compilation.java (setupLiterals): Likewise.

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

	* ModuleManager.java (findWithSourcePath(Path,String)): New method.
	(findWithURL): Pass actual URL by using new method.
	* ModuleExp.java (classFor): Update to use Paths and more robust
	handling of URL-to-classname mapping.

	* ModuleExp.java (classFor): Update "<stdin>" to "/dev/stdin".

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

	* ModuleInfo.java (sourceAbsPath): Change to Path and non-public.
	(sourceAbsPathname): New field.
	(getSourceAbsPath, setSourceAbsPath, getSourceAbsPathname): New methods.
	(absPath): Radically simplify to use Path's getCanonical.
	(setCompilation, checkCurrent): Update accordingly.
	* ModuleManager.java (searchWithAbsSourcePath, findWithSourcePath):
	Update accordingly.
	(register): Update to use Path functions.
	* Compilation.java (generateBytecode): Likewise.

	* ModuleExp.java (evalToClass): If no url given, use Path.currentPath.

	* LambdaExp.java (allocChildMethods): For non-static ClassExp do
	setOuterLink here, so we can call constructor before class is compiled.
	* ClassExp.java (compile): Don't setOuterLink here any more.

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

	* PrimProcedure.java (apply): Special handling for "clone" of array.

	* LitTable.java (emit): Also look for 'valueOf' for factor method.

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

	* PrimProcedure.java (getMethod): New method.

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

	* ModuleBody.java (runAsMain): Remove long-deprecated method.

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

	* Compilation.java (setLine): Moved from Translator.

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

	* ModuleExp.java (evalModule): If ExceptionInInitializerError is
	thrown, re-throw its cause.

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

	* InlineCalls.java (walkLetExp): Check for null (unknown) declaration.

	* Keyword.java (writeExternal, readExternal, readResolve): New methods,
	since serialization inherited from Symbol doesn't match 'make'.

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

	* Compilation.java (registerClass): Don't set Access.SUPER if interface.

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

	* Language.java (parse): New final method that takes option ModuleInfo.
	Have other final parse methods use it.
	* ModuleInfo.java (sourceURL): Relace/rename field by ...
	(sourcePath, sourceAbsPath): New methods.
	(absPath): New static method.
	(setCompilation): Set both sourcePath and sourceAbsPath.
	* Compilation.java (generateBytecode): Adjust relative source path.
	* ModuleManager.java (searchWithSourcePath): Rename to
	searchWithAbsSourcePath since it assumes argument is absolute.
	(register): Resolve relative sourceUrl.

	* ModuleManager.java (defaultClassLoader): New field, replaces
	static field in kawa.repl.
	(setCompilationDirectory, getCompilationDirectory): New methods.

	* Compilation.java (process): Use getCompilationDirectory.

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

	* Language.java (hasNamespace): New method.
	* NameLookup.java (lookup): Use hasNamespace,
	* ScopeExp.java (lookup): Compare symbols using equals.
	(lookup): Check namespace using hasNamespace.
	(duplicateDeclarationError): New static method.
	(getDefine): Use duplicateDeclarationError.
	* LambdaExp.java (OVERLOADABLE_FIELD): New constant,
	(allocFieldFor): If OVERLOADABLE_FIELD add unique suffix.

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

	* GenericProc.java (matchN): Make a pre-pass to prefer those methods
	that are applicable.

	* PrimProcedure.java (matchN): Trivial re-arranging - move tr/catch
	inwards so it is only "executed" when we need to do a coercion.

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

	* FindTailCalls.java (walkReferenceExp): If the variable has void
	type replace it by the void constant.

	* Keyword.java: Rename Consumer methods append->write.
	* Special.java: Likewise.
	* Symbols.java: Likewise.

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

	* Compilation.java (loadCallContext): Don't use existing callContextVar
	if it is dead().  Otherwise, do re-use existing callContextVar.

	* Keyword.java (print): Update since parameter is now a Consumer.
	* Special.java: Likewise.
	* Symbols.java (print): Change parameter to take a Consumer.
	* Expression.java (print): Handle general Consumer.

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

	* Special.java (undefined): New static field.
	(optional, rest, key, dfault, eof): Make final.
	* Undefined.java: Removed class.
	* Makefile.am: Update accordingly.
	* Copilation.java (scmUndefinedType): Remove unused field.
	* QuoteExp.java: Update Undefined.getInstance() -> Special.undefined.

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

	* Compilation.java (generateBytecode): Save/restore callContextVar
	within clinit.
	(clinitMethod, callContextVarForInit): New fields.
	(generateBytecode): Save $ctx for "run" method in callContextVar.
	(loadCallContext): For now don't try to reuse/cache variable
	expect within clinit.

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

	* ConsumerTarget.java: Update writeChar -> append.

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

	* ConsumerTarget.java (compileFromStack): New overload.
	(compileWrite): New method, to optimize awa a swap.
	* ReferenceExp.java (compile): Use compileWrite.

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

	* QuoteExp.java (compile): Use compileConstant directly in more cases.
	(getType): Don't cache result - it changes the behavior of compile.
	(voidExp, nullExp): Set type explicitly.

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

	* Expression.java: Implement SourceLocator.
	(setLocation): New method.
	(getFile, getLine, getColumn): Rename to getFileName, getLineNumnber,
	getColumnNumber.
	* ExpWalker.java: Implement SourceLocator.
	* Declaration.java: Implement SourceLocator.
	(getFile, getLine, getColumn): Rename to getFileName, getLineNumnber,
	getColumnNumber.
	* Compilation: Implement SourceLocator.
	(error): Generalize.
	* ClassExp.java: Update.
	* LambdaExp.java: Update.
	* ModuleInfo.java: Update.
	* ErrorExp.java: Update.
	* BindingInitializer.java: Update.
	* ModuleExp.java: Update.
	* ProcInitializer.java: Update.
	* CheckedTarget.java: Update.
	* ReferenceExp.java: Use new UnboundLocationException constructor.

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

	* Language.java (print): Remove unused methods.

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

	* LetExp.java (compile): Don't allocateVarianble unless Declaration
	needsInit().

	* SeriesTarget.java (done): Can now be null.
	(compileFromStackSimple): Do goto 'done' if needed.
	(compileFromStack): Handle the case when 'done==null'.
	Bemore specific about "function" parameter type - it is a singleton.
	(toString): New method.
	* Compilation.java (compileConstant): Fix handling when literal is
	Values and target is a SeriesTarget.

	* ScopeExp.java (replaceFollowing): Also set context of newDecl.

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

	Minor optimization to avoid storing unused parameters of
	inline-only functions.  Happens most for XQuery implied paramaters,
	such as position() when it is unused.
	* ApplyExp.java (pushArgs): New helper method.  Don't push
	ignorable parameters.
	(compile): Use it, for both inline-only and tail-calls.
	(popParams): Also pass along Declaration, so we can check ignorable().
	* LambdaExp (allocChildClasses):   Don't allocate Variable if
	parameter is ignorabled() and function is inline-only.

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

	* SeriesTarget.java (isSingletonType): Removed, replaced by
	new and enhanced OccurrenceType.itemCountIsOne.
	(compileFromStack): Update accordingly.
	* ConsumerTarget.java (compileFromStack): Likewise.

	* ApplyExp.java (inlineIfConstant): Trivial improvement.

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

	* ConsumerTarget.java (compileFromStack): Resolve to
	implementationType.

	* QuoteExp.java (compile): Handle the case when we have an
	explicit type for the constant, whih may require special conversion.

	* InlineCalls.java (walkIfExp): Must walk then/else
	after constant folding.

	* ApplyExp.java (getArg, setArg): New method.

	* ApplyExp (print): Also print type if interesting.

	* ApplyExp (getTypeRaw, setType): New methods.
	* QuoteExp.java (type): New field.
	(getType): Update to use/set type field.
	* IfExp.java (getType): New method.

	* Expression.java (valueIfConstant): New method.
	* QuoteExp.java	 (valueIfConstant): New method.
	(<init>): New constructor which also takes explicit type.

	* ModuleInfo.java (setupModuleExp): If moduleClass is non-null,
	use that as the Class.  This fixes Savannah bug #15881 "classnotfound
	exception compiling application of define-syntax macro".

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

	* QuoteExp.java (inline): Minor optimization - reuse ApplyExp.

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

	* ExpWalker.java (walkDeclarationType, walkDeclarationTypes): New.
	(walkScopeExp): Use walkDeclarationTypes.
	* ResolveNames.java (walkScopeExp): Likewise.

	* Expression.java (toString): New method
	* ApplyExp.java (toString): New method

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

	* ExpWalker.java (currentLambda): Make protected, for XQResolveNames.

2006-10-25  Chris Wegrzyn <chris.wegrzyn@gmail.com>
	    Per Bothner  <per@bothner.com>

	* LetExp.java (apply): Patch for using wrong length to arraycopy.
	This fixes Savannah bug #18106 "ArrayIndexOutOfBoundsException in
	deep LetExp nesting".  In addition, made a micro-optimization.

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

	* NameLookup.java: Change to extends GeneralHashTable.
	(map): Remove Hashtable field - use this/super instead.
	(push): Just push to front of hash bucket chain.  Don't use a Vector.
	(pop): Just remove from chain HashNode with matching Declaration.
	(lookup): Just loop though HashNode chain.

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

	* ModuleExp.java (evalModule): If Declaration is an alias for
	one that needsContext(), then create a StaticFieldLocation.
	Set the latter's Declaration.

	* Declaration.java (getDeclarationValueFromStatic): New static method.

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

	* Compilation.java (error): New overloaded method.

	* Compilation.java (pedantic): New flag field.
	(isPedantic): New method.
	* Language.java (requirePedantic): New static field.
	(parse): Set Compilation's pedantic flag from requirePedantic.

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

	* ExpWalker.java (getMessages): New convenience method.

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

	* LetExp.java (walkInitializers): New method.
	(walkChildren): Use walkInitializers.
	* ResolveNames.java (walkLetExp): New method. Uses walkInitializers
	to walk initializers *before* pushing declarations.

	* PrimProcedure.java (<init>): New convenience constructor.

	* PrimProcedure.java (compileInvoke): Fix handling of IgnoreTarget
	for a method that takesContext().

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

	* ModuleExp.java (evalToClass): Don't write exception to err output.

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

	* ModuleExp.java (evalToClass): Use URI_utils.toURL.

	* ReferenceExp.java (apply): Get value from field even if non-static by
	using the contextDecl.  Prefer value from field over Declaration's
	value since latter may not have correct context if a LambdaExp.
	* Compilation.java (generateConstructor): We may need to register a
	module even in immediate mode, as long as the module is named.

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

	* ModuleExp.java (toString): New method.

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

	* ReferenceExp.java (apply): For now revert 2006-08-07.  It causes Ant
	builds to fails, because they compile kawa/lib in alphabethical order.

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

	* ModuleSet.java: New abstract class.
	* Makefile.am: Update accordingly.
	* ModuleManager.java (defaultClassLoader): New field.
	(modules, firstModule): Chain of modules.
	(register, loadPackageInfo): New method.
	* ModuleInfo.java (nextModule, next}: Used to chain modules.
	(uri, getNamespaceUri, setNamespaceUri): New field and methods.
	(setCompilation): Set sourceURL if module is non-null.
	(checkCurrent): If moduleClass is null, but className is known,
	try to load the class, and find the class file.
	* Compilation.java (registerClass): New method.
	(addClass): Move code from here to registerClass, and call it.
	(generateBytecode): If ModuleInfo has a non-null namespace URI, then
	generate a ModuleSet class for this package.  Needed for XQuery.

	* Compilation.java (pendingImports): Make public, for XQuery.

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

	* Language.java (getCompilation): New method.
	(parse(Lexer,int)): Make final instead of abstract.
	(parse(Compilation,int)): Make abstract.

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

	* BeginExp.java  (getExpressionCount): New method.

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

	Change the way an immediate-compiled <clinit> can find its
	Compilation in order to import literals.  This is more robust.
	* ModuleExp.java (evalModule): No longer need to set context's value1.
	(setupLiterals): Move to Compilation.java.
	* Compilation.java (setupLiterals):: Moved.  Also take integer 'key'
	parameter and pass it to findForImmediateLiterals.
	(generateBytecode): Update accordingly.
	(keyUninitialized, chainUninitialized, nextUninitialized): New fields.
	(registerForImmediateLiterals, findForImmediateLiterals): New methods.

	* ModuleExp.java (evalToClass): Don't call extra loadClass to get main
	class.  This may use inconsistent name mangling, and is redundant.

	* ModuleExp.java (lastZipCounter): New static field.
	(evalToClass):  For zip dump file name use max of lastZipCounter
	and interactiveCounter, to avoid overwriting an old file in more
	complex multi-module situations.

	* BindingInitializer.java (emit): Emit line number if available.

	* Compilation.java (addMainClass): Remove special-casing for immediate.

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

	* ModuleInfo.java (find(Type)): New static method.
	(clearClass, checkCurrent): New methods.
	* ModuleExp.java (evalToClass): Recursively evalToClass of dependent
	modules.

	* ModuleInfo.java (setCompilation): New method.
	(getModuleExp): If we have Compilation, use its mainLambda.
	* Compilation.java (pushNewModule): Set setCompilation on ModuleInfo.
	* ModuleManager.java (LAST_MODIFIED_CACHE_TIME): New constant.
	Moved from gnu/kawa/servlet/KawaPageServlet.java.
	(lastModifiedCacheTime): New field.
	(find): Use new setCompilation method.
	* ModuleContext.java (findInstance): Don't re-use instance
	if it isn't of the needed class.

	* ModuleInfo.java (loadEager):  Don't set to lower state, except to
	clear "busy" bit.
	* ModuleExp.java (evalToClass): Use loadByStages rather than process
	to properly handle dependencies and cycles.
	(evalModule): Init state to WALKED here rather than in evalToClass.
	* Compilation.java (process): Set state after BODY_PARSED.

	* Declaration.java (load): When CREATE_FIELD_REFERENCE in immediate
	mode use new FieldLocationa dn StaticFieldLocation factory methods.

	* ModuleExp.java (evalToClass): Don't value value1 to Compilation here.
	(evalModule): Set it here instead.  For future recursive evalToClass. 

	* Compilation.java (generateBytecode): Remove no-longer-executed calls
	to generateClassName, addClass, and setSourceFile.
	(addClass(ModuleExp,ClassType)): Inline in remaining singler caller
	addMainClass.

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

	* LetExp.java (apply): Only skip declarations whose init value is
	undefined_exp, which matches compile logic, rather than checking
	CAN_READ, which may not have been set if we're in a let-syntax.
	* ReferenceExp.java (apply): Remove questionable optimization.

	* ModuleInfo.java (loadByStages):  Call recursively to handle
	complex dependencies.

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

	* Keyword.java:  Various updates to use getName() rather than name,
	in case JAXP-QName is enabled.

	* Symbols.java (generate): Remove unused method.

	* Declaration.java (printInfo): Also print non-constant typeExp.

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

	* TypeValue.java (getConstructor): New method.

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

	* BindingInitializer.java (makeSymbolMethod): Remove unused field.

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

	* Language.java (getTypeFor): Handle ClassNamespace.

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

	* Language.java (getTypeFor(Object,boolean)): New method, with new
	'lenient' parameter.
	(getTypeFor(Expression, boolean)): Likewise.
	(asType): Update accordingly.

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

	* LambdaExp.java (setProperty): Update name to new PropertySet.
	* ProcInitializer.java (emitLoadModuleMethod): The setProperty method
	is now in the new class PropertySet, rather than in Procedure.

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

	Fix so warnings get printed before evaluation.
	* ModuleExp.java (evalModule): Take extra err parameter.
	If non-null, use it to display warnings and errors.  Return boolean.
	* Language.java (eval): Update ModuleExp.evalModule call.

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

	* Compilation.java (addClass): If JAVA5, set appropriate classfile
	version number.
	(loadClassRef): If classfile version number is suitable, use ldc on
	class "literal".
	* LitTable.java (writeObject, emit): Handle java.lang.Class objects.

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

	Handle module dependencies and cycles.
	* Compilation.java (state, getState, setState): New field and accessors.
	(PROLOG_PARSING, PROLOG_PARSED, BODY_PARSED, RESOLVED, WALKED,
	COMPILE_SETUP, COMPILED, CLASS_WRITTEN, ERROR_SEEN): New constants.
	(minfo, lexer, pendingImports): New fields.
	(pushPendingImport): New method.
	(compileModule, compileToFiles): Remove method.  Replaced by ...
	(process): New method.
	(outputClass): Add some cleanups.
	(compileToArchive): Replace call to compileModule by call to process.
	(compileWalkedModule): Rename to generateBytecode.
	(pushNewModule): Add overload.
	* ModuleExp.java (allocChildClasses): New method.
	* LambdaExp.java (allocChildClasses): Simply because of above method.
	(allocChildMethods): New method.
	(setCallersNeedStaticLink): Stop on ModuleExp.
	* Language.java (PARSE_PROLOG): New flag.
	(parse): New method.
	* ModuleExp.java (evalToClass): Use new Compilation.process.
	* ModuleInfo.java (comp, dependencies, numDependencies): New fields.
	(addDependency, getClassType): New methods.
	(loadByStages, loadEager): New methods.
	* ModuleManager.java (find): New method.
	* ReferenceExp.java (apply): Chase aliases.
	Also, if value is a LambdaExp, evaluate value rather than de-reference.

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

	* Compilation.java (toString): New method

	* Language.java (declFromField): Set EXTERNAL_ACCESS if appropriate.

	* ModuleManager.java (add): New method.
	(findWithClassName, findWithSourcePath): Use it.

	* ApplyExp.java (compile): Exit early if code is not reachable.

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

	* Compilation.java (error): New convenience overloading.
	* FindCapturedVars.java (walkReferenceExp): Use it.

	* FindCapturedVars.java (walkApplyExp): If module-level decl is
	public we don't need to get closure - that's handled anyway.

	* LetExp.java (apply): Always skip if we can neither read or call.
	Needed to avoid problems when evaluating let-syntax.

	* LambdaExp.java: Remove unused local variables.
	* ClassExp.java: Likewise.
	* Compilation.jav: Likewise.
	* FindCapturedVars.java: Likewise.
	* FIndTailCalls.java: Likewise.
	* GenericProc.java: Likewise.
	* LambdaExp.java: Likewise.
	* LitTable.java: Likewise.
	* ModuleExp.java: Likewise.
	* ObjectExp.java: Likewise.
	* SetExp.java: Likewise.
	* TryExp.java: Likewise.
	* InlineCalls.java: Remove unused import.
	* ModuleInfo.java: Likewise.
	* ClassExp.java: Access static method using class-name syntax.

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

	* ApplyExp.java (compile): Handle LambdaExp from imported modules,
	as when compiling multiple modules at once.

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

	* ErrorExp.java (compile): Throw Error if called.

	* ModuleExp.java (allocFields): Don't emit field for unreferenced
	unknown declaration.
	* ModuleExp.java (allocFields): Do emit field in IS_CONSTANT case.

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

	* Declaration.java (load): Change 1st param to AccessExp, so we can get
	at ReferenceExp's source location.  Wrap Location.get call by handler
	that uses those to call UnboundLocationException.setLine.
	* gnu/expr/SetExp.java (compile): Update accordingly.
	* gnu/expr/ReferenceExp.java (compile): Likewise.
	(apply): Pass file/line/column to new UnboundLocationException.

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

	* Compilation.java (pushScope): Set mustCompile if we see a function
	definition.  Fixes Savannah bug #16388 "performance regression".
	* Declaration.java (load): Do follow alias even if DONT_DEREFERENCE
	if base is indirect.
	If compiling constant, use passed-in Target.

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

	* InlineCalls.java (walkIfExp): Fold if test is reference to known
	value.
	(walkLetExp): Fold if let result expression matches let variable.

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

	* LetExp.java (print): Guard against null body.

	* Compilation.java (current): New ThreadLocation static field.
	(getCurrent, setCurrent): Change to use new field.

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

	* LambdaExp.java (addMethodFor): If a top-level function is defined
	using define-private, that doesn't mean its method should be private,
	since it may need to be accessed from a generated class.

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

	* ExpWalker.java (walkScopeExp): Also walk the type expressions
	of the Declarations, in case they're non-constant.

	* Declaration.java (setTypeExp): Check if typeExp is TypeValue.

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

	* SetExp.java (compile): Do emit value even if it is literal,
	unless the declaration IS_CONSTANT.

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

	* ModuleExp.java (evalModule): Check if seenErrors.

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

	* ErrorExp.java (<init>): New convenience constructors.

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

	* PrimProcedure.java (matchN): Don't add extraCount to fixArgs.

	* PrimProcedure.java (matchN): Simplify check for correct number
	of args, getting rid of mlen variable and code redundancy.

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

	* Declaration.java: Add hooks for type expression that are evaluted
	at run-time.
	(typeExp): New Expression field.
	(getTypeExp, setTypeExp): New method.
	(setType): Modify to also set typeExp.

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

	* ExpWalker.java (messages): Make protected, for XQResolveNames.

	* LitTable.java (writeObject): Add support for BigInteger and
	BigDecimal - the latter is used by XQuery for the xs:decimal type.

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

	* Compilation.java (compileModule): Save/set/restore current
	Compilation.

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

	* InlineCalls.java (<init>): New constructor.
	(inlineClass): Use new constructor.
	* ClassExp.java (setTypes): Do InlineCalls on supertypes.

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

	* CheckedTarget.java (emitCheckedCoerce): Get startPC at same position
	as startTry, so test for empty exception region is correct.

	* ModuleExp.java (evalModule): Save/set/restore current Compilation.

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

	* FindTailCalls.java (walkApplyExp): Don't chain calls to
	static functions.

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

	* ModuleExp.java (evalToClass): Call cleanupAfterCompilation.

	* SetExp.java (<init>): Move constructors next to each other.
	* SetExp.java (makeDefinition): New convenience factory method.

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

	* Compilation.java (compileToArchive): Do't set module name to
	LambdaExp.fileFunctionName.  Instead, load picks the first class.
	* LambdaExp.java (fileFunctionName): Remove no-longer-used field.

	* Compilation.java (addClass): Ensure that mainClass is the "first"
	class, so it is written first when writing an archive.

	* PrimProcedure.java: Handle a mode where a 'target' is passed when
	for static method calls.
	(mode): New field, subsumes removed is_special field.
	(isSpecial, isConstructor): Update accordingly.
	(takesTarget): New method.
	(numArgs, matchN, getParameterType): Update appropriately.
	(<init>)(Method,char,Language)): New constructor.
	(<init>)(Method,boolean,Language)): Removed constructor.
	(<init>)(ClassType,Type[])): Removed unused constructor.
	(init): Set mode to 'V' if needed.
	(compile): If static and takesTarget(), skip first argument.

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

	* Expression.java (side_effects): New method.
	* QuoteExp.java (side_effects): New method.
	* ReferenceExp.java (side_effects): New method.

	* Compilation.java (walkModule): Better to PushApply after InlineCalls.

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

	* AccessExp.java (getSimpleName): New method.

	* Compilation.java (addMainClass): Make public, since it is used
	by KawaPageServlet.

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

	* LetExp.java (apply): Skip Declation if !needsInit().
	* FindTailsCalls.java (walkApplyExp): Da setCanRead on Declaration
	if we might be interpreting.

	* LambdaExp.java (apply): Call setIndex, in case we're called
	directly from a macro expanded.
	* LetExp.java (apply): Likewise.

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

	* LambdaExp.java (Closure:getProperty): New method.
	* ProcInitializer.java (emit): Move emitting of properties to
	emitLoadModuleMethod method.
	* ModuleMethod (<init>): Don't setSymbol if it is null.
	(getName): Remove method - use from super class.

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

	* Declaration.java (evalIndex):  New field.
	(makeIndirectLocationFor): New method.
	* ChainLambdas.java (walkScopeExp, walkLambdaExp): Check if
	expression mustCompile.
	(walkScopeExp): Do setIndexes of Declaration, for interpretation.
	* Expression.java (mustCompile): New abstract method.
	(eval(Expression), eval(CallContext)): Make both final.
	(apply): This is not the method that needs to be overridden.
	* ScopeExp.java (frameSize): New field.
	(setIndexes): New method.
	(mustCompile): Remove no-longer-needed temporay stub method.
	* ApplyExp.java (eval): Remove method.
	* BeginExp.java (eval): Likewise,
	* ErrorExp.java (eval): Likewise,
	* ???Exp.java (mustCompile): New methods.
	* BlockExp.java (appply): New method for interpreter.
	(BlockExitException): New non-public class.
	* ExitExp.java (apply): New method.
	* IfExp.java (apply): Don't use match0 for tail-expressions,
	since that breaks try-[catch-]finally.
	* LambdaExp.java (apply): New method,
	(Closure): New non-public class, extends MethodProc.
	* LetExp.java (apply): New method.
	* QuoteExp.java (eval): Replace method with new apply method.
	* SynchronizedExp.java: Likewise.
	* ThisExp.java: Likewise.
	* TryExp.java: Likewise.
	* ReferenceExp.java (eval):  Replace by new apply method, and
	rewrite to handle lexical bindings.
	* SetExp.java: Likewise.

	* Compilation.java (walkModule, addMainClass): New methods.
	(compile, addClass(ModuleExp)):  Remove and move things around to ...
	(compileModule, compileWalkedModule): ... create these new methods.
	(push(ScopeExp)): Possible mustCompileFile() here call moved ..
	(pushScope): ... this more-commponly-called method instead.
	* ModuleExp.java (evalToClass):Call compileWalkedModule instead 
	of remove compile method.  Add general catch of Throwable.
	(evalModule): Do InliningCalls etc even if we're not sure we need to
	compile.  Check mustCompile after we have done so.
	* ScopeExp.java (mustCompile): New temporary stub method.

	* Compilation.java (source_filename) Removed field.
	(addClass): Adjust accordingly.
	(pushNewModule): New method.
	(push(ScopeExp)): Simplify ModuleExp handling - now in pushNewModule

	* PrimProcedure.java (matchN): Fix a bug in the takesContext() case.
	(apply): Likewise.
	(matcN): Fix bugs in handling of #!rest arg with a LList type.

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

	* InlineCalls.java (walkApplyOnly): New method.
	(walkApplyExp): Call walkApplyOnly.
	Don't call ClassMethodProc.rewrite - now handled using the inline
	method of ApplyExp sub-classes.
	* Language.java (NAMESPACE_PREFIX): Removed - no longer used.

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

	* ModuleExp.java (evalModule): Declaration name need not be a String.
	(allocFields): Apply deMorgan's law, to match form in SetExp.compile.

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

	* Language.java (getTypeFor(Object)): New final convenince method.
	(asType(Object)): Now just a wrapper for getTypeFor.
	(getTypeFor(Expression)): No longer need to catch exception.

	* Declaration.java (isLexical): New helper method.
	(isUnknown): New static helper method.
	* ReferenceExp.java (isUnknown): New method.

	* Declaration.java (getDeclaration): New though commented-out hook
	for mapping procedure name to static field.

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

	* ReferenceExp.java (getType): Get type from a bound Declaration.

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

	* Expression.java (inline): New method.
	* LambdaExp.java (inline): New method, containing the part of
	InlineCall's walkApplyExp that handled LambdaExp functions.
	* ReferenceExp.java (inline): New method, likewise containing the
	ReferenceExp-handling parts of InlineCall's walkApplyExp.
	* QuoteExp.java (inline): New method, likewise containing the
	QuoteExp-handling parts of InlineCall's walkApplyExp.
	* InlineCalls.java (walkApplyExp): Replace most of the old code by
	a call of the new virtual 'inline' method.

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

	* BindingInitializer.java (emit): If name is a Symbol then emit a
	call to the new ThreadLocation.makePrivate(Symbol) method.

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

	* PrimProcedure.java (matchN): Do't cast the extraArg for a constructor.
	It might be a Class or String rather than a ClassType.
	We check in Invoke.typeFrom anyway.

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

	* ModuleContext.java (findInstance): Split out allocation into ...
	(makeInstance): New method.
	(findInstance): Don't require class of instance of match that of
	ModuleInstance.  This allow replacing of "proxy" instances.

	* ModuleExp.java (evalModule): Set ContextClassLoader for thread.

	* ModuleExp.java (allocFields): Don't make field for declaration
	whose value is a ModuleExp - as created by a module-name form.

	* Compilation.java (loadClassRef): moduleInstanceMainField
	may not have been set yet.

	* ModuleExp.java (debugPrintExpr): Move static field from here ...
	* Compilation.java: ... to here.
	* Compilation.java (compile): When debugging print expressions to
	standard error, rather than standard output.
	* ModuleExp.java (evalModule): Likewise.

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

	* ModuleExp.java (evalToClass): If url isn't specified,
	use default from CallContext's baseUri.

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

	* Compilation.java (loadClassRef): New overload takes ClassType.
	Partly for convenience, plus an optimization.
	* ClassExp.java: New new loadClasRef variant.
	* LitTable.java: Likewise.

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

	* ModuleExp.java (allocField): Alloc fields even if decl.ignorable().
	It's non-trivial to get this right, and it probably isn't worth it.
	Example: a define-syntax that binds to a lambda with syntax-case.
	The problem is that without the field we don't generate the method
	code - but we still addMethodFor the lambda.

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

	* ModuleExp.java (evalToClass, evalModule): Extra URL parameter.
	(evalToClass): If url passed-in, set class-loader's resource context.
	* Language.java (eval): Update call to evalModule.

	* Declaration.java (makeField): Only make fields final for ModuleExp
	and ClassExp - not for captured local variables and parameters.

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

	* LambdaExp.java (allocChildClasses): Don't special-case $finit$.
	(addApplyMethod): Don't select a ClassExp for apply methods.

	* Expression.java (compile(Compilation, Declaration)): New method.
	* SetExp.java (compile): Use new method for more informative eceptions.

	* ClassExp.java (print): Use Declaration's printInfo in header listing
	declarations, like we do for other ScopeExps.

	* CheckedTarget.java (initWrongType, emitCheckedCoerce):
	Use (new) WrongType constructors directly instead of calling 'make'
	static 	methods.  This generates slightly bigger bytecode, but it makes
	for nicer stack traces which don't include the WrongType.make call.

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

	* LambdaExp.java (addApplyMethods): "Swap" operands, replacing
	lexp parameter by this.  Fold getOwningLambda() call from callers.
	If the frameType doesn't extend ModuleBody, then we need to use
	the Compilation's moduleClass, so add it to the ModuleExp instead.
	This matches the logic in generateApplyMethodsWithoutContext.
	Otherwise, we might get different sets of methods for distinct
	owning LambdaExp's that end up in the same class's apply method,
	which will mess things up.

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

	* Keyword.java (as Symbol): New method.

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

	* InlineCalls.java (walkLambdaExp): New method.  Set type of
	'this' declaration.

	* Compilation.java (compile): Move addClass earlier, so super-class
	gets set before InlineCalls.

	* ChainLambdas.java (walkLambdaExp): Clear firstChild field.

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

	* Language.java (getLangTypeFor): New convenience method.
	* PrimProcedure.java (<init>): Use new getLangTypeFor method.

	* ClassExp.java (setClassName): If class is anonymous, then
	generate a name of the form 'mainClass$N' rather than 'objectN',
	* Compilation.java (mangleName): Support intermediate mangling
	scheme - reversible, except that '$' is left as is.
	(compile): Class name is no longer a parameter but set previously.
	(compileToFiles, compileToArchive): Likewise.
	* ModuleExp.java (evalToClass): Likewise.
	(getJavaName): Fix to use correct mangling.
	(classFor): New method.

	* ModuleExp.java (evalToClass): Use WrappedException.

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

	* ModuleExp.java (IMMEDIATE): New constant.
	(isStatic): If IMMEDIATE is set, default to static.  However, an
	explicit NONSTATIC_SPECIFIED or SUPERTYPE_SPECIFIED overrides.  The
	latter is used for KawaPageServlets in Echo2 mode.
	* Compilation.java (push): If immediate, set module's IMMEDIATE flag,
	rather then force static using STATIC_SPECIFIED.

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

	* ClassExp.java (setTypes): Set line numeber before error output.

	* Declaration.java (allocateVariable): If !isSimple return existing var.

	* Language.java (getTypeFor): Get class of ModuleExp.

	* Compilation.java (compile): Only set mainClass if it hasn't been
	set yet.  Also call getConstructor, in case needed by InlineCalls.
	
	At the Invoke.make and PrimProcedure level all construstor now
	take the ClassType as an extra parameter.  This is mostly hidden
	from user code, and the generate bytecode only passes a static link
	when needed.  The advantage is that we can generate better code.
	* Compilation.java (getConstructor): Check first if there is an
	existing constructor, since that papers over the hasOuterLink issue.

	* PairClassType.java (extractStaticLink): New static method.
	* PrimProcedure.java (isConstructor): New helper method.
	(numArgs, matchN, apply, compileArg, compile, getParameterType):
	Update for extra staticLink arg.
	(<init>): Re-arrange to fix some problems.
	(init): Set op_code to 182 if is_special.
	Leave off from argTypes array any actual static Link parameter.
	(getStaticFlag): True also if isConstructor().
	(compileArgs): Make private.  Take extra startAr 
	* ClassExp.java (declareParts): It is now safe to getConstructor
	here regardless of whether we will need a static link.
	(compile): Call ClassType's new setOuterLink method.

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

	* Compilation.java: For various static Field fields, initialize using
	getDeclaredField rather than addField.

	* PrimProcedure.java (compile/6): Rename to compileInvoke.
	 (compile/4): Make non-public.  Update to call compileInvoke.

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

	* Declaration.java (setSimple): If Variable is a parameter,
	don't make it simple.
	* LambdaExp.java (allocChildClasses): If decl has a Variable, use it.

	* LambdaExp.java (compileEnd): Split out tail part into ...
	(generateApplyMethods): ... new method.

	* LambdaExp.java (loadHeapFrame): Skip unneeded static link fields.
	Kind-of-kludgy, but fixes new test cases.

	* ClassExp.java (compilePushClass):  Generate better code.

	* ClassExp.java (compilePushClass):  Using getOwningLambda
	seems more correct/robust - though not sure.

	* ClassExp.java (compile): Call generateApplyMethods after methods
	have been compiled, in case initializers are emitted.
	Emit error if explicitInit and initializers are emitted.
	(generateApplyMethods): Add needed call.

	* Initializer.java (reportError): New method.
	* ProcInitializer.java	(reportError): New method.

	* ProcInitializer.java	(emitLoadModuleMethod): Handle the case of a
	ClassExp with a passed-in static link.

	* ClassExp.java (print): Also print flags.

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

	* Compilation.java (generateConstructor): Setup staticLinkField
	before calling super constructor, in case latter calls a method
	that needs static link.

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

	* ClassExp.java (makeClassPair): Remove field.
	(setMakingClassPair): Remove method.
	(isMakingClassPair): Is now just the inverse of isSimple().
	(<init>): New constructor, alocates and sets ClassType objects.
	(setClassName): New method, extracted from old setParts.
	Also call Compilation's addClass.
	(setParts): Remove no-longer-needed method.
	(setTypes): Simplify - always called with non-null Compilation.
	Types are now pre-allocated.
	(getType): Remove - just used inherited method.
	(walk): No need to call setParts.
	* ObjectExp.java (<init>): Call new super-constructor.
	* InlineCalls.java (walkClassExp): Remove, since non-inherited
	functionality is already done when the ClassExp was created.

	* Compilation.java (classPrefixDefault): New static field.
	(classPrefix): Initialize from classPrefixDefault.
	(compile): Remove prefix parameter.  Don't set classPrefix here.
	(compileToFiles): Remove prefix parameter.
	(compileToArchive): Update call to compile method.
	* ModuleExp.java (evalToClass): Likewise.

2005-11-14  thomas kirk  <tk@research.att.com>

	* Expression.java (print): Close OutPort.

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

	* PrimProcedure.java (matchN): Fix off-by-one-error.

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

	* ModuleContext.java (findInstance): Only re-use an instance if its
	class matches that in the ModuleInfo.

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

	* ModuleContext.java (getManager): New method.
	* ModuleInfo.java (classname, moduleClass): Make fields public.
	(sourceURL, lastCheckedTime, lastModifiedTime): New fields.
	* ModuleManager.java (searchWithSourcePath, findWithSourcePath,
	findWithURL): New methods.

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

	* ModuleContext.java: New class.
	* Makefile.am: Update accordingly.
	* ModuleInfo.java (moduleClass): Nwe field.
	(getModuleClass): New method.
	(instance): Remove field - now managed by ModuleContext.
	(getModuleExp): Simplify.
	(findFromInstance, register, getInstance): use ModuleContext methods.

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

	* Language.java (resolve): New method.
	* ModuleExp.java (evalModule): Call resolve.

	* ModuleManager.java: New class.
	* Makefile.am: Update accordingly.
	* ModuleInfo.java (next): New field, for chaining by ModuleManager.
	(find): Just call ModuleManager's findWithClassName.

	* Language.java (detect): New methods.

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

	* Declaration.java (makeField): Handle an unnamed declaration.
	This fixes a bug where an inner syntax-case needed to initialize
	its matchArray using a matchArray from an outer lambda.

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

	* PrimProcedure.java (<init>): Don't try to getReflectClass for a
	non-existing ClassType - i.e. one defined in this compilation.

	* PrimProcedure.java (<init>): Kludge - never set tostring_type
	for return type.

	* StackTarget.java (compileFromStack0): Use CodeAttr's new castNeeded
	method to suppress redundant casts also for ArrayTypes.

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

	* ClassExp.java (compile): Fix thinko - don't call default super
	constructor if we call super *or* this constructor.

	* ClassExp.java (explicitInit): New field.
	(declareParts): Set explicitInit if method name is "*init*.
	Don't declare default constructor if explicitInit.
	(compile): Don't emit default constructor if explicitInit.
	(compile): Special handling for explicit ("*init*") constructors.
	* Compilation.java (mangleName): Mangle '*init*" to "<init>".
	(callInitMethods): Make non-private since needed by ClassExp.
	* Expression.java (compileButFirst): New static method.
	* FindCapturedVars.java (walkClassExp): Don't getConstructor for
	default constructor if ClassExp has explicitInit.

	* Compilation.java (setLine(Expression)): New method.
	* Expression.java (compileNotePosition): Use new method.
	* ClassExp.java (compile): Set/restore current line number from method.
	* LambdaExp.java (allocParameters): Do putLineNumber.

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

	* PrimProcedure.java (<init>): Rearrange constructor code so we can
	set the return type to void if is_special.
	(isSpecial): New method.

	* Compilation.java (addClass): Move module.compileChildMethods
	invocation before we dump initializers, since compiling methods
	may require more initialization.
	Fixes bug reported 10-07 by Dominique Boucher.

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

	* InlineCalls.java (walkApplyExp): Add missing setLine call.
	* BindingInitializer.java (emit): Emit line number information.

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

	* Compilation.java (callContextVar): New field.
	(loadCallContext): Use and maybe set callContextVar.
	(generateConstructor): Temporarily clear callContextVar in new method.
	* LambdaExp.java (enterFunction):  Set callContextVar from parameter.
	(compileAsMethod): Likewise.
	(compileBody): Likewise.
	* IfExp.java (compile): Clear/restore callContextVar.

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

	* PrimProcedure.java (compile): New static method.
	(compile): Use new method.

	* ModuleExp.java (evalToClass): Load classes eagerly so we can do
	setReflectClass for all the generated classes.

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

	* LetExp.java (walkChildren): Update declaration's value.

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

	* FindCapturedVars.java (walkReferenceExp): Don't replace by value
	if getDontDereference().
	* ExpWalker.java (walkSetExp):  Update declaration's value.
	* InlineCalls.java (walkSetExp): Remove - use inherited method.

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

	* Compilation.java (pushChain): Partly inline call to push(ScopeExp),
	but avoid needless calls to mustCompileHere() because of TemplateScope.

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

	* Declaration.java (makeField): Instead of isPrivate() method use
	isPublic() method which also requires that the context be a ModulExp.
	Fixes Savannah bug #14037 (leaking lexical bindings).

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

	* ClassExp.java (declareParts): Declare constructor, if class static.

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

	* InlineCalls.java (walkApplyExp): No longer call rewriteToInvocation.
	Instead call ClassMethodProc's rewrite method.
	(rewriteToInvocation): Remove no-longer used method.

	* Declaration.java (getValue): Load (lazily) from final static field.
	(getConstantValue): Use getValue.

	* Declaration.java (getDeclarationFromStatic): New static method.

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

	* Symbols.java (generateInt): New static synchronized method.
	(generate, gentemp): Use generateInt, thereby adding missing
	synchronization.

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

	* ModuleBody.java (runAsMain(String[])): Sprit into two methods,
	one static and one non-static.  Deprecate old method.
	(processArgs, runAsMain()): New methods.
	* Compilation.java (generateConstructor):  Call new methods.

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

	* Language.java (setDefaults):  Set global/default environment to
	that of the initial (main) thread.

	* BuiltinEnvironment.java (getLocation): Update parameter list.

	* FluidLetExp.java (compile):  setWithSave andf setRestore now take
	an extra CallContext parameter.

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

	* ModuleBody.java (runAsMain): Use other defineAll overload.

	* Declaration.java (load): Note that field's declaraing class is used.

	* Language.java (userEnv, encOunter): New fields.
	(getEnvironment): New method.
	(getNewEnvironment): Restore previously-removed method, but now
	using the userEnv field.
	(getTypeFor, getPrompter, eval): Use new getEnvironment method.

	* ModuleBody.java (runAsMain): Call kawa.repl.processArgs.

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

	* Language.java (defAliasStFld): New method.

	* Compilation.java (addClass): Call dumpInitializers inside a loop, in
	case emiting an initialier creates more - just like we do in
	generateConstructor.  Fixes Savannah bug #13821.
	(generateConstructor): Use dumpInitializers.
	This removes need for invoking Initializer.reverse.

	* ProcInitializer.java (emitLoadModuleMethod): If there are keyword
	arguments, set resulting maxArgs() to -1.
	Fixes Savannah bug #13854.

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

	* Declaration.java (needsExternalAccess): Returns true if a
	namespace declaration.
	* ModuleExp.java (allocFields): Alloc field if a namespace declaration.
	Fix (work-around) for Savannah bug #13601.

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

	* ReferenceExp.java (context, contextDecl): Mome field and methods
	to super-class ...
	* AccessExp.java (context, contextDecl): ... here.
	* FindTailCalls.java (walkReferenceExp, walkSetExp): If there is a
	contextDecl(), mark it as readable.
	* FindCapturedVars.java (walkSetExp): Pass context to capture.
	(capture): If containing Declaration is needed, capture it.
	* SetExp.java (compile): Pass context to Declaration's load.
	Fixes Savannah bug #4881.

	* SetExp.java (toString): New method.

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

	* LambdaExp.java (capture): New method.
	* FindCapturedVars.java (capture): Use new method.

	* Declaration.java (makeField): Make static fields for "dynamic"
	variables implemented using ThreadLocation.

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

	* Compilation.java (generateApplyMethodsWithContext): More carefully
	calculate method arguments to fix reported problems.
	(generateApplyMethodsWithoutContext): Likewise.

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

	* LambdaExp.java (addMethodFor): If nested in a ClassExp, add method
	to that class.  Fixes a verification error if it references a private.
	* Compilation.java (generateApplyMethodsWithContext): Tweak argument
	count calculation and pushing this for above case.
	(generateApplyMethodsWithoutContext): Likewise.

	* InlineCalls.java (walkApplyExp): Optimize call to method in same
	ClassExp.  This fix a bug when $this$ isn't captured.
	Fixes bug reported by Dean Ferreyra 06-09.

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

	* PrimProcedure.java: Use calls to usedType from one compile method,
	to method that it calls - and that is sometimes called directly.

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

	* Language.java:  Update for AbstractFormat move to gnu.lists.
	* QuoteExp.java: Likewise.

	* Language.java (getFormat): Change return type to AbstractFormat.
	(print): Update variable saveFormat to match OutPort's objectFormat.
	* QuoteExp.java (print): Likewise.

	* QuoteExp.java (toString): New method.

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

	* Language.java (declFromField): New method.  Body taken from
	ModuleInfo's makeDeclInModule1.
	* ModuleInfo.java (setupModuleExp): Inline what's left of
	makeDeclInModule1.
	(makeDeclInModule1): Remove method.

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

	* FindCapturedVars.java (cpature): If we have a context, we don't
	need to capture it - just mark it non-Simple.
	* ModuleInfo.java *getModuleExp): Inline from ModuleExp.make.
	(setupModuleExp, findFromInstance): New methods.
	(makeDeclInModule1, makeDeclInModule1): New methods, moved over from
	kawa.standard.require.
	(makeDeclInModule1): Don't need to setCapturedScope of Macro.
	* ModuleExp.java (info): New field.
	(make(String), make(ClassType)): Remove no-longer-needed methods.
	(firstDecl): Simplify - just use setupModuleExp.

	* ScopeExp.java (getDefine): Simplify by emitting two diagnostic
	messages on redefinition, since errors are no longer sorted.

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

	* ReferenceExp.java (<init>(Declaration)): Un-inline other constructor,
	to simplify debugging.

	* LambdaExp.java (allocChildClasses): Remove unused variable
	method_static.

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

	* InlineCalls.java (walkReferenceExp): New method - expand constants.
	* FindCapturedVars.java (capture): Don't short-circuit constants.
	Fixes bug reported 5/11 by Dominique Boucher.

	* PrimProcedure.java (compileArgs): Skip implicit isThisParameter().

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

	* Compilation.java: Remove pointless calls to setArtificial.
	* FindCapturedVars.java: Likewise.
	* LambdaExp.java: Likewise.

	* ThisExp.java (THIS_NAME): New static field.
	(<init>): Use THIS_NAME.
	(isForContext): New method.
	(eval, compile): Use it.  We default to the super behavior otherwise.
	* FindCapturedVars.java (walkThisExp): Likewise.
	* Declaration.java (isThisParameter): New method.
	* ClassExp.java (walkChildren): If the first parameter of a method
	isThisParameter, then set its type, if known.
	* LambdaExp.java (declareThis): If first param isThisParameter(),
	then note its Variable. 
	(addMethodFor): Skip first parameter if isThisParameter().
	(print): Don't get confused by isThisParameter().
	This fixes Savannah bug #10806.

	* FindCapturedVars.java (walkApplyExp): Force walk of function
	if NONSTATIC_SPECIFIED, to catch "non-static referenced by static"
	error in this case.
	(capture): Simplify "non-static referenced by static" message.

	* ClassExp.java (print): Simplify output.

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

	* ModuleExp.java (evalToClass): Don't set immediate flag here -
	it's supposed to be set earlier.

	* ThisExp.java (compile): Add an extension for static methods,
	which is used by define_syntax.
	* ProcInitializer.java (emitLoadModuleMethod): If module is static,
	use moduleInstanceMainField to access current $instance.

	* ClassExp.java (AbstractMethodFilter): Change to inner class.

	* Compilation.java (addClass): Don't call run method from <clinit>
	if immediate, even if --module-static-run was specified, since it
	needs to be done after declarations are made public in evalModule.

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

	* ClassExp.java (slotToMethodName): If we need to mangle, use the
	non-reversible mangling used for method names.

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

	* Compilation.java (pushScope):  New helper method - needed for Lambda.
	(push, letStart): Use it.

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

	* LitTable.java: Use use:java.util.IdentityHashMap, instead of
	JAVA2 - which was wrong since IdentityHashMap is new in JDK 1.4.

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

	* Language.java (getLangEnvironment): Renamed from getEnvironment.
	(getEnvironment): Now is just an alias for Environment.getCurrent().
	* BuiltinEnvironment.java (getLangEnvironment): Use new method.

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

	* Language.java (eval): Pass current Environment, rather than language
	Environment, to evalModule.

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

	* Declaration.java (makeField): New overload, takes frame class.
	* LambdaExp.java (enterFunction): Use new makeField.  This is needed to
	handle indirect bindings, as might be forced by location or fluid-let.
	* FindCapturedVars.java (walkFluidLetExp): Only allocate an unbound
	decl if base is null - i.e. if there is no lexical binding.
	* LetExp.java (store_rest): Replace emitStore call by more general
	compileStore in the indirectBinding case.
	* SetExp.java (compile): Simplify for correct indirectBinding case.
	* FindTailsCalls.java (walkFluidLetExp): If there is a base declaration
	note that it too can be read/written.

	* ScopeExp.java (addDeclaration): Trivial optimizations.

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

	* PrimProcedure.java (<init>): Remove unused constructor.
	Simplify another constructor by using new ClassType.getMethod.

	* PrimProcedure.java (<init>, init): If talesContext(), method
	return type is void, so we set retType to Object.
	Fixes bug reported 2005-05-08 by dominique.boucher@nuecho.com.

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

	* BuiltinEnvironment.java: New class, extends Environment.
	* Makefile.am: Update accordingly.
	* Compilation.java (getEnvironment): Remove now-inappropriate method.
	(resolve): Use Environment.getCurrent() instead of getEnvironment.
	* Declaration.java (load): Likewise.
	* InlineCalls.java (walkApplyExp): Likewise.
	* Language.java: Set global Environment to a BuiltinEnvironment.
	(setEnvironment, getNewEnvironment): Remove methods.
	(lookupBuiltin): New method.
	(setDefaults): Language enviroment should *not* be current environement.
	(eval): Don't change current Environment.
	(runAsApplication): Don't need to explicitly create Environment.

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

	* ModuleBody.java (runAsMain): Call zero-argument run(), which checks
	runDone, though only if results should not be printed.

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

	* Language.java (current): Update ThreadLocation construction.
	* BindingInitializer.java (emit): Argument to makePrivate method of
	ThreadLocation now takes a String.

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

	* SetExp.java: Give consistent visibility and finality to constants.

	* ReferenceExp.java (context): Make private.
	(contextDecl, setContextDecl): New accessor methods.
	(compile): Use new methods.
	* Declaration.java (load): Likewise.
	* SetExp.java (compile): Likewise.

	* FindCapturedVars.java (walkReferenceExp, capture): Likewise.
	* FindTailCalls.java (walkDecl): Likewise.

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

	* Declaration.java (load): Use new CREATE_FIELD_REFERENCE flag.
	(setValue): New method.
	(MODULE_REFERENCE): New constant.
	(makeField): Don't prepend PRIVATE_PERFIX if MODULE_REFERENCE.
	* FindTailCalls.java (walkDecl): May need to set EXTERNAL_ACCESS
	of context variable.
	* ReferenceExp.java (CREATE_FIELD_REFERENCE): New constant.
	* SetExp.java (compile): "Inline" call to followAliases, so we
	can extract 'context' field.  Use that context.

	* FindTailCalls.java (walkDecl): Trivial optimization.

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

	* Declaration.java (loadOwningObject): Make non-public.
	Add 'owner' parameter.
	(load): Simplify by passing owner to loadOwningObject.
	(compileStore): Update to pass null 'owner' to loadOwningObject.
	* LambdaExp.java (enterFunction): Likewise.
	* SetExp.java (compile): Likewise.

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

	* TypedValue.java: Fix javadoc.

2005-03-31  Dean Ferreyra <dferreyra@igc.org>

	* ModuleExp.java (STATIC_RUN_SPECIFIED): New flag.
	(staticInitRun): Check new flag.

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

	* ModuleExp.java (firstDecl): Get instance using ModuleInfo.
	* ModuleInfo.java (exp): New field.
	(getModuleExp): New method.

	* ResolveNames.java (resolveModule): Do Compilation.setCurrent.

	* QuoteExp.java (getType): Type of undefined_exp is Object.

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

	* ClassExp.java (compile): Don't declareThis is STATIC_SPECIFIED.

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

	* BindingInitializer.java (create): New factory method.
	* Declaration.java (load): Minor code re-arranging,makes it easier
	to set correct stack type in variable rtype.
	* Declaration.java (load): No longer need to DEFER_DECL_BASE, since we
	now get inported module instances at init time, rather than 'run' time.
	(EARLY_INIT): New flag.
	(makeField): Set type to more precise FieldLocation if applicable.
	Using BindingInitializer - but not if EARLY_INIT.
	* SetExp.java (compile): Remove DEFER_DECL_BASE special handling,
	but add special handling for EARLY_INIT instead.
	* ReferenceExp.java (DEFER_DECL_BASE): Defer no-longer-used flag.
	This re-fixes Savannah bug #11822.

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

	* Compilation.java (push): Set STATIC_SPECIFIED if immediate module.
	(addClass): This allows removing some special casing for immediate.
	If immediate call ModuleExp.setupLiterals to do so.
	(generateConstructor): Don't register an immediate module.
	* ModuleExp.java: In immediate mode initialize literals using a
	call-back from the <clinit> to new setupLiterals method.
	(setupLiterals): New static method, called from compiled code.
	(evalModule): Cleanup importing of module-exported declarations.
	* Declaration.java (makeField): Don't need special case for immediate.
	* LambdaExp.java (allocFieldFor): Likewise.

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

	* BindingInitializer.java: Generalize to work without a field.
	(<init>): Remove field parameter - set it from decl.field.
	(emit): If no field, use decl's type instead of field type.
	Store value into local Variable if there is no field.
	* Declaration.java (makeField): Adjust call to match.

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

	* CatchClause.java (<init>): Change to take a LambdaExp rather than
	a LetExp - with a bogus init value.  Fixes Savannah bug #11540.

	* CatchClause.java (print): Add writeSpaceFill call.
	* TryExp.java (print): Likewise.

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

	* ProcInitializer.java (<init>): Undo yesterday's change - we really
	should initialize a static field in <clinit> - especially if final.

	* Language.java: Make the default current language be fluid.
	(defaultLanguage): Remove field, replace by ...
	(current): New static ThreadLocation field.
	(getDefaultLanguage, setDefaultLanguage): Update accordingly.
	(setDefaults): Must setDefaultLanguage after we set default
	Environment, since ThreadLocation depends on Environment.
	(runAsApplication): Update accordingly.

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

	Change handling of static module to be more similar to non-static. 
	* Language.java (defineAll): Skip *$instance and PRIVATE_PREFIX fields.
	* ModuleExp.java (staticInitRun): New method.
	* Compilation.java (moduleStatic): Change to handle --module-static-run.
	(addClass): Static modules now implement Runnable.
	(addClass): Static modules now use "run", instead of "$run$".
	Call to generateConstructor for static module must now be done after
	body is emitted, since ProcInitializers are no longer static.
	Create and initialize $instance field.module.staticInitRun
	Emit call to run in <clinit> only if 
	(generateConstructor): Register module.
	* ProcInitializer.java (<init>): No longer place on clinitChain.

	* ModuleBody.java (runDone): New field.
	(run): Return immediately if run done earlier.
	* ModuleInfo.java (register): New static method.
	(getInstance): If there is a static $instance field, use that.
	(needsRun): Remove field - run checks runDone instead.
	(getRunInstance): Don't check needsRun.

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

	* Language.java (defProcStFld): Call FieldLocation's setProcedure.

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

	* Language.java: Merge in remaining methods from Interpreter.
	* Interpreter.java: Removed class.
	* Makefile.am: Update accordingly.

	* Compilation.java: Update Interpreter -> Language.
	* ConditionalTarget.java: Likewise.
	* NameLookup.java: Likewise.
	* ScopeExp.java: Likewise.

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

	* Interpreter.java (getPromter): Remove unused method.
	(eval - various overloaded versions): Move to Language.
	(defaultInterpreter): Rename to defaultLanguage and made non-public.
	* Language.java (eval - various): Moved from Interpreter.
	* ModuleBody.java: Update Interpreter->Language various places.
	* SetExp.java: Likewise.

	* Compilation.java (getInterpreter): Remove deprecated method.
	* BindingInitializer.java: Update Interpreter->Lanuguage various places.
	* InlineCalls.java: Likewise.
	* ModuleExp.java: Likewise.

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

	* ReferenceExp.java (context): New field.
	(DEFER_DECL_BASE): New constant.	
	(eval): "Optimize" if constant - needed for odule imports.
	(compile): Replace body by call to Declaration's load method.
	* Declaration.java (load): Generalize, take extra parameters.
	Merge in functionality from ReferenceExp.compile.
	(needsContext): New method.
	(followAliases): Some simplification.  Now used much less.
	(makeField): Simplify due to some clarifications.
	* FindCapturedVars.java (capture(Declaration, Declaration)): New
	method.  We need to be a little smarter about aliases.
	(walkSetExp): Ignore if ignorable.
	* FluidLetExp.java: Update for new load method from Declaration.
	* ModuleExp.java (evalModule): Use new FieldLocation class.
	(allocFields): Do pass value to makeField if isAlias().
	* SetExp.java (compile):  If needed, emit setInstance call.

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

	* Declaration.java (makeField): Field.setConstantValue now handles
	boolean and char fields - but expects java.lang.Character.

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

	* Declaration.java (makeField): Revert 2005-02-11 change.
	* BindingInitializer.java (emit): In the default case of an indirect
	but not dynamic/fluid, create an "anonymous" ThreadLocation instead.

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

	* ScopeExp.java (popScope): New method.
	* ApplyExp.java (compile): Use new popScope method.
	* FluidLetExp.java (compile): Likewise.
	* LambdaExp.java (compileEnd): Likewise.
	* LetExp.java (compile): Likewise.
	* FluidLetExp.java (compile): Remove redundant pushScope/popScope pair.

	* FindTailCalls.java (walkSetExp): Move setCanWrite so it is only
	called for SetExp, not LetExp.

	* LambdaExp.java (loadHeapFrame): Use getCaller method.

	* Compilation.java (getLanguage): Change return type to Language.
	* IfExp.java (getInterpreter): Change to getLanguage.
	* ClassExp.java: Update Interpreter -> Language etc.
	* FindCapturedVars.java: Likewise.
	* InlineCalls.java: Likewise.
	* ModuleMethod.java: Likewise.
	* PrimProcedure.java: Likewise.
	* QuoteExp.java: Likewise.

	*  Interpreter.java (getInstance): Change return type.
	(getInstanceFromFilenameExtension): Change return type and internals.
	* Language.java (setDefaults): New static helper method.

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

	* Declaration.java (setName): Move closer to getName and setSymbol.

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

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

	* Expression.java (match0): New method.
	(eval(CallContext)): Use match0.
	* BeginExp.java (apply): Use match0 to setup tail-call.
	* IfExp.java (apply): Likewise.
	
	* ApplyExp.java (apply): Defer Procedure cast.

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

	* ModuleExp.java (evalModule): Fix think eval -> apply.

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

	* Expression.java: Change to extens Procedure0.
	(apply0): New final method.
	(eval(Environment,CallContext)): Remove method, in favor of ...
	(apply(CallContext)): ... this new method.
	(eval(CallContext)): New final helper method.
	* ApplyExp.java (apply(CallContext)): New tail-call-safe method.
	(eval(Environment,CallContext)): Above replaces this method.
	* IfExp.java (apply(CallContext)): New method, replaces ...
	(eval(Environment,CallContext)): ... this replaced method.
	* BeginExp.java (apply(CallContext)): New tail-call-safe method.

	* LambdaExp.java (setName(String), setName(Object), getName):
	Remove methods that conflict with Named, which is now an ancestor.
	(name): Remove field used by setName/getName.
	(toString, addMethodFor, print): Use methods instead of 'name' field.
	* ClassExp.java: Use getName/getSymbol methods instead of name field.
	* ModuleExp.java: Likewise.
	* ProcInitializer.java (emit): Don't emit "name" property.

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

	* SetExp.java (compile): Call new setAlias method for aliases.

	* AccessExp.java: New class, extends Expression.
	(binding): Make field private.
	* Makefile.am: Update accordingly.
	* ReferenceExp.java (symbol, binding): Move fields to AccessExp.
	(getName, getSymbol, getBinding, setBinding): Likewise.
	* SetExp.java: Ditto.

	* SetExp.java (flags): Remove private field - use inherited field.

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

	Any non-alias indirect field should use ThreadLocation for
	proper Location access when multiple threads are mixed.
	* BindingInitializer.java (emit):  Create a ThreadLocation rather
	than a plain single-thread Location if decl is indirect non-alias.
	* Declaration.java (makeField): Make indirect non-alias field static.
	Fixes Savannah bug #11801.

	* Interpreter.java (defineFromFieldValue): Handle the case of Location
	with non-null getKeySymbol but not NamedLocation - e.g. ThreadLocation.

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

	* ReferenceExp.java (compile): Use new StaticFieldLocation.make.
	Fixes Savannah bug #11822 - but only for macros in static modules.

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

	* InlineCalls.java (walkLetExp): New method - propagate types.

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

	* ModuleExp.java (evalModule): Extract value if decl IS_CONSTANT.
	Fixes Savannah bug #11791.

	* Compilation.java (compile): Wrap Throwable if needed. Print messages.
	(addClass): Don' catch exceptions and exit here.  Handle later.

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

	* Compilation.java (loadClassRef):  Fix JAVA5 case to use
	emitPushClass, which fixes a popType error.  Then comment the JAVA5
	case out because it causes a verification error I haven't figured out.

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

	* Compilation.java (interp): Remplace field by ...
	(language): ... new field.
	(getLanguage): New method.
	(getInterpreter):  Update, deprecate.
	(<init>):  Take Language rather than Interpreter.
	Update various places.

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

	* Interpreter.java (getDefaultLanguage, setDefaultLanguage): New.

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

	* Language.java: New class, extends Interpreter.
	* Makefile.am: Update accordingly.
	* Interpreter.java: Note that Language should be used instead.

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

	* Interpreter.java (getFormat, getName, getTypeFor): Provide default
	implementations for formerly abstract methods.

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

	* ClassExp.java (compilePushClass): Use new loadClassRef method.
	* Compilation.java (loadClassRef): New helper method.
	(getForNameHelper): Handle Java1, which doesn't have 3-operand forName.

	* ModuleExp.java (make(ClassType)): New constructor.
	(writeExternal): If a non-existing class, write ClassType, not String.
	(readExternal): Handling reading either a ClassType or a String.
	* LitTable.java (store): New private helper method.
	(emit): Use store.
	(emit): Special handling of not-existing ClassType literals.
	This fixes Savannah bug #11491.

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

	* Declaration.java (load): If immediate and constant, load latter.
	Needed for the instance value from requiring a module.
	(getConstantValue): Return null if undefined_exp.

	* ThisExp.java (EVAL_TO_CONTEXT): New constant.
	(context): Type is always a ScopeExp.
	(makeGivingContext): New factory method.
	(eval): New method.

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

	* FluidLetExp: Use class name to static reference, to shut up ecj.
	* LambdaExp.java: Likewise.

	* LitTable.java: Comment out line if JAVA2, which is the default.

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

	* Compilation.java: Remove various unused static fields.

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

	* LitTable.java (liertaltable): Use an IdentityHashMap #ifndef JAVA2.

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

	* Compilation.java: Change "select" (preprocessor) syntax.

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

	* Declaration.java (makeField): If immediate,make fields final and
	static, but do initialization in <init>, not <clinit>.
	* SetExp.java (compile): Make immediate mode more consistent
	with non-immediate mode by removing two tests.
	(allocFields): Can avoid immediate-mode kludge.
	* Interpreter.java (getEnvPropertyFor): New method.
	* ModuleExp.java (evalModule):Import declarations from immediate-mode
	modules by iterating over module's declarations..

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

	* Compilation.java (isStatic): New method.
	* ProcInitializer.java: Use it.

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

	* Expression.java (compileWithPosition - 2 methods): Use new
	putLineNumber method, also passing in the filename.
	* Compilation.java: Likewise, various places.

	* Compilation.java (emitSourceDebugExtAttr): New static.
	(addClass): Optionally call setStratum, which causes a
	SourceDebugExtension attribute to be generated.

	* QuoteExp.java (print): If value is an Exprssion, just print short
	toString format, since otherwise macro expansion can cause a cycle.

	* ExitExp.java (print): Write extra space.

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

	* Compilation.java (syntaxError): Move here from Translator.

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

	* Keyword.java:  New extends Symbol.
	(keywordTable): Field replaced by ...
	(keywordNamespace): New static field.
	(make, readResolve): Rewrite to use Namespace methods.
	(hashCode, getName): removed - inherited from Symbol.

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

	Update for new Symbol/Location changes.
	* BindingInitializer.java (createNewSymbol): Replace field with
	new local lookupInEnv in emit.
	(emit): Looking up Location may need FUNCTION property.
	(makeLocationMethod): New helper method.
	* Compilation.java: Various updates.
	(getEnvironment): New method.
	* Declaration.java (load): Update kludge for immediate mode.
	(UNKNOWN_PREFIX): Changed, since it now names Location, not Symbols.
	(IS_DYNAMIC): New constant.
	(initBinding): Remove method.
	(followAliases): Stop if aliased field is non-static.
	* FindCapturedVars.java (allocUnboundDecl): Handle FUNCTION binding.
	* FluidLetExp.java (compile, doInits): Rewrite for new fluid handling.
	* InlineCalls.java: Update.
	* Interpreter.java (define_method): Remove method.  Replace by
	(defineFunction): New method.
	(defineFromFieldValue): Take field instead of name.  Rewrite,
	(getEnvPropertyFor, getSymbol): New helper methods.
	(getDefaultSymbolValue, getSymbolValue, getSymbolProcedure): Remove.
	* ModuleBody.java: Update ClassMemberConstraint -> ClassMemberLocation.
	* ModuleExp.java (evalModule): Don't do defineAll.
	* ReferenceExp.java (eval, compile): Update for new Location handling.
	* SetExp.java (eval, comple): Likewise.

	* LetExp.java: Optimize letrec-like bindings.

	* ModuleExp.java: Implement externalizable.
	(writeExternal, readExternal): New methods.
	(LAZY_DECLARATION): New constant.
	(make): New static method.
	(firstDecl): New method - get lazy declarations.

	* ThisExp.java (getType): Simplify. Also do getType of ModuleExp.

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

	* Declaration.java (getCode, setCode): New methods.
 	* Declaration.java (needsExternalAccess): New helper method.
	(makeField): Use it.
	(makeField): Check for existing field to guards against duplicates.
	* LambdaExp.java (allocFieldFor): Use needsExternalAccess.
	(addMethodFor): Check needsExternalAccess().

	* Declaration.java (IS_DYNAMIC): New constant.
	* Expression.java (setLine): New method.
	* LambdaExp.java (setType): New method.
	* ScopeExp.java (firstDecl): Make non-final, for the sake of ModuleExp.

	* GenericProc.java (methods): Make protected, for new ClassMethodProc.
	(add): New method overloading.  Make synchronized.
	Fix bug where minArgs didn't get changed from 0.
	* PrimProcedure.java (getMethodFor): Add method overloadings.
	Check for GenericProc.
	
	* Symbols.java (makeUninterned): Remove unused method.

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

	* ApplyExp.java (tailCall): Turn field into flag.
	(TAILCALL): New flag.
	(isTailCall, setTailCall, compile): Modify appropriately.

	* ApplyExp.java (INLINE_IF_CONSTANT): New flag.
	(inlineIfConstant): Add overload.
	Also recognize reference to constant.
	* InlineCalls.java (walkApplyExp): Maybe call inlineIfConstant.

	* InlineCalls.java (walkApplyExp): Check for null base of decl.

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

	* InlineCalls.java (walkIfExp): Handle null else_clause.

	* Interpreter.java (define_field): Remove unused methods.

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

	* ScopeExp.java (getVarScope): New method. Allocate scope if needed.
	(<init>): Don't allocate scope field until needed.
	(scope): Make private.
	* ApplyExp.java: Use getVarScope methods.
	* CatchClause.java: Likewise
	* Compilation.java: Likewise
	* Declaration.java: Likewise
	* FluidLetExp.java: Likewise
	* LambdaExp.java: Likewise
	* LetExp.java: Likewise

	* Declaration.java (printInfo(StringBuffer)): New method.

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

	* Interpreter.java (defProcStFld): Two new methods.

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

	* Compilation.java (addClass): If static, name apply_method "$run$",
	and make it private, to avoid Jikes complaining about inheritance.

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

	* LambdaExp.java (count, id): Move to ScopeExp.
	* ScopeExp.java (counter, id): New fields.
	(toString): New method.

	* LambdaExp.java (allocFieldFor): Take into account EXTERNAL_ACCESS.

	* LambdaExp.java (getRetunrType): A little safety addition.

	* ScopeExp.java (replaceFollowing, nesting): New methods.
	(remove): Fix bug using wrong variable.

	* ModuleExp.java (alwaysCompile): New static flag.
	(evalModule): Use new flag, and eliminate extra tests.

	* Compilation.java (setCurrentScope): New method.
	(getCurrent, setCurrent): New static methods.
	* Declaration.java (setSymbol): New method.

	* Interpreter.java (languages): Add "xq" and "xquery" as extensions
	for XQuery, to match section H.2.3 of 20041029 XQuery draft.

	* InlineCalls.java (walkApplyExp):  More specific error message.

	* CatchClause.java (<init>): New constructor.
	(print): Do pretty-printing.
	* TryExp.java (print): Do pretty-printing.
	* LetExp.java (print): Print more info, more robustly.

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

	* ModuleExp.java (mustCompile): Move field from here ...
	* Compilation.java (mustCompile): ... to here.
	(mustCompileHere): Is now much simpler.
	* ModuleExp.java (evalModule):  Update accordingly.

	* ModuleExp.java (dumpZipCounter):  Removed/replaced by ...
	(interactiveCounter): ... new static field, updated by Shell.run.
	(evalToClass): Use interactiveCounter instead of dumpZipCounter.

	* ModuleExp.java (evalModul):  Don't print expression if mustCompile,
	since then Compililation.compile takes care of it.

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

	* Compilation.java (compileToFiles):  Move debugPrintExpr handling ...
	(compile): ... to here, so it also works when compiling to archive.

	* Compilation.java (compileToArchive):  Enable .jar support.

	* FindTailCalls.java (walkLetExp): Optimize letrec-like forms.
	(walkSetExp): Supress assignment if optimized above.

	* LetExp.java (compile): If init value is #!undefined, convert
	to #!null or zero.
	
	* QuoteExp.java (getInstance): New static method.

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

	* CheckedTarget.java (argno): Make field 1-orgin, matching WrongType.
	(<init>): New constructor, for general non-call casting.
	(getInstance): New factor method, for non-call casting.
	(initWrongType): Called methods now take extra parameter.
	(emitCheckedCoerce): Take an extra Variable with argValue.
	(emitCheckedCoerce): Pass incoming value to WrongType.make.
	* LambdaExp.java (enterFunction): Adjust argument number to 1-origin.
	* PrimProcedure.java (compileArgs): Likewise.
	* Compilation.java (generateApplyMethodsWithoutContext,
	generateApplyMethodsWithContext): Likewise.
	(generateApplyMethodsWithoutContext): Pass incoming Variable to
	CheckedTarget.emitCheckedCoerceif there is one.
	* LetExp.java (compile): Coerce value using CheckedTarget.

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

	* Compilation.java (usedClass):  Generalize parmater to Type, so we
	can also handle ArrayTypes.  Check immediate here, instead of callers.
	* PrimProcedure.java (compile):  Can thus simplify here.
	* StackTarget.java (emitCoerceFromObject):  Call usedClass.

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

	* Compilation.java (addClass):  Move staticModule variable earlier.
	Make the apply_method ("run") static in a staticModule.
	Call the apply_method from "<cinit>" if staticModule, regardless
	of whether we have a moduleInstanceVar.
	Fixes Savannah bug #10600 "top level vars not always initialized".

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

	* IfExp.java (walkChildren):  Allow else_clause to be null.

	* LitTable.java (findLiteral): Also search superclasses for
	static fields.

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

	* Compilation.java (addClass): Don't implement Runnable for Servlets.

	* Compilation.java (generateApplyMethodsWithContext):  May need to load
	moduleInstanceMainField, just as in generateApplyMethodsWithoutContext.

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

	Change tailcall function API to use matchX+apply.
	* ApplyExp.java (eval):  Update to use checkN instead of setArgsN.
	(compile):  Likewise use checkX instead of setArgsX.
	Don't set proc field - that's checkX's responsibility now.
	* Compilation.java (typeModuleWithContext):  New field.
	(typeCallFrame, typeCpsMethodProc, typeCpsMethodContainer):  Remove.
	(getMethodProcType):  Remove method - result always typeModuleMethod..
	(getModuleType, generateMatchMethods):  New methods.
	(generateApplyMethods):  Replace by two ...
	(generateApplyMethodsWithContext, generateApplyMethodsWithoutContext):
	... new methods.
	(compile):  If module is not a ModuleBody, create frame helper class.
	(addClass):  Don't emit numArgs.
	Just generate "run" for module body.
	* GenericProc.java (applyN):  Update to use matchN+runUntilValue.
	(match, applyV):  Remove method.
	(match0, match1, match2, match3, match4, applyN):  New methods.
	* LambdaExp.java (compileEnd):  Generate match methods, and right kind
	of apply methods, depending on defailtCallonvention.
	(getSelectorValue):  Get separate selector value for each method.
	(allocFieldFor):  All modules are now ModuleBody or a subclass.
	(allocFrame):  Use Compilation's getModuleType.
	* ModuleBody.java (apply0):  Update to use match0.
	(run):  Tweaks, since CallConsumer no longer has "run" method..
	 (runCleanup):  New helper method used by run and compiled code.
	(runAsMain):  Calls run method.
	(match0, match1, match2, match3, match4, matchN):  New methods.
	* ModuleExp.java (evalModule):  Run module explicitly.
	* ModuleMethod.java (<init>):  New constructor.
	(getName, math0, match1, match2, match3, match4, matchN, apply,
	apply0Default, apply1Default, apply2Default, apply3Default, 
	apply4Default, applyNDefault, applyError):  New methods.
	(applyV):  Remove method.
	* ModuleWithContext.java:  New class, extends ModuleBody.
	* Makefile.am:  Update accordingly.
	* PrimProcedure.java (match, applyV):  Remove methods.
	(match0, match1, match2, match2, match4, matchN, apply):  New methods.
	(getProcedureClass):  Don't test for removed CpsMethodProc.
	* ProcInitializer.java (emitLoadModuleMethod):  Don't use removed
	getMethodProcType.

	* CheckedTarget.java (emitCheckedCoerce):  Argument numbering
	has been changed to 1-orgin.

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

	* ModuleBody.java:  Extend Procedure0 instead of CpsProcedure.
	(apply0):  Use CallContext's runUntilValue instead of applyV.

	* Compilation.java (typeCpsProcedure):  Remove field.
	(typeCpsMethodProc):  Don't inherit from CpsProcedure.

	* Compilation.java (moduleClass):  New field.
	(typeApplyMethodProc, typeApplyMethodContainer):  Remove fields.
	(getMethodProcType):  Never return typeApplyMethodProc.
	(compile):  If mainClass doesn't extend ModuleBody,
	allocate helper class moduleClass.
	Implement Runnable independent of super class.
	(generateApplyMethods):  We never generate ApplyMethodContainer,
	but we may add methoods to moduleClass instead.
	(addClass):  $instance variable is now generated in ProcInitializer.
	If we do have a helper moduleClass, we do have to generate "run".
	* ProcInitializer.java (emitLoadModuleMethod):  Allocate moduleClass
	here.  May need to add a $main field to reference mainClass.
	* PrimProcedure.java:  Don't need to handle ApplyMethodProc.

	* ModuleExp.java (evalModule):  Don't default module to static.

	* ModuleBody.java (run()):  Use existing VoidConsumer instance.

	* ModuleBody.java (run(Environment)):  Remove obsolete method.
	(run(Consumer)):  Don't call run(Environment).

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

	Optimization in <clinit>:  Change $instance from field to variable.
	* Compilation.java (instanceField):  Remove Field field, replaced by
	(moduleInstanceVar):  ... new Variable field.
	(addClass):  Allocate moduleInstanceVar in a local Scope.
	* ProcInitializer.java (<init>):  Don't check instanceField.
	(emitLoadModuleMethod):  Use moduleInstanceVar.

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

	* Compilation.java (emitLiterals):  Inline and remove method.
	(addClass):  Use new fixupChain methods.
	This removes need for generating $literals$ method.

	* CheckedTarget.java (emitCheckedCoerce):  Use new Label-based
	addHandler.  Use new beginFragment/endFragment methods.

	* LambdaExp.java (enterFunction):  Use updated setStartPC method.

2004-07-27  Chris Dean  <ctdean@sokitomi.com>

	* Compilation.java:  Add --warn-as-error.
	* ExpWalker.java (ExpWalker):  Check --warn-as-error.

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

	* ApplyExp.java:  Use static syntax to access static fields/methods.
	* BindingInitializer.java:  Likewise.
	* ClassExp.java:  Likewise.
	* Compilation.java:  Likewise.
	* ConsumerTarget.java:  Likewise.
	* Declaration.java:  Likewise.
	* LambdaExp.java:  Likewise.
	* ObjectExp.java:  Likewise.
	* ProcInitializer.java:  Likewise.
	* SetExp.java:  Likewise.
	* CheckedTarget.java:  Remove unused import statements.
	* InlineCalls.java:  Likewise.
	* Keyword.java:  Likewise.
	* ModuleExp.java:  Likewise.
	* ObjectExp.java:  Likewise.
	* PrimProcedure.java:  Likewise.
	* SeriesTarget.java:  Likewise.
	* Symbols.java:  Likewise.
	* Undefined.java:  Likewise.

	* FindTailCalls.java (findTailCalls):  Take Compilation parameter.
	* Compilation.java (compile):  Pass this to findTailCalls.
	* Compilation.java (usingCPSStyle):  Make non-static. 
	* FindTailCalls.java (walkLambdaExp):  Update accordingly.
	* FindCapturedVars.java (capture):  Likewise.

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

	* Keyword.java:  Make no longer extend CpsProcedure.
	(apply):  Remove method.
	Reverts 2002-02-13, 2001-06-03 changes.
	
2004-06-27  Per Bothner  <per@bothner.com>

	* FindCapturedVars.java (walkReferenceExp):  Check for '<classname>'.

2004-06-21  Per Bothner  <per@bothner.com>

	* ClassExp.java (getCompiledClassType):  Method body moved to ...
	(setParts):  ... new non-public void method.
	Also, catch exception to warn about unknown class.
	(getCompiledClassType):  Now just returns type.  Make protected.
	(walk):  Call setParts instead of getCompiledClassType.
	* InlineCalls.java (walkClassExp):  Likewise.
	* LambdaExp.java (getCompiledClassType):  Make protected.

	* LambdaExp.java (throwsSpecification):  New field.
	(setExceptions):  New method.
	(addMethodFor):  If throwsSpecification is set, add Exceptions
	attribute for generated Method.

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

	* Compilation.java (emitLiterals):  Merge some stuff from caller.
	(addClass):  Simplify - almost always create $literals$ method.
	Simplify call to emitLiterals.
	Fixes Savannah bug #9158 "defmacro & archive/files compilation broken".

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

	* Compilation.java (addClass):  Restore curLambda *after* compileEnd.
	Fixes Savannah bug #9010 "compilation of define-alias form causes NPE".

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

	* LambdaExp.java (inlinedIn):  Our caller might be the outer lambda.
	Fixes Savannah bug #8955 "VerifyError in srfi1.scm".

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

	* FindTailCalls.java (walkApplyExp):  Don't call walkLambdaExp
	in the case of a ClassExp.
	(walkSetExp):  Likewise.
	Fixes bug #8711.

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

	* Compilation.java (generateApplyMethods):  Emit line numbers.

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

	* Compilation.java (addClass):  Move call to compileEnd (specifically
	to generateApplyMethods) after initializers (since they may contain
	lambdas) but do emitLiterals after them.
	Move literals initialization to new '$literals' method.
	Fixes bug #8818.

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

	* LambdaExp.java (loadHeapFrame):  May need to use closureEnv,
	even when this is curLambda.  Fix verification error on psyntax.pp
	* LambdaExp.java (compileEnd):  Don't popScope if inlineOnly,
	since closureEnv may be needed for nested inlined methods.
	* ApplyExp.java (compile): Do popScope later after compileChildMethods.

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

	* Declaration.java (isStatic):  Also check NONSTATIC_SPECIFIED.
	(makeField):  Use isStatic method.
	* LambdaExp.java (allocFieldFor):  If immediate default to static.
	(compile):  Don't allocate field if immediate and module-level.
	* ModuleExp.java (evalModule):  Default to static.
	(allocField):  Don't allocate field if immediate, even for LambdaExp.
	
2004-03-08  Per Bothner  <per@bothner.com>

	* Declaration.java (load):  If indirect and immediate, load symbol.
	* ModuleExp.java (allocFields):  In immediate mode, make indirect.
	* ReferenceExp.java (compile):  If indirect, fix return type.
	* SetExp.java (compile):  If immediate, skip first two options.
	If indirect procedure use setFunctionValue.

	* Interpreter.java (getSymbolProcedure):  Trivial optimization.

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

	* Compilation.java (generateApplyMethods):  Move save/set/restore of
	curClass here from LambdaExp's compileEnd.
	* LambdaExp.java (compileEnd):  Simplify generateApplyMethods call.

	* ModuleExp.java (allocFields):  Remove special case for IS_SYNTAX.
	* SetExp.java (compile):  Likewise.
	* LambdaExp.java (NO_FIELD):  Make public; needed by defined_syntax.
	(compile):  If NO_FIELD, need to addApplyMethod here.
	* Declaration.java (setSyntax):  New method.

	* Compilation.java (typeMacro):  Remove unused static field.

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

	* Interpreter.java (asType):  Handle FString.

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

	* Interpreter.java (languages):  Add entry for "q2".

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

	* LangExp.java:  New class, extends Expression.
	* Makefile.am:  Update accordingly.
	* ExpWalker.java (walkLangExp):  New method.

	* LambdaExp.java (addMethodFor):  Set access flags from nameDecl.

	* LambdaExp.java (nameDecl, returnType):  Make public, for Lambda.

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

	* Compilation.java (compileToFiles):  Don't outputClass after error.

	* Declaration.java (PRIVATE_ACCESS, PROTECTED_ACCESS, PUBLIC_ACCESS,
	PACKAGE_ACCESS):  New flags.
	(getAccessFlags):  New method.
	* ClassExp.java (declareParts):  Use new method.
	Take Compilation parameter.  Pass it to LambdaExp's addMethodFor.
	(getCompiledClassType):  Adjust declareParts call accordingly.

	* ClassExp.java (walk):  Set/restore Compilation's curClass.
	Used by isAccessible calls in gnu.kawa.reflect.

2003-12-25  Per Bothner  <per@bothner.com>

	* ReferenceExp.java (ReferenceExp):  Use decl's getSymbol, not getName.

	* ResolveNames.java (<init>):  New constructors.
	(resolveModule):  New helper method.
	(resolveNames):  Remove static method
	(walkScopeExp):  Split initial lookup.push into separate ...
	(push): ... new method that can be overridden.
	(walkReferenceExp, setExp):  Split lookup.lookup into separate ...
	(lookup): ... new method that can be overridden.

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

	* ApplyExp.java (getFunctionValue):  New method.

	* Interpreter.java (NAMESPACE_PREFIX_NAMESPACE):  New constant.
	* Declaration.java (IS_NAMESPACE_PREFIX):  New constant.
	(isNamespaceDecl):  New constant.

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

	* Interpreter.java (read):  Remove unused method.

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

	* Compilation.java (forNameHelper):  New field.
	(getForNameHelper):  New method.
	* ClassExp.java (compilePushClass):  Call method generated by
	getForNameHelper, instead of the 1-argument Class.forName, which
	prematurely initializes class.

	* ClassExp.java (clinitMethod):  New field.
	(declareParts):  Handle clinitMethod.
	(addMethodFor):  Likewise.

	* Compilation.java (setTypes):  Take Compilation parameter,
	and if non-null use it for error messages.
	(getCompiledClassType):  Call setTypes directly, passing Compilation.

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

	* Interpreter.java (quote_sym, unquote_sym, unquotesplicing_sym,
	quasiquote_sym):  Move constants to gnu.kawa.lispexpr.LispInterpreter.

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

	* Interpreter.java (getDefaultSymbolValue):  Allow ':local'
	as well as 'prefix:local'.

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

	* PrimProcedure.java (applyV):  Handle takesContext().

	* Interpreter.java (eval):  Use CallContext's startFromContext
	and getFromContext methods.

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

	* Interpreter.java (parse): Change abstract method to take a Lexer.
	Add final method with older interface.

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

	* Declaration.java (<init>):  Use setName method.
	(setName):  Make final.

	* SetExp.java (compile):  Implement isSetIfUnbound, as used by
	Scheme define-variable and Common Lisp defvar.

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

	* Interpreter.java (PARSE_IMMEDIATE, PARSE_ONE_LINE):  New constants.
	(parse, parseFile):  Combine two abstract methods into new method.
	(parse(InPort,SourcesMessages,int)):  New abstract method.

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

	* StackTarget.java (emitCoerceFromObject):  New static helper method.
	(convert, compileFromStack):  Use it.
	* CheckedTarget.java (emitCheckedCoerce):  Likewise.

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

	* Compilation.java (<init>)  Add Interpreter argument.
	(interp):  New Interpreter field.
	(getInterpreter):  Change to return interp.
	(resolve):  Moved here from kawa/lang/Translator.

	* FindCapturedVars.java (walkReferenceExp):  Warn if the flag
	'warn-undefined-variable' is and decl is unknown.

	* BeginExp.java (compileOptions):  New field.
	(setCompileOptions, pushOptions, popOptions):  New methods.
	(compile, walkChildren):  Use pushOptions and popOptons.
	(print):  Print compileOptions is non-null.

	* Compilation.java (getBooleanOption(Sring,boolean)):  New method.

	* Compilation.java:  New option "warn-invoke-unknown-method".

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

	* Compilation.java (options):  New static field.
	(currentOptions):  New field.
	(getBooleanOption):  New helper method,
	
2003-10-12  Per Bothner  <per@bothner.com>

	* BeginExp.java (canonicalize):  New static method.

	* Inlinecalls.java (walkApplyExp):  If procedure is Inlineable,
	replace reference by quoted value.

	* Compilation.java (mangleURI):  New static method.

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

	* Declaration.java (makeField):  Revert 10-08 change.

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

	* ModuleBody.java:  No longer implement Runnable.
	* Compilation.java (getModuleSuperType):  Inline into addClass.
	(addClass):  Add Runnable as implemented interface if non-static.
	(allocClass):  Inline into addClass.
	(addClass):  Set instanceField earlier since used by ProcInitializer.

	* PrimProcedure.java (compile/4):  Change 2nd operand to ApplyExp.
	Also optimize IgnoreTarget.  Add sometimes-needed runUntilDone call.
	(compile/3):  Change caller appropriately.
	* ApplyExp.java (compile):  Likewise.

	* PrimProcedure.java (numArgs):  Adjust for takesContext().
	(getProcedureClass):  Handle ApplyMethodProc and CpsMethodProc.
	(getMethodFor/5):  Also search for methods ending in $X and $V$X.
	Remove unused local variable 'variable'.

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

	* Declaration (makeField):  If name is a Symbol for an indirect
	binding (e.g. a top-level XQuery variable), compile name to field.
	* FindCapturedVars.java (walkFluidLetExp, walkReferenceExp,
	walkSetExp):  Pass name as Object, not String, to allocUnboundDecl.
	(allocUnboundDecl):  Variable name may be Symbol. not just String.
	* ProcInitializer.java (emitLoadModuleMethod):  If Procedure has a
	nameDecl, use its symbol, which in XQuery or CLisp may be a Symbol.
	* ModuleMethod.java (<init>):  Name can be a Symbol or a String.

	* LambdaExp.java (getCallConvention, isHandlingTailCalls):  Don't
	treat static modules different from non-static.
	(allocChildClasses):  Check for inline methods.  Check for
	CALL_WITH_CONSUMER convention rather than just tailcall convention.
	* Compilation.java (addClass):  Make static modules simpler and more
	consistent with non-static by using apply method.

	* InlineCalls.java (walkApplyExp):  If function is a Symbol with
	bound function, use the latter.
	* PrimProcedure.java (takesContext):  New method.
	(takesVarArgs):  Check for method name ending with $V$X as well as $V.
	(compileArgs):  Make non-static and simplify.  Adjust for context arg.
	(compile):  Handle methods that take context arg.
	(getMethodFor):  Handle case of incoming PrimProcedure.
	* ApplyExp.java (compile):  Allow direct invocation of known method if
	CALL_WITH_CONSUMER or if CALL_WITH_TAILCALLS and not in tail position.

	* FindTailCalls.java (walkApplyExp):  If function is append-values,
	then last operand may be a tail-call.

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

	* LitTable.java (staticTable):  New static field.
	(findLiteral):  If not in literalTable, try staticTable, and if that
	fails, search public static final fields of class.
	Remove various special cases, such as values.empty.
	* Compilation (voidConstant, undefinedConstant, emptyConstant,
	eofConstant):  Remove no-longer needed static fields.
	(compileConstantToField):  New helper method.
	(compileConstant):  Use it.
	Fixes Savannah bug #5651.
	* Interpreter.java (trueObject, falseObject, undefinedObject,
	voidObject):  Remove unused static fields.

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

	* Undefined.java (undef):  Rename field to undefined, and make it
	public, final, and initialized.
	(getInstance):   Just return the value of the undefined field.

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

	* PrimProcedure.java (<init>(Method,LambdaExp)):  Re-set retType.
	* ApplyExp.java (compile):  Defer method inlining to PrimProcedure.

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

	* Declaration.java (setNext):  New method.

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

	* ApplyExp.java (compile):  Remove redundant error checks.
	* LambdaExp.java (isClassGenerated):  Simplify.
	(restArgType):  Check for CallContext parameter.
	(addMethodFor):  When CALL_USING_CONSUMER or _TAILCALLS generate stubs
	and methods with real arguments in addition to CallContext.
	(allocChildClasses, allocParameters, enterFunction):  Related changes.
	* Compilation.java (generateApplyMethods):  Likewise.

	* Compilation.java (defaultCallConvention):  New static field.
	(CALL_WITH_UNSPECIFIED, CALL_WITH_RETURN, CALL_WITH_CONSUMER,
	CALL_WITH_TAILCALLS, CALL_WITH_CONTINUATIONS):  New constants.
	CALL_WITH_CONSUMER is a new API, new default for XQuery and ModuleExps.
	(usingCPStyle, usingTailCalls):  Remove static fields.
	* Compilation.java, ApplyExp.java, FindCapturedVars.java,
	LambdaExp.java, ObjectExp.java:  Update accordingly.
	* LambdaExp.java (getCallConvention):  New method.

	* Compilation.java (letStart, letVariable, letEnter, letDone):
	New helper methods for constructing a LetExp.
	(loopStart, loopVariable, loopEnter, loopCond, loopBody, loopRepeat):
	New helper methods for constructing a for-style loop.

	* InlineCalls.java (getCompilation):  Move method to base class.
	* ExpWalker.java (getCompilation):  Moved method.

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

	* ApplyExp.java (type):  New field.
	(getType):  Cache result in type field.

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

	* ConsumerTarget.java (isContextTarget):  New field.
	(isContextTarget, makeContextTarget):  New methods.
	* LambdaExp.java (compileBody):  Use makeContextTarget.
	* ApplyExp.java (compile):  Minor optimization.

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

	* Compilation.java (callInitMethods):  Don't call recursively
	on superclass - that gets handled by super's <init>.
	Fixes Savannah bug #4540.

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

	* ExpWalker.java (comp):  New field.
	(setContext):  New method.
	* ChainLambdas.java (comp):  Remove field - use super.comp instead.
	(chainLambda):  Use setContext methods.
	* InlineCalls.java (comp):  Remove field - use super.comp instead.
	(inlineCalls):  Use setContext methods.
	* FindCapturedVars.java (findCapturedVars):  Take new Compilation
	parameter, and pass value to ExpWalker's setContext.
	(capture):  Emit error if static references non-static.
	* Compilation.java (compile):  Pass this to FindCapturedVars.

	* InlineCalls.java (walkApplyExp):  Do followAliases.

	* PairClassType.java (<init>):  Don't set INTERFACE - it is possible
	this isn't an actual class pair, but we need the static link.

	* Declaration.java (makeField):  If a non-captured ClassExp,
	make field static.

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

	* Declaration.java (makeField):  Use implementation type for field.
	(allocateVariable):  Use implementation type for bytecode variable.
	* LambdaExp.java (allocChildClasses):  Likewise for captured variable.
	(enterFunction):  Likewise for method parameter type.

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

	* ConsumerTarget.java (compileUsingConsumer): New static helper method.
	(compileUsingConsumer):  Use new method.

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

	* LambdaExp.java (compileBody):  Use LambdaExp's language-based
	return type, not the methods primitive type.
	Fixes Savannah bug #4423.

2003-07-22  Daniel Bonniot  <Daniel.Bonniot@inria.fr>

	* ModuleMethod.java (<init>):  Optimization.

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

	* ApplyExp.java (compile):  Check if func's closureEnv is null.
	Fixes by reported by Chris.Dean@sokitomi.com 03-19.
	Needed because of 03-02 change to LambdaExp.java.

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

	* PrimProcedure.java: Add invoke-special to call super classes.
	Add constructor and emit byte code for invoke-special.

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

	* ApplyExp.java (inlineIfConstant):  New overload - pass ExpWalker.
	Print warning and return argument if folding throws exception.
	(inlineIfConstant):  Remove old no-longer-needed method.

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

	* PrimProcedure.java (makeBuiltinUnary):  New factory method.

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

	* Keyword.java (apply):  Use CallContext's getNextArg
	method rather than getArgAsObject, which will be deprecated.
	* PrimProcedure.java (match):  Likewise.

	* Interpreter.java (eval):  Fix incorrect instanceof test.

2003-06-06  Per Bothner  <per@bothner.com>

	* Expression.java (compileNotePosition):  Take extra parameter.
	(compileWithPosition):  Add overloaded version.
	* PrimProcedure.java (compileArgs):  Update compileNotePosition call.
	* LambdaExp.java (compileBody):  If body doesn't have line,
	use LambdaExp's line.

	* InlineCalls.java (rewriteToInvocation, walkApplyExp):  Call setLine
	to copy line number info on newly allocated ApplyExp.

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

	* LambdaExp.java (inlinedIn):  New helper method.
	(declareClosureEnv):  Partially revert 05-30 change, but make
	use to inlineIn to simplify and fix one case.
	(enterFunction):  Don't set closureEnv if inlinedIn outer.

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

	* Interpreter.java (getOutputConsumer):  Generalize to take Writer.
	(eval(String,PrintConsumer)):  Call getOutputConsumer.
	(eval(Reader,Writer)):  Likewise,

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

	* LambdaExp.java (declareClosureEnv):  Simplify - if inline-only,
	used the parentFrame.
	(enterFunction):  Don;'t need to set closeEnv if inline-only.
	Fixes bug reported 05-26 by Sven.Hartrumpf@FernUni-Hagen.de.

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

	* Compilation.java (compileConstant):  Better error message on void.

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

	* FindCapturedVars.java (walkLetExp):  Generalize letrec-optimization.

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

	* InlineCalls.java (getCompilation):  New method.

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

	* Compilation.java (lexical):  Make non-final.  Having it final
	triggers a bug in JDK 1.1.8's javac, and it doesn't need to be final.

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

	* InlineCalls.java (rewriteToInvocation):  Make non-static.
	Call inline method on resulting Invoke procedure.

	* Interpreter.java (getDefaultSymbolValue):  Check for unresolved
	namespace prefix.

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

	* ChainLambda.java (walkClassExp):  Don't set ClassExp types here
	(since that is too late given that it may be needed by Inlinecalls).
	* InlineCalls.java (walkClassExp):  Do it here instead.
	Fixes bug reported 03-20 by Vladimir Tsichevski <wowa1@online.ru>.
	
2003-04-27  Per Bothner  <per@bothner.com>

	* ThisExp.java (compile):  Do nothing if IgnoreTarget.  Otherwise call
	compileFromStack.  Fixes bug reported 04-24 by Vladimir Tsichevski.

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

	* PrimProcedure.java (compileArgs, compile):  Call usedClass on
	classes declaring method and parameter and return types.

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

	* ResolveNames.java:  New class, extends ExpWalker.
	* Makefile.am (java_sources):  Update.

2003-04-19  Chris Dean  <Chris.Dean@sokitomi.com>

	* ModuleMethod.java (match):  Allow null as parameter.
	
2003-04-19  Per Bothner  <per@bothner.com>

	* LambdaExp.java (compileAsMethod):  Fix call to deprecated method.

	* Compilation.java (lexical):  New field, moved from Translation.
	(<init>):  Initialize lexical field.
	(pus, pop):  Also call corresponding operations on lexical.
	(push(Declaration)):  New method.
	(lookup):  Just call lexical.lookup.

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

	* LambdaExp.java (compile):  Do nothing if target is IgnoreTarget,
	and if function isn't read.

	* NameLookup.java:  New class.
	* Makefile.am (java_sources):  Update.

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

	* Declaration.java (compileStore):  Use emitPutStatic if static field.
	* Declaration.java (isStatic):  If current scope is not a LambdaExp,
	check the outer LambdaExp for whether it is a static module.
	* FindCapturedVars.java (capture):  If we capture a simple static
	variable, we still have to save it in the caturedDecls list.
	* LambdaExp.java (enterFunction):  Alloocate cpapturedVars as static
	fields if there is no heapFrame.
	Fixes bug reported 3/31 by Wen_Chun Ni <wcn@tbcommerce.com>.

	* LambdaExp.java (loadHeapFrame):  If closureEnv is null, push this.
	Change needed because of 03-02 change.

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

	* Declaration.java (FIELD_OR_METHOD):  New flag.

2003-04-12  Vladimir Tsichevski <wowa1@online.ru>

	* ObjectExp.java (compile): If closureEnv is null, push this instead.
	Change needed because of 03-02 change.

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

	* Special.java (make):  Return Special instead of Object.
	Since eof instead a Special, don't handle eof here.
	Fixes bug reported 04-05 by Vladimir Tsichevski.

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

	* ModuleExp.java (evalToClass):  Don't use SFormat for debug output.
	* ReferenceExp.java (print):  Don't use SFormat.
	* SetExp.java (print):  Likewise.

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

	* LambdaExp.java (getOwningLambda):  New methods, replaces
	static getHeapLambda.
	Don't stop at ClassExp unless getNeedsCloseEnv.
	(allocFieldFor, compileSetField, addMethodFor):  Use getOwningLambda.
	* ApplyExp.java (compile):  Use getOwningLambda.
	* ObjectExp.java (compile):  Likewise.
	* ProcInitializer.java (<init>):  Likewise.
	* ClassInitializer.java (<init>):  Likewise.
	
	* ClassExp.java (compilePushClass):  New method.
	(compile):  Use compilePushClass.
	* ClassInitializer.java (<init>):  Call ClassExp.compile here instead
	of indirectly in emit.  The latter may be too late if compile
	generates extra initializers, such as if there is a lambda.

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

	* FindTailCalls.java (walklambdaExp):  Set CANNOT_INLINE for
	class methods.
	* ModuleExp.java (allocFields):  A ClassExp always gets a field,
	even if it is private.
	* SetExp.java (compile):  Call compileSetField for a ClassExp
	even if it is private.

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

	* BindingInitializer.java (emit):  Modify optimization of 200-06-09.
	Fixes bug reported 03-29 by Vladimir Tsichevski <wowa1@online.ru>.

	* Interpreter.java (define_method):  Remove last parameter.
	Use ClassMethods.apply.

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

	* Interpreter.java (define_method):  New method.

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

	* Declaration.java (pushIndirectBinding):  Update to use named
	Symbol.make -> makeUninterned method.

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

	* LetExp.java (print):  Add a writeSpaceFill call.

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

	* LambdaExp.java (addMethodFor):  Don't set closureEnv.

	* Declaration.java (printInfo):  New method.
	* LetExp.java (print):  Use printInfo.
	* LambdaExp.java (print):  Likewise.  Create logical blocks.
	* ModuleExp.java (print):  Likewise.

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

	* LambdaExp.java (enterFunction):  No need to allocate a staticLink
	field if this is a ModuleExp - it's never used.

	* FindCapturedVars.java (capture):  If decl has a base field, just
	capture that, but don't do anything else.

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

	* InlineCalls.java (walkIfExp):  New method - fold if constant test.

2003-02-20  Tom Reilly <treilly@macromedia.com>

	* Compilation.java (outputClass):  Made separate method,
	for use by gnu.kawa.servlet.KawaPageServlet.
	(compileToFiles):  Call outputClass.

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

	* ClassExp.java (getCompiledClassType):  Add package prefixes to
	names of simple classes.

	* ClassExp.java (compile):  Replace deprecated init_param_slots calls
	by startCode.

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

	* LambdaExp.java (addMethodFor):  Only make $finit$ method private
	if this is a simple (non-pair) class.

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

	* ApplyExp.java (eval): If procedure is null, throw exception.

2003-01-01  Per Bothner  <per@bothner.com>

	Field names now use the reversible mangleNameIfNeeded - though
	method names don't.
	* Interpreter.java (define_field):  Use mangleNameIfNeeded.
	* LambdaExp.java (allocFieldFor):  Use mangleNameIfNeeded.
	* Declaration.java (allocateVariable, makeField):  Likewise.
	* PrimProcedure.java (getMethodFor):  Don't use field name for
	mangledName, as they may be mangled differently.

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

	* Compilation.java (compileTarget):  Better handling of Values.

	* Interpreter.java (eval(String,PrintConsumer)):  New method overload.

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

	*  Interpreter.java (define_field):  Move 2 methods from
	kawa.standard.Scheme.

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

	* Interpreter.java (getSymbolValue, getSymbolProcedure,
	getDefaultSymbolValue):  New methods.
	* Compilation.java (lookup):  Argument can be Symbol as well as String.
	(getSymbolValueMethod, getSymbolProcedureMethod):  New fields.
	* ReferenceExp.java (eval):  Handle Symbol better.
	(eval, compile):  Use new Interpreter methods.
	* InlineCalls.java (rewriteToInvocation):  New method.
	(walkApplyExp):  If function is Symbol, try rewriteToInvocation.

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

	* Interpreter.java (NAMESPACE_PREFIX):  New constant.

	* ReferenceExp (getName):  If name is a Symbol, use Symbol.getName.
	* Interpreter.java (asType):  Likewise.
	* LambdaExp.java (setName):  New method.

	* LambdaExp.java (print):  Print decl itself, rather than its name,

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

	* CatchClause.java (<init>):  Name parameter need not be a String.

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

	* Declaration.java (name):  Removed field, replaced by:
	(symbol):  New field, either a String or a Symbol.
	(getName, toString):  Changed to match.
	(getSymbol):  New method.
	(setName. <init>):  Changed parameter type.
	* ScopeExp.java (lookup, getNoDefined, getDefine, addDeclaration):
	Declaration name an be arbitrary Object, not just String.
	* SetExp.java:  Removed field, replaced by:
	(symbol):  New field, either a String or a Symbol.
	(getSymbol):  New method.
	(getName, <init>, eval, compile. print):  Changed accordingly.

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

	* PrimProcedure.java (match): Catch ClassCastException if coercing
	'this' fails.

	* FindTailCalls.java (walkFluidLetExp): Set inTailContext to false for
	body, since we need to restore bindings at end.
	Fixes bug reported by Wen-Chun Ni <wcn@tbcommerce.com>.

	* LetExp.java (print):  New overloaded method.
	* FluidLetExp.java (print):  New method.

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

	* Interpreter.java (parseFile):  Take extra 'immediate' argument.
	(eval):  Set/restore current Envronment and Interpreter.
	Call parseFile with 'immediate' argument as true.

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

	* Symbol.java:  Renamed to Symbol.java.
	* Makefile.am, Keyword.java:  Update to match.

2002-10-22  Daniel Bonniot  <bonniot@users.sourceforge.net>

	* Compilation.java (compileConstant(Object,Target)): Convert integer
	constants when the target is type short or type byte.

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

	* Declaration.java (followAliases):  If decl is an import decl created
	by require, and not exported, then skip to the exported field.
	(makeField):  If this is an alias, but it is constant, use base's type.

	* ModuleExp.java (allocFields):  Skip if decl.ignorable().

	* Compilation.java (addClass):  Change first arg to ModuleExp.
	This allows some simplification.

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

	* LambdaExp.java (allocFrame): Never set type from frameType.
	Change suggested by Daniel.Bonniot@inria.fr.

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

	* Compilation.java (inlineOk):  Ignore flag if nested procedure.

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

	* Declaration.java (IS_ALIAS):  Make public.
	(isLexical):  Static can be lexical.
	(makeField):  If decl is alias, make field a Location, not a Binding.
	* FindTailCalls.java (walkSetExp):  Walk value even if defining alias.
	* SetExp.java (compile):  Don't initialize simple public alias
	using an AliasConstraint - Location is set by BindingInitializer.
	* ModuleExp.java (allocFields):  Don't clear value if an alias.
	* Interpreter.java (getTypeFor):  Handle imported aliases.

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

	* Compilation.java (inlineOk):  New static field.
	(inlineOk):  Two new methods.
	* ApplyExp.java (compile):  Only inline if inlineOk.
	* InlineCalls.java (walkApplyExp):  Only inline if inlineOk.

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

	* ConsumerTarget.java (compileFromStack):  Handle the case where
	the stack value is long or double, which emitSwap doesn't support.
	Fixes bug reported by Jim White <jim@pagesmiths.com>.

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

	* SetExp.java (walkChildren):  Use new ExpWalker walk method.

	* Compilation.java (generateConstructor):  Create dummy LambdaExpr
	for processing initChain.
	* SetExp.java (compile):  Combine IS_SYNTAX case with QuoteExp case.
	Also handle IS_CONSTANT here.  Allow private and immediate.
	* Declaration.java (makeField):  Unknowns are no longer automatically
	static.  If type not specified, don't infer it from value.
	Do create BindingInitializer for unknowns.
	* FindCapturedVars.java (walkModuleExp):  Don't generate SetExps
	for unknowns - they should to be emitted earlier, in case of
	mutual dependent modules (when they are implemented).
	(capture):  Now need to handle captured unknowns - not always static.
	However, force static if in a static function or class,
	(walkReferenceExp, walkSetExp):  Unknowns are no longer always static.
	* ModuleExp.java (allocFields):  Allocate unknowns first.

	* ApplyExp.java (compile):  Don't call using tailcall-handling API
	unless either call is a tail-call or target is ConsumerTarget.

2002-08-09  Per Bothner  <per@bothner.com>
(
	* ModuleBody.java (runAsMain):  Do defineAll, so exported bindings
	get placed in environment.

	* StackTarget.java (compileFromStack0):  If we did a emitCoerceToObject
	then the stackType changed.

	* InlineCalls.java (walkApplyExp):  Micro-optimization.

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

	* Compilation (usedClass):  New method.
	(callInitMethods):  New method.
	(generateConstructor):  Use callInitMethods to generate $finit$ calls.

	* ClassExp.java (usedSuperClasses):  New private helper method.
	(compile):  Call usedSuperClasses.
	* Compilation (loader):  New field.
	* Moduleexp.java (evalToClass):  Allocate ClassLoader early.
	Re-arrange loops to classes to class-loader using addClass.

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

	* Interpreter.java (loadClass):  Slightly better exception message.

	* PrimProcedure.java (getParameterType):  Handle <list> #!rest type.
	(getMethodFor):  New overload, takes ClassType rather than Class.
	Looks for most specific definitely applicable method.

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

	* Compilation.java (compile):  Pass this to InlineCalls.
	* InlineCalls.java (inlineCalls):  Save Compilation and messages.
	(walkApplyExp):  Check for correct argument count.
	Resolve known procedures to PrimProcedure.  This used to be done
	in ApplyExp, but it is better to do it earlier.
	* ApplyExp.java (walkChildren):  Inline 1-argument walkExps.
	(compile):  Don't check argument count or look for PrimProcedure here.

	* Compilation.java (error):  Remove no-longer used methods.

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

	* Compilation.java:  Merge in functionality of Parser.java.
	(current_scope, messages):  New fields.
	(filename, position):  Remove fields - uses messages instead.
	(error):  Chaneg to use messages.
	(currentLambda, getModule, setModule, currentModule, currentScope,
	musCompileHerem push, pop, lookupm getMessages, setMessages,
	getFile, getLine, getColumn, setFile, setLine, setColumn): New methods.
	(immediate):  Make public.
	(getIntepreter):  Call Interpreter's static getInterpreter.
	(<init>):  New simple constructors.
	(compile):  New method, contains bulk of old constructor.
	Add two tests to return if seenErrors.
	(compileToFiles, compileToArchive):  Moved from ModuleExp.java.
	* Parser.java:  Remove file.
	* Makefile.am (java_sources):  Remove Parser.java.
	* ModuleExp.java (eval):  Remove method - inlined in evalModule.
	(evalToCall, evalModule):  Make static - pass in Compilation.
	(compileToFiles, compileToArchive):  Moved to COmpilation.java.
	* CheckedTarget.java (emitCheckedCoerce):  Use comp's getLine method.
	* Expression.java (compileNotePosition):  Use line-related methods.
	(makeWhile):  Update Parser->Compilation.
	* ScopeExp.java (getDefine):  Likewise.
	* Interpreter.java (parse):  Return Compilation, not ModuleExp.
	(parseFile):  Likewise.
	(eval):  Update accordingly.

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

	* ChainLambdas.java.(chainLambdas):  Use new walk method.
	* FindTailCalls.java (findTailCalls):  Likewise.
	* PushApply.java (pushApply):  Likewise.
	* LetExp.java (walkChildren):  Use new ExpWalker.walk method.

	* GenericProc.java (<init>):  New constructors.
	(setProperties):  New method.
	(make):  Change to use setProperties.

	* PrimProcedure.java (applyV):  Removed unused is_static variable.

	* PrimProcedure.java (compileArgs):  Fix off-by-one bug.

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

	* ExpWalker.java (messages):  New field.
	(getFile, getLine, getColumn, setFile, setLine, setColumn,
	error, notError):  New methods.
	(walk(Expression)):  New method.
	(walkExps):  Re-write to set/restore line numbers.
	* BlockExp.java, CatchClause.java, ExitExp.java, IfExp.java,
	LambdaExp.java (walkChildren):  Use new ExpWalk walk method.

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

	* CanInline.java (inline):  Take extra ExpWalker parameter.
	* InlineCalls.java(walkApplyExp):  Pass extra parameter.

	* ReferenceExp.java (print):  Don't lose if symbol is null.

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

	* StackTarget.java (getInstance):  Handle type.isVoid() specially.

	* ConsumerTarget.java (compileUsingConsumer):  Call canonicalize
	method gnu.mapping.Values.

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

	* ClassExp.java (slotToMethodName):  Do Compilation.mangleNameIfNeeded.

	* FindCapturedVars.java (walkClassExp):  New method.
	  Fixes bug reported by Jocelyn Paine.

	* LambdaExp.java (enterFunction): Remove redundant test.

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

	* Interpreter.java (languages):  Add "xslt".

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

	* ClassExp.java (setTypes):  Always explicitly do setInterfaces.

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

	* Declaration.java (UNKNOWN_PREFIX. PRIVATE_PREFIX, EXTERNAL_ACCESS):
	New constants.
	(makeField):  Pre-pend PRIVATE_PREFIX if appropriate.
	* ScopeExp.java (getNoDefine):  Also set IS_UNKNOWN.
	(getDefine):  Clear both NOT_DEFINING an IS_UNKNOWN.

	* LetExp.java (print):  Print Declaration, not just its name.
	* ReferenceExp.java (print):  Print Declaration if known.
	* SetExp.java (print):  Likewise.

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

	* BlockExp.java (oldTryState):  New field.
	(compile):  Set/clear oldTryState,
	* ExitExpr.java  (compile):  Call doPendingFinalizers.

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

	* Declaration.java (makeField):  Always mangle, but not reversible.
	Needed for compatibility with Scheme.define_field.

	* ApplyExp.java (compile):  Don't inline if INDIRECT_BINDING.

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

	* ModuleBody.java (runAsMain):  Call kawa.repl's exitDecrement.

	* Compilation.java:  Use Methods's new startCode method.

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

	* Interpreter.java (getInstance):  Check for InvocationTargetException.

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

	* ApplyExp.java (setFunction):  New method.

	* Compilation.java (loadCallContext):  Look for $ctx variable,
	instead of using callStackContext field.
	(addClass):  Use loadCallContext.
	(callStackContext):  Remove field.
	* ApplyExp.java (compile):  Use Compilation's loadCallContext method.
	* LambdaExp.java (allocParameters, compileBody):  Likewise.
	(allocParameters):  callStackContext is now local.
	(compileAsMethod):  Don't save/restore/set removed variable.
	
	* Declaration.java:  New constructor, takes Variable.

	* SeriesTarget.java (value):  Replace field by Declaration param.
	(scope):  New field.
	(compileFromStackSimple):  Update for new fields.

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

	* Interpreter.java (parseFile):  Now throws IOException and
	SyntaxException.

	* Interpreter.java (eval):  Eight new utility methods.

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

	* ReferenceExp.java (compile):  Use Procedure type if appropriate.

	* ApplyExp.java (compile):  Factor out common code.

	* Interpreter.java (defineFunction):  New methods.

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

	* Keyword.java (apply):  Emit attribute, not group.

	* ModuleBody.java (runAsMain):  Use CallContext.getInstance.

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

	* Compilation.java (loadCallContext):  Call CallContent.getInstance()
	unless method isHandlingTailCalls().
	* FluidLetExp.java (compile):  Get fluids from CallContext, not Future.
	* ModuleExp.java (evalModule):  Use CallContent.getInstance().
	* ModuleBody.java (run, apply0):  Likewise.
	(run) Set/restore CallContext's consumer.
	(runAsMain):  Use CallContext.setMainContext.

	* ModuleBody.java (run(Environment)):  New method, for compatibility.
	(run):  Call run(Environment).

	* GenericProc.java (add):  Sort methods by specificity.
	(applyN, match):  Since methods are sorted, just use first match.
	(applyV):  Update to match change to match.

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

	* Interpreter.java (defineFromFieldValue):  New method.
	(defineAll):  Make non-static, and use defineFromFieldValue.
	(loadClass):  Change to use non-static defineAll.

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

	* Interpreter.java (languages):  Add "krl".
	(getInstanceFromFilenameExtension):  New static.
	(getInstance):  Also look for "get"+LANGNAME+"Instance" method.

	* Interpreter.java (defineAll, loadClass);  Moved from
	gnu.xquery.lang.XQuery and made non-static.
	
2002-01-29  Daniel Bonniot  <bonniot@users.sourceforge.net>
 
 	* LambdaExp.java (addMethodFor): Rename conflicting methods in the same
 	class.
 
2002-01-26  Daniel Bonniot  <bonniot@users.sourceforge.net>

	* TryExp.java, CatchClause.java:  Visit catch clauses during a walk.

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

	* Interpreter.java (languages):  Add "brl".

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

	* Compilation.java:  If generating main, and the --output-format
	was specified, have compiled main call Shell's setDefaultFormat.

	* ModuleBody.java (runAsMain):  Call new CallContext.setInstance.

	* ModuleBody.java (runAsMain):  Use new Shell.getOutputConsumer.

2002-01-18  Nic Ferrier <nferrier@tf1.tapsellferrier.co.uk>

	* Interpreter.java (registerLanguage):  New static method.

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

	* Compilation.java (literalTable, literalsCount, literalsChain,
	findLiteral):  Moved to LitTable.java.
	(emitLiterals):  New method; replaces Literal.emit.
	* LitTable.java (literalTable, literalsCount, literalsChain,
	findLiteral):  Moved from Compilation.java.
	(emitPrimArray): Removed; replaced by CodeAttr.emitPushPrimArray.
	* BindingInitializer.java, Declaration.java, ModuleExp.java:  Update.
	* Literal.java:  Methods that took Compilation now take LitTable.
	(emit):  Remove; replaced by Compilation.emitLiterals.

	* Compilation.java (addClass):  Remove generateConstructor call.
	This generated a duplicate call to initialize ModuleBody.

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

	* ConditionalTarget.java (emitGotoFirstBranch):  New method.
	(compileFromStack):  Use emitGotoFirstBranch.

	* TypeValue.java:  New interface.
	* Makefile.am (java_sources):  Add TypeValue.java.

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

	* Expression.java (makeGetField):  Moved to gnu.kawa.reflect.SlotGet.
	(makeCoercion):  Moved to gnu.kawa.functions.Convert..

	* Expression.java (setLine):  New method.

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

	* CheckedTarget.java (emitCheckedCoerce)  If target type is
	tostring_target, don't need to catch cast exception.
	* StackTarget.java (compileFromStack0):  Use isSubclass rather than
	isSubtype to check that we don't need to emit a conversion.

	* PrimProcedure.java:  Remove unneeded variable.
	* ConsumerTarget.java:  Use Compilation.typeConsumer.

	* Declaration.java (IS_SINGLE_VALUE):  New constant.
	* ReferenceExp.java (compilation):  Optimize if SeriesTarget
	and IS_SINGLE_VALUE is set.

	* Compilation.java (loadCallContext):  New helper function.

	* LambdaExp.java (returnType):  New field.
	(getReturnType):  Guard against cycles.
	(setReturnType):  New method.
	* ApplyExp.java (getType):  Use LambdaExp's getReturnType.

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

	* ApplyExp.java (compile):  If isHandlingTailCalls use CallContext
	even for non-TailCalls (so CallContext gets passed through).
	(compileToArray):  Thus we can no longer re-use ctx.values.
	* Compilation.java (usingTailCalls):  Make non-static.
	(getModuleSuperType):  Handle usingCPStyle() case.
	(addClass):  Some tweaks for usingCPStyle() case.
	* FindCapturedVars.java (walkApplyExp):  Skip optimization to avoid
	function lambda if usingTailCalls, at least for now.
	* LambdaExp.java:  Tweaks for usingCPStyle() case.
	(allocParameters):  If isHandlingTailCalls() use getArgs method.

	* LambdaExp.java (enterFunction):  Use decl's parameter type,
	rather than the method's type, which is the implementation type.

	* LambdaExp.java (returnContinuation):  Make public, for ValuesMap.

	* ModuleBody.java (runAsMain):  Call runUntilDone rather than run,
	which wraps exceptions.  Instead, catch and print exceptions here.
	
	* PrimProcedure.java (<init>): Don't set interface flag as it prevents
	future getModifiers calls from getting the reflectClass's modifiers.
	
	* Expression.java (printLineColumn):  New method.
	* ApplyExp.java, BeginExp.java, LambdaExp.java, LetExp.java,
	SetExp.java (print): Use printLineColumn.

	* SetExp.java (getNewValue):  New method.

	* SetExp.java (compile):  Do compileSetField even if usingCPStyle.

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

	* GenericProc.java (match):  Look for best match, not first.

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

	* LitTable.java (writeObject);  Don't assign field for null.

	* LambdaExp.java (applyMethods):  Now initialized only if needed.
	(addApplyMethod):  New method; initialize applyMethods if needed.
	(compileSetField):  Call addApplyMethod.
	* Compilation.java (generateApplyMethods):  applyMethods can be null.
	* SetExp.java (compile):  Call addApplyMethod.

	* ModuleMethod (resolveParameterTypes):  New method.
	(match):  Also check parameter types.

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

	* ConsumerTarget.java (compileFromStack):  Use CallContent's new
	writeValues method.

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

	* ApplyExp.java (getArgCount):  New method.

	* FindTailCalls.java (walkLambdaExp):  Check if marked as inlined.
	Fixes problem where ValuesMap.inline terms tail-call to non-tailcall.

	* SeriesTarget.java (compile):  Don't pushScope/popScope, since that
	causes register conflicts due to our unusual jsr-based control flow.

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

	* SeriesTarget.java:  New class, extends Target.
	* Makefile.am (java_sources):  Add SeriesTarget.java.
	* StackTarget.java (compileFromStack0):  New static helper method.
	(convert):  New static helper method.  Uses compileFromStack0.

2001-10-20  Daniel Bonniot  <Daniel.Bonniot@inria.fr>

	* ModuleExp.java (compileToFiles):  Use File.separatorChar.

	* LitTable.java (writeObject): support for java.lang.* literals.

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

	* Expression.java, ApplyExp.java, BeginExp.java, IfExp.java,
	ModuleExp.java, SetExp.java, SynchronizedExp.java, TryExp.java (eval):
	Now specify throws Throwable.
	* ModuleExp.java (evalModule):  Likewise.
	Use CallContext's new runUntilDone method.
	* GenericProc.java, ModuleBody.java (apply* methods):   Likewise.
	* PrimProcedure.java (applyV):  Now throws Throwable, so on an
	InvocationTargetException just re-throw target exception.
	* ApplyExp.java (inlineIfConstant):  Catch Throwable.

2001-10-16  Daniel Bonniot  <Daniel.Bonniot@inria.fr>

	* Compilation.java (allocClass(ModuleExp)): Replaces 
	allocClass(LambdaExp). Cut dead code accordingly.
	* LambdaExp (getJavaName): Moved to ModuleExp.
	(compile, setNameMethod, compileAlloc): Removed.
	* ModuleExp (getJavaName): New method.

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

	* Compilation.java:  Added support --servlet.
	(typeServlet, generateServletDefault, generateServlet):  New fields
	(getModuleSuperType, startClassInit, addClass): Handle generateServlet.
	(generateApplyMethods):  Simplify - use getMethodProcType.
	* LambdaExp.java (allocFieldFor):  Pass correct frameType to
	Compilation.getMethodProcType.

	* PrimProcedure.java (applyV):  Use WrappedException.

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

	* Interpreter.java (asType):  CharSequence has been renamed to CharSeq.

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

	* Compilation.java (addClass):  Create clinit if --main or --applet.

2001-09-29  Per Bothner  <per@bothner.com>

	* ClassExp.java (getImplMethods):  Use Vector's 'addElement' method
	instead of 'add', for JDK 1.1.x compatibility.

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

	* Declaration.java (PRIVATE_SPECIFIED):  New flag.
	(makeField):  Only mangle if needed.
	Don't make UNKNOWN field final if we don't set it in clinit.

	* Declaration,java (isStatic):  Replace broken definition.
	* SetExp.java (eval):  No longer use isStatic; just check if ModuleExp.

	* StackTarget.java (compileFromStack0):  Add test that type is a
	ClassType.  Fixes bug reported by Jocelyn Paine.

2001-09-18   Andreas Schlapbach  <schlpbch@kde.org>

	* Interpreter.java (getLanguages):  New static method.

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

	Fix bug reported by Jocelyn Paine in returning #!null.
	* Compilation.java (generateApplyMethods):  Coerce return type
	using source lambda's return type, not method's implementation type.
	* ApplyExp.java (compile):  Likewise.
	* LambdaExp.java (getReturnType):  New method.
	(addMethodFor):  Use getReturnType.  Get implementation type of result.

2001-09-13  Per Bothner  <per@bothner.com>

	Reimplement --full-tailcalls to generate CpsMethodContainer.
	* LambdaExp.java (heapFrameLambda):  Removed field.
	(declareClosureEnv, allocFrame):  Don't test heapFrameLambda.
	(isClassGenerated):  No need to test for isHandlingTailCalls.
	(compileAlloc, compileEnd):  Likewise.
	(compile):  Simplify, remove cases no longer needed.
	(addMethodFor):  This is now also used if usingTailCalls, so modify.
	(allocChildClasses, enterFunction):  Remove no-longer-used code.
	(allocParameters):  Allocate $ctx parameter if handling tail-calls.
	(compileBody):  Get $ctx parameter from comp's callStackContext.
	(walkChildren):  Split into two methods ...
	(walkChildrenOnly, walkProperties):  New methods.
	* ApplyExp.java (compile):  No longer special-case handling
	of inline calls when --full-tailcalls.
	(popParams):  Also skip $ctx variable.
	* ChainLambdas.java (walkLambdaExp):  Split call to walkScopeExp
	so walkProperties is not scope of this lambda.
	* Compilation.java (getMethodProcType):  Extra case for usingTailCalls.
	(getConstructor):  No longer need to spacial-case usingTailCalls.
	(generateConstructor):  Likewise.
	(generateApplyMethods):  Handle usingTailCalls.
	(addClass):  Rename parameter "stack" to "$ctx".
	(compileConstant):  Do nothing if empty and target is ConsumerTarget.
	* FindCapturedVars.java (walkApplyExp):  Do walk function part
	if --full-tailcalls and calling to current function, for now.
	(capture):  Never set heapFrameLambda.
	* FindTailCalls.java (walkModuleExp):  No longer needed.
	(walkLambdaExp):  Call walkDecls at the appropriate time.
	* ReferenceExp.java (compile):  If fluid and field is null then
	load has alreadyloaded the value, so don't get the value field.
	* SetExp.java (compile):  Remove --full-tailcall Syntax special test.
	* ClassExp.java (compile):  Don't test heapFrameLambda.

	* ClassExp.java (getImplMethods):  Make static.
	Fix thinko, change reference to type field to interfaceType parameter.
	If incoming interfaceType is not an interface, return immediately.

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

	* Compilation.java (mangleNameIfNeeded):  New method.
	(mangleName): If reversible, '?' becomes plain "$Qu".
	(demangle2):  Re-write to use one big switch and add missing chars.
	* ClassExp.java (getCompiledClassType):  Use mangleNameIfNeeded.
	(getJavaName):  Likewise.
	(declareParts):  Likewise.  Mangling was missing before.

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

	* ModuleExp.java (evalModule):  Call CallContext's run method always.
	Fixes bug reported by Patrick Barta <patr@welchlink.welch.jhu.edu>

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

	* ClassExp.java (getType0:  Don't call declareParts.
	(partsDeclared):  New field.
	(getCompiledClassType):  Call declareParts if not already called.
	Always mangle name, even if simple, if name is not a valid Java name.
	* Compilation.java (isValidJavaName):  New static helper method.
	* Compilation.java (addClass): Emit class initializers even
	when immediate, to handle define-class.
	* Declaration.java (makeField):  Use reversible mangling.
	* Interpreter.java (getTypeFor):  Try looking up type name in
	current Environment.
	* ReferenceExp.java (getType):  Make non-final.
	* ThisExp.java (context):  New field.
	(<init>):  New constructor.
	(getType):  New method.

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

	* ClassExp.java (getCompiledClassType):  Map "<TNAME>" to "TNAME" here.
	(declareParts):  Make static field if specified.
	If making class pair, get method types from decl.
	Don't add Method for initMethod to instance method of pair.
	(getImplMethods):  New method to find implementation methods.
	(compile):  Use getImplMethods
	
	* PairClassType.java (reflectInstanceClass):  Renamed to instanceType.
	* ClassExp.java (setTypes): Update accordingly.

	* Compilation.java (typeObjectType):  New field.
	(generateClassName):  Do reversible name mangling.
	(generateConstructor):  If a ClassExp, call initMethod.
	* ObjectExp.java (compile):  Don't call initMethod here.

	Be more careful distingusihing source types (such as LispPrimType)
	and implementation types (such as PrimType) e.g. in conversions.
	* LambdaExp.java (addMethodFor):  Use implementation type when
	getting a Method.	
	* PrimProcedure.java (<init>):  Likewise, but used source types
	to set this.argTypes and this.retType.
	(compileArgs):  Use type from source, rather than method's type.
	* Compilation.java (generateApplyMethods):  Likewise.
	
	* LambdaExp.java (addMethodFor):  If a ClassExp's initMethod, then
	set the PRIVATE flag to prevent bad overrides.

	* Compilation.java (addClass):  Set SUPER flag.

	* FindCapturedVars.java (capture):  If decl IS_CONSTANT, do nothing.
	
	* SetExp.java (compile):  If a declaration is a class slot
	but without an actual field, look for and call a "set" method.

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

	* ClassExp.java:  Major re-write, to handle define-class, first-class
	classes, and true multiple inheritance.
	(simple, makeClassPair, instanceType):  New fields.
	(isSimple, setSimple, isMakingClassPair, setMakingClassPair):  New.
	(declareParts, slotToMethodName):  New methods.
	(class AbstractMethodFilter):  New class, extends Filter.

	* ClassInitializer.java:  New helper class, extends Initializer.
	* PairClassType.java:  New class, extends ClassType.
	* Makefile.am:  Update for new classes.

	* ModuleExp.java:  Now inherits directly from LambdaExp.
	(allocFields):  Add check for ClassExp.
	* ClassExp.java:  Now inherts directly from LambdaExp.
	Lots of code moved over from ObjectExp.
	* ObjectExp.java:  Now inherits from ClassExp, instead of vice versa.
	* ExpWalker.java (walkClassExp):  New method.
	(walkObjectExp):  Default to calling walkClassExp.
	* FindTailCalls.java (walkObjectExp):  Changed to walkClassExp.
	* ChainLambda.java:  Update for changed inheritance graph.
	* FindCapturedVars.java:  Likewise.
	(capture):  Don't set heapFrameLambda to ClassExp.
	* LambdaExpr.java:  Update for changed inheritance graph.
	* LambdaExp.java (compileEnd):  Kludge to handle usingTailCalls.
	* LambdaExp.java (addMethodFor):  Set isStatic if in ClassType.
	
	* ChainLambdas.java (walkClassExp):  If we are making a class-pair,
	name and addClass for instanceType class,

	* Compilation.java (typeClassType):  New static field.

	* Compilation.java (mangleName):  Take extra 'reversible' parameter
	to make an inveritble mangling.  Add overload.
	(demangle2):  Add support for '>', '<', and '('
	(demangleName):   Methods moved from kawa.stamdard.Scheme.
	Add extra 'reversible' option.

	* Compilation.java (<init>):  Add catch for error, to try to produce
	better error message on a compiler crash.

	* Compilation.java (addClass):  'Or' in PUBLIC, instead of assigning,
	since other code may have set other flags.

	* Compilation.java (getConstructor):  Add overload.
	(generateConstructor):  Add overload.
	If class has a staticLinkField, emit code to set it.
	* LambdaExp.java (enterFunction):  Use new getConstructor method.

	* LambdaExp.java (getExpClassName):  New method.
	(toString):  Use getExpClassName.
	
	* Interpreter.java (getTypeFor):  If a ClassExp, return its type.

	* Declaration.java (load):  If there is no variable and not field,
	but there is a "get" method, emit code to use that.

	* SynchronizedExp.java (compile):  Check for a ConsumerTarget.

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

	* Interpreter.java (languages):  Added xquery.
	(getOutputConsumer, getPrompter):  New methods.
	(parse, parseFile):  New abstract methods.

	* Parser.java:  Make non-abstract - used directly by XQuery.
	(currentModule, lookup):  New methods.
	(popBinding, pushBinding, push, pop, pushecls, popDecls):
	Moved to Translator.
	* ApplyExp.java (compile):  If handling tail calls, use setArgsN.

	* LambdaExp.java (compileBody):  New method.
	(compile, compileAsMethod):  Use compileBody.
	* ObjectExp.java (compile):  Likewise.
	* Compilation.java (addClass):  Likewise.
	* TailTarget.java:  Remove - use compileBody instead.
	* Makefile.am (java_sources):  Update accordingly.
	* Target.java (returnObject, returnValue):  Removed.

	* Compilation.java (typeConsumer):  New static field.

	* LambdaExp.java:  Overdue update of package containing LList.

	* ConsumerTarget.java:  Re-formatted.
	(cunsumer):  Fieldtype changed from Declaration to Variable.
	(compileUsingConsumer):  New static helper method.
	* Keyword.java (apply):  Update for endAttribute change in Consumer.

	* ModuleBody.java (runAsMain):  Optionally print values.
	(getMainPrintValues, setMainPrintValues):  New methods.

	* ScopeExp.java (currentModule):  New method.

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

	* Interpreter.java (asType):  Allow argument to be Binding.

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

	* BindingInitializer.java (emit):  No longer deal with Binding2.
	* Compilation.java (typeBinding2, functionValueBinding2Field,
	getBinding2Method):  Removed as Binding2 was removed.
	* Declaration.java (makeField):  No longer deal with Binding2.
	* SetExp.java (eval):  No longer need to handle Binding2.

	* Declaration.java (ignorable):  Return false if writing to unknown.
	(setCanWrite()):  New method.	
	* FindTailCalls.java (walkSetExp):  Use new method.

	* InlineCalls.java:  Preliminary code to check argument count.

	* ScopeExp.java (remove, lookup):  New methods.
	(getDefine):  Check for IS_UNKNOWN flag.

	* ReferenceExp.java (symbol):  Change type to Object so it
	could be a Binding.

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

	* Compilation.java (debugPrintFinalExpr):  New static field.
	(<init>):  If debugPrintFinalExpr, print expression.
	* ModuleExp.java (debugPrintExpr):  New static field.
	(evalModule, compileToFiles):  If debugPrintExpr, print expression.

	* Keyword.java:  Inherit from CpsProcedure.  A keyword FOO: sends a
	beginGroup of "FOO" to a Consumer, like xml <FOO>...</FOO>.
	
	* ApplyExp.java (eval(Environment,CallContext)):  For proper tailcalls
	don't call apply; leave that for the CallContext run method.

	* Expression.java (print(OutPort)):  New abstract method.
	(print(PrintWriter)):  Make final, and call new method.
	* ApplyExp.java, BeginExp.java, BlockExp.java, CatchClause.java,
	ErrorExp.java, ExitExp.java, IfExp.java, LambdaExp.java, LetExp.java,
	ModuleExp.java, ObjectExp.java, QuoteExp.java, ReferenceExp.java,
	SetExp.java, SynchronizedExp.java, TryExp.java (print):
	Changed to take OutPort parameter, and to do pretty-printing.

	* Interpreter.java (getFormat):  New abstract method.
	(print):  Add default implementation using getFormat.

	* ModuleBody.java (runAsMain):  Make sure OutPort.runCleanups is run.

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

	* ApplyExp.java (eval(Environment,CallContext)):  New method.

	* LambdaExp.java (compileEnd):  Always emitReturn if isModuleBody
	or isClassMethod, even if usingTailCalls.

	* ModuleBody.java (run(Consumer)):  New method.

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

	Change full-tailcalls calling convention so result is Consumer.
	ModuleBody uses full-tailcalls calling convention.
	* ApplyExp.java (compile):  Comment out usingCPStyle code for now.
	* Compilation.java (valueCallContextField):  Removed field.
	(addClass):  If non-static module-exp generate CpsProcedure apply.
	* Expression.java (eval(Environment,CallContext)):  New method.
	* IfExp.java (eval(Environment,CallContext)):  New method.
	* LambdaExp.java (isHandlingTailCalls):  A non-static module body
	now implements the CprProcedure calling convention.
	* ModuleBody.java:  Now extends CpsProcedure instead of Procedure0.
	Also implements Runnable.
	(run):  Return type is now void, with result ignored.
	(apply0):  New method, returns result value,
	* ModuleExp.java (evalModule(Environment,CallContext)):  New method.
	Call eval(Environment,CallContext) if not compiling.
	* TailTarget.java (compileFromStack):  Call StackContext's writeValue.

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

	* Interpreter.java (getNamespaceof):  New method.
	(VALUE_NAMESPACE, FUNCTION_NAMESPACE): New constants.

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

	* PrimProcedure.java (compileArgs):  Use compileNotePosition.
	* Checkedtarget.java (emitCheckedCoerce):  Do putLineNumber.

	* ApplyExp.java (getType):  Avoid infinite recursion.

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

	* ApplyExp.java (getType):  Handle functions that are ReferenceExp
	and LambdaExp as well as QuoteExp.  Fixes many warnings in kawa/lib.

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

	* ApplyExp.java (setArgs):  New method.

2001-04-09  Per Bothner  <per@bothner.com>

	* ApplyExpr.java (compile):  After too many/few-arguments message,
	set exp_lambda to 0, but don't make a new ReferenceExp.

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

	* Compilation.java (<init>):  Add a debugging hook.

	* PushApply.java (walkApplyExp):  Add walkChildren call.

	* SetExp.java (<init>):  Remove "%do%loop" kludge; hopefully unneeded.

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

	* ApplyExp.java	(compile):  When calling an inlined function,
	use parameter's type as target when evaluating arguments.

	* LambdaExp.java (compileAlloc, allocChildClasses):  Use old
	closure handling code when Compilation.usingTailCalls.

	* ModuleExp.java:  Add debugging code.

	* LitTable.java (writeObject):  Update FString package name.
	* Compilation.java:  Update classnames for new gnu.list changes.
	* Interpreter.java (<init>):  Constructor sets Convert.instance.
	* KawaConvert.java:  New class, extends gnu.lists.Convert.
	* Makefile.am:  Add KawaConvert.java.
	* Special.java (eof):  Now use gnu.lists.Sequence.eofValue.

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

	* LambdaExp.java (enterFunction):  If getInlineOnly(), set closureEnv
	from using loadHeapFrame of outerLambda.  (Fixes new test-case.)

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

	Use ModuleMethod to implement nested procedures too.
	* ApplyExp.java (compile):  Use LambdaExp.getHeapLambda.
	Use LambdaExp's compileEnd (unless --full-tailscalls).
	* Declaration.java (makeField):  Use comp.mainLambda's chain.
	* Compilation.java (applyMethods, initChain):  Moved to LambdaExp.
	(mainLambda):  New field.
	(typeCpsMethodProc, typeCpsMethodContainer):  New types.
	(<init>):  now requires ModuleExp, not LambdaExp.
	(getConstructor):  New method.
	(generateConstructor):  Return void.  Make on-argument overload.
	Use getConstructor.  Always traverse LambdaExp's (new) initChain.
	(generateApplyMethods):  Take LambdaExp parameter.
	(addClass):  Call compileEnd even if staticModule.
	* FindCapturedVars.java (capture):  Don't set heapFrameLambda.
	* LambdaExp.java (applyMethod):  New field, moved from Compilation.
	(isClassGenerated):  Return false for normal methods.
	(compileEnd):  Handle applyMethods, check for getInlineOnly().
	(allocFieldFor):  Don't make field FINAL if static.
	New scheme for selecting frame for field.
	(compileSetField):  Handle applyMethods moving from Compilation.
	(compile):  Don't return on IgnoreTraget (unless inlined or
	--full-tailcalls);  causes test failures from missing methods.
	(compile):  Frame is not always this.
	(getHeapFrameType, getHeapLambda):  New methods.
	(addMethodFor):  Use getHeapFrameType to find method's class.
	(allocFrame, enterFunction): In ObjectExp, frameType is object's class.
	(evalToClass, dumpZipPrefix, dumpZipCounter, eval): Moved to ModuleExp.
	* ClassExp.java:  Now extends LambdaExp, not ObjectExp.
	* ModuleExp.java:  Now inherit from ClassExp.
	(compile):  Commented out.
	(evalToClass, dumpZipPrefix, dumpZipCounter, eval):
	Moved from LambdaExp.
	* ObjectExp.java (compile):  Use Compilation's new generateConstructor.
	* ProcInitializer.java (<init>):  Chain is now managed by heapLambda.
	* SetExp.java (compile):  Handle applyMethods moving to LambdaExp.

	* Parser.java (mustCompileHere):  Look for enclosing ModuleExp.

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

	* Expression.java (makeGetField):  New static convenience method.

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

	* Expression.java (walk):  Make protected and change return type to
	Expression.  Make non-abstract - just call walkExpression.
	(walkChildren):  New virtual method.
	* ApplyExp.java, BeginExp.java, BlockExp.java, ExitExp.java,
	FluidLetExp.java, IfExp.java, LambdaExp.java, LetExp.java,
	ModuleExp.java, ObjectExp.java, ScopeExp.java, SetExp.java,
	SynchronizedExp.java, ThisExp.java, TryExp.java (walk):
	Make protected and change return type to Expression.
	* ApplyExp.java, BeginExp.java, BlockExp.java, ExitExp.java,
	IfExp.java, LambdaExp.java, LetExp.java, ObjectExp.java,
	ReferenceExp.java, SetExp.java, SynchronizedExp.java,
	TryExp.java (walkChildren):
	New method, with logic taken from ExpFullWalker.
	* ErrorExp.java (walk):  Removed - inherited version now works.

	* ExpWalker.java (walkExpression):  Change to protected and return
	type as Expression.  Change default to walkChildren and return this.
	(walkApplyExp etc):  Change to protected and return type to Expression.
	(currentLambda, exitVlaue):  New fields moved from ExpFullWalker.
	(getCurrentLambda, walkExps, walkDefaultArgs):  New methods, likewise.
	* ChainLambdas.java, FindCapturedVars.java, FindTailCalls.java,
	InlineCalls.java, PushApply.java:  Inherit from ExpWalker.
	(walkLambdaExp etc):  Change to protected and return Expression.
	* ExpFullWalker.java:  Removed.  Functionality moved either up to
	ExpWalker or to walkChildren methods in Expression sub-classes.
	* Makefile.am (java_JAVA):  Removed ExpFullWalker.java.

	* ChainLambdas.java (walkScopeExp):  Setup 'outer' links of ScopeExp
	and its sub-classes.  Call new walkChildren to walk children.
	(walkLambdaExp):  Call walkScopeExp.
	* Compilation.java (<init>):  Call InlineCalls early, since that may
	generate new tree.  Call ChainLambdas immediately after.
	* ExpFullWalker.java (walkScopeExp):  Just call walkChildren.
	(walkLambdaExp, walkObjectExp):  Removed.

	* LambdaExp.java (<init>(int)):  New constructor.

	* FindCapturedVars.java (allocUnboundDecl):  Use name as is.
	* Declaration.java (makeField): Handle IS_UNKNOWN declarations,
	and prepend "id$" here.

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

	* Declaration.java (IS_UNKNOWN):  New flag.
	(load):  If need Variable, and not yet allocated, do so now.
	(followAliases): Exit loop before returning null.
	(makeField):  If decl IS_UNKNOWN, make field static for now.
	No longer create BindingItitializer for unknown decls.
	* ApplyExp.java (<init>(Method,Expression[])):  New constructor.
	* ApplyExp.java (compile):  Check if decl IS_UNKNOWN, rather than null.
	* Interpreter.java (getTypeFor):  Likewise, but check null first.
	* Compilation.java (getBindingField):  Removed method - no longer used.
	(bindingFields):  Removed field.
	(initBindingFields):  Removed method.
	(generateConstructor, addClass):  Don't call initBindingFields.
	* FindCapturedVars.java (walkModuleExp, walkFluidLetExp):  New methods.
	(unknwonDecls, currentModule):  New fields.
	(allocUnboundDecl):  New method.
	(walkReferenceExp, walkSetExp):  Call allocUnboundDecl if needed.
	* FluidLetExp.java (compile):  Load decl.base to get (unknown) Binding.
	* SetExp.java (getName):  New method.
	(compile):  Changes since binding is now never null.
	* ReferenceExp.java (compile:  Likewise.

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

	* Compilation.java (generateConstructor):  Don't generate call to
	setName if module super-class has been specified, since super-class
	might not have setName.

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

	* PrimProcedure.java:  Handle more stringent SecurityManager.

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

	* StackTarget.java (compileFromStack0):  Always call emitCoerceToObject
	even when stackType.isSubtype(type).  Fixes bug in Stalin's
	destruct.sc benchmark, reported by Brian D. Carlstrom <bdc@ai.mit.edu>.

	* Interpreter.java (languages):  Recognize ".sc" as a Scheme
	extension (used in Stalin).

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

	* SetApplyExp.java:  Removed, as part of "setter" re-implementation.
	* Makefile.am (java_JAVA):  Update accordingly.
	* ExpWalker.java (walkSetApplyExp):  Removed field.

	* ApplyExp.java (compile):  Add overloading.
	New checkInlineable parameter.
	
	* Compilation.java (argsCallContextField):  Use "values" field,
	instead of removed "args" field.
	(dumpInitializers):  Reverse the order (to make it normal).

	* Compilation.java, FindCapturedVars.java, LambdaExp.java:
	Various fixes that apply when usingCPStyle().

	* LambdaExp.java (allocFieldFor):  If anonymous lambda, make
	field static if it doesn't need a closure.
	* FindCapturedVars.java (capture):  Return if decl has a static field.
	* ReferenceExp.java (eval):  If decl has ststic field, get its value.

	* Declaration.java (getConstantValue):  New helper method.
	* Declaration.java (IS_SYNTAX):  New flag constant.
	* SetExp.java (compile):  Update for Macro not extendeding Declaration.
	* ModuleExp.java (allocField):  Likewise.

	* PrimProcedure.java (takesVarArgs):  Return false if not a method.
	* ProcInitializer.java (emit):  Handle property value being
	an Expression, as opposed to a constant value.
	* ReferenceExp.java (setBinding):  New method.

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

	* CanInline.java:  New interface.
	* InlineCalls.java:  New class, extends ExpFullWalker.
	* Makefile.am (java_JAVA):  Add new classes.
	* ApplyExp.java (inlineIfConstant):  New utility method.
	* Compilation.java (<init>):  Call inlineCalls.inlineCalls.

	* Initializer.java (reverse):  New static method.

	* Declaration.java (<init>(String,Field)):  New constructor.
	(getDeclaration):  Two new static methods.

	* PrimProcedure.java (makeBuiltinBinary):  New static method.
	(compileArgs):  Update for moved class kawa.standard.list_v
	-> gnu.kawa.functions.MakeList.

	* SetApplyExp.java (setterProcedure):  Update for moved class
	kawa.standard.setter -> gnu.kawa.functions.Setter.

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

	* GenericProc.java (applyN):  If a method matches, don't re-use the
	matching CallContext for future match attempts, but use a new one.

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

	* ModuleExp.java (allocFields):  If decl.field is already set (e.g.
	by a require), don't allocate a field.

2000-08-23  Daniel Bonniot <bonniot@cma.ensmp.fr>

	* SetExp.java (compile):  Handle more cases of needValue.

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

	* SetExp.java (compile):  Add check for !comp.usingCPStyle().

	* ApplyExp.java, Compilation.java, LambdaExp.java, TailTarget.java:
	Renamed CallStack->CallContext, typeCallStack->typeCallContext etc.

	* ApplyExp.java (compile):  Don't crash if incorrect number of args.

	* Compilation.java (<init>):  Set mainClass before doing walks.

	* Compilation.java (addClass):  New method, takes ClassType.
	(allocClass(LambdaExp,String)):  Removed method.
	(allocClass(LambdaExp)):  Use new addClass, but not for an ObjectExp.

	* Compilation.java:  Some fixes towards the goal of call/cc support.
	* LambdaExp.java:  Likewise.

	* ConsumerTarget.java: New class, extends Target.
	* Makefile.am (java_JAVA):  Add ConsumerTarget.java.
	* LambdaExp.java (SEQUENCE_RESULT):  New flag.
	(addMethodFor):  If SEQUENCE_RESULT is set, append "$C" to method name.
	Also in that case, method returns void.
	(compileAsMethod):  If SEQUENCE_RESULT set, target is ConsumerTarget.
	
	* GenericProc.java (getVarBuffer):  Removed method.
	(match, applyV):  Update for new MethodProc api.
	* ModuleMethod.java:  Similar updates.
	* PrimProcedure.java:  Similar updates.
	(getProcedureClass, getMethodFor):  New static methods.

	* BeginExp.java (length):  New field.
	Allow variable number of sub-Expressions.
	(canonicalize, add):  New methods.
	* FindCapturedVars.java (walkLetExp):  Use BeginExp's new length field.
	* FindTailCalls.java (walkBeginExp):  Use BeginExp's new length field.
	* ExpFullWalker.java (walkExps):  New overload takes explicit length.
	(walkBeginExp):  Pass BeginExp's new length field to walkExps.

	* Expression.java (makeCoercion):  New static methods.

	* ChainLambdas.java (walkLambdaExp):  If lambda is bound to a
	unique declaration, make that its name.

	* ScopeExp.java (add):  New method.

	* ThisExp.java (<init>):  New constructors take/create Declaration.

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

	* LitTable.java (writeObject):  Handle null argument.
	(Fixes bug reported by Martin Atzmueller <ygrats@gmx.net>.)

	* ApplyExp.java (compile):  If direct method call needs closure,
	just call loadHeapFrame on parent.  This is a simplification
	which allows Dorai Sitaram pregexp package to work.

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

	* Interpreter.java (languages):  Add ".cl" extension for Common Lisp.

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

	* Interpreter.java (languages):  Add Common Lisp.

	* Special.java (print):  Also print #!" prefix.

	* SetExp.java (compile):  Add missing compileFromStack call.

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

	* ConditionalTarget.java (<init>(Label,Label)):  Remove constructor.

	* LambdaExp.java (properties):  New field.
	(getProperty, setProperty):  New methods.
	* ExpFullWalker.java (walkLambdaExp):  Also walk properties.
	* ProcInitializer.java (emit):  Also handle properties list.

	* Compilation.java (addClass):  Generate numArgs if --full-tailcalls.

	* GenericProc.java (make$V):  Renamed to plain make.

	* Interpreter.java (asType):  New method.

	* MethodProc.java:  Moved to gnu.mapping.
	* Makefile.am:  Update accordingly.

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

	* QuoteExp.java (getType):  If value is null, type is Type.nullType.
	* Literal.java (nullLiteral):  Its type is now Type.nullType.
	* LitTable.java (emit):  Handle null value.

	* Compilation.java (literalsChain):  New field.
	(addClass):  Call Literal.emit.  Do it *after* processing clinitChain,
	but make sure it is executed first.  (Gotos - sigh.)
	* Literal.java:  New longer inherit from Initializer.
	(next, field):  New fields (no longer inherited).
	(assign(Field,Compilation)):  New overload.
	Link on new comp.literalsChain, not comp.clinitChain.
	(emit):  Make static.
	* LambdaExp.java (evalToClass):  Update accordingly.
	* LitTable.java (emit):  Literals are no longer in clinitChain.
	* BindingInitializer.java (emit):  Add optimization.

	* Compilation.java (nameField):  Removed, since sym_name is gone.
	(setNameMethod):  New method.
	(addClass): Invoke setNameMethod instead of setting nameField.

	* LitTable.java (emit(Literal,booolen)):  Serialization spec says
	readResolve should return Object.  Hence, add needed cast.
	* Keyword.java (readResolve):  Fix return type to Object.
	* Special.java (readResolve):  Likewise.

	* Keyword.java (<init>):  Don't copy argument String.

	* Declaration.java (makeField):  New method, based on code from
	BindingInitializer constructor.
	* ModuleExp.java (allocFields):  Use Declaration's makeField method.
	* BindingInitializer.java (<init>):  Likewise.
	* SetExp.java (compile):  Use Declaration's new makeField method.
	Do nothing here for constant ModuleExp fields.

	* Declaration.java (noteValue):  If same Expression, same value.

	* CompiledProc.java:  Removed old file.

	* GenericProc.java (make$V):  New method.

	* Interpreter.java (languages):  Add language file extensions.

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

	* MethodProc.java (mostSpecific):  Fix type comparisons.

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

	* Compilation.java (mangleName):  Readable mangling of initial digit.

	* LambdaExp.java (addmethodFor):  Check for conflicting method names.

	* ModuleBody.java (apply0):  Use Values.noArgs, not rocedure.noArgs.

	* ModuleExp.java (SUPERTYPE_SPECIFIED):  New flag constant.
	(isStatic): Not default static if SUPERTYPE_SPECIFIED.

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

	Support (module-static ...) and (module-export ...).
	* ExpWalker.java (walkModuleExp):  New method.
	* ModuleExp.java (<init>):  Don't declareThis here.
	(isStatic, walk):  New methods.
	(allocFields):  Alloc field if !isSimple even if private.
	Add special test (kludge) for Macro.
	Don't setIndirectBinding here (do it in BindingInitializer instead).
	(EXPORT_SPECIFIED, EXPORT_SPECIFIED, NONSTATIC_SPECIFIED):  new flags.
	* FindTailCalls.java (walkDecls, walkModuleExp):  New methods.
	* ScopeExp.java (getDefine, getNoDefine):  New methods.
	* Declaration.java (fieldNum, assignField):  Unused, removed.
	(NOT_DEFINING, EXPORT_SPECIFIED, STATIC_SPECIFIED, NONSTATIC_SPECIFIED,
	TYPE_SPECIFIED, IS_CONSTANT):  New flag constants.
	(getFlag, setFlag, needsInit):  New methods.
	(setCanRead, setCanCall):  New method overloading.
	(needInit):  New method.
	* LambdaExp.java (NEXT_AVAIL_FLAG):  New constant.
	(declareClosureEnv):  Check if parent is ModuleExp.
	(allocFieldFor, addMethodFor):  Check if decl has STATIC_SPECIFIED.
	(allodFrame, enterFunction):  Check if ModuleExp.
	* ObjectExp.java (getType):  New method.
	(getCompiledClassType):  Now does not handle superclasses.
	* FindCapturedVars.java (capture):  Handle STATIC_SPECIFIED.
	If declaration has a 'base', handle it even if non-simple.
	* ModuleBody.java (run):  Make non-abstract.
	* Compilation.java (moduleStatic):  New static field.
	(instanceField):  New field.
	(allocClass):  Don't addClass if ModuleExp (since already done).
	(initBindingFields, startClassInit):  New method.
	(addClass, generateConstructor):  Call initBindingFields.
	(addClass):  Some extra complications to handle static modules.
	* ChainLambdas.java (comp):  New Compilation field.
	(walkObjectExp):  Create and name ClassType for ObjectExp.
	* ProcInitializer.java:  If field is static, link on initChain.
	(emitLoadModuleMethod):  If method static get comp's instanceField.
	* BindingInitializer.java:  Handle static vars and explicit types.
	* LetExp.java (store_rest, compile):  Use new Declaration needs_init.

	* Compilation.java (mangleName):  Uppercase following $-escape.
	Handle special characters in switch statement.

	More efficient handling of simple aliases.
	* Declaration.java (followAliases):  New method.
	(allocateVariable):  Call it.
	* FindTailCalls.java (walkApplyExp, walkReferenceExp, walkSetExp):
	Call Declaration.followAliases.
	* FindCapturedVars.java:  Likewise.
	* SetExp.java (compile):  Call Declaration.followAliases.
	* ReferenceExp.java (compile):  Likewise.

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

	* Compilation.java (makeNullPairMethod, makePairMethod):  Removed.
	(Reported by Edouard G. Parmelan <Edouard.Parmelan@quadratec.fr>.)

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

	* LitTable.java:  New class, manages the literals of a Compilation.
	* Compilable.java:   Removed, no longer used.
	* Makefile.am (java_JAVA):  Update accordingly.
	* Literal.java (argVlaues, argTypes0:  New fields.
	(ALLOCATING, ALLOCATED, INITIALIZED, ASSIGNED):  Removed flags values.
	(WRITING, WRITTEN, CYCLIC, EMITTED):  New flags values.
	(emitArray, emit(Compilation,boolean)):  Remove now-unused methods.
	* Compilation.java (scmListType):  Renamed to typeLList.
	(emptyConstant):  New Field field.
	(litTable):  New field.
	(findLiteral):  Nothing to do now if we already have literal.
	No special handling for Compilable or Object[].
	(emitLiteral):  Remove unused now-methods.

	* Interpreter.java (getTypeFor):  New methods.
	(string2Type):  New static method, based on method in Scheme class.
 	
	* Keyword.java:  No longer implements Compilable.
	* Special.java:  No longer implements Compilable.

	* PrimProcedure.java (<init>(Method, Interpreter):  New constructor.

	* MethodProc.java (mostSpecific):  Use Type.compare once instead
	of isSubtype twice.

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

	* Keyword.java:  Implement java.io.Externalizable
	* Special.java:  Likewise.
	Change so name does not include "#!" prefix.
	
	* PrimProcedure.java (<init>):  Call non-deprecated addMethod version.

	* Parser.java (current_filename, current_line, current_column,
	messages):  Move fields here from Translator.
	(<init>):  New constructor.
	(error(char,Declaration,String,String)):  New method.
	(getMessages, setMessages, error):  Methods moved from Translator.
	(getFile, getLine, getColumn, setFile, setLine, setColumn

	* Interpreter.java (languages):  New static table.
	(getInstance):  New overloaded static methods.

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

	* ApplyExp.java (compile):  If calling a name bound to a constant
	that is not a procedure, emit a warning (instead of an exception).
	Based on a patch from Daniel Bonniot <bonniot@cma.ensmp.fr>.

	* Expression.java (makeWhile):  Remove old unsafe overloaded variant.

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

	* PrimProcedure.java (init):  New private helper method.
	New constructors take java.lang.reflect.Method and Interpreter.
	(getMethodFor):  New method overloads use new constructor/
	* ApplyExp.java (compile):  Pass interpreter to
	PrimProcedure.getMethodFor.

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

	* Parser.java:  A new class, an abstract super-class for Translator.
	* Expression.java (makeWhile):  New overload, uses Parser.
	* Makefile.am (java_JAVA):  Add parser.java.

	* LambdaExp.java (addMethodFor):  Don't make method FINAL
	(the user may want to inherit from this module).

	* ModuleMethod.java:  Change to extend MethodProc.
	(getVarBuffer, match, applyV):  New methods.

	* SetExp.java (getType):  Handle the HAS_VALUE case.

	* Interpreter.java (emitPushBoolean, emitCoerceToBoolean): New methods.

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

	* SetExp (eval, compile):  If define-alias, create an AliasConstraint.
	* Declaration.java (IS_ALIAS):  New flag.
	(isAlias, setAlias):  New methods.
	* ReferenceExp.java (eval, compile, getType):  Handle case when
	getDontDereference() is true.  (Return Location instead.)
	
	* ModuleExp.java (compileToFiles):  If module name is specified,
	always set topname from module name (even if compound).
	Set prefix from module name only if prefix is not specified.
	Use File.mkdirs to create missing output directories.

	* Interpreter.java (coerceToObject(int)):  New method.

	* Compilation.java (mangleName): Change mangling for '!', '->', '%'.
	(demangle2):  New static method.

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

	* gnu/expr/Compilation.java (typeRunnable):  New static.
	(allocClass):  Handle explicit super-class and interfaces.
	(generateApplyMethods):  Set generateApplyMethodContainer whenever
	super class is not Procedure.
	(addClass):  Handle "run" method differently if explicit superclass.
	(getMethodProcType):  Made static;  takes ClassType argument.
	(getModuleSuperType):  Take ModuleExp parameter, check its supertype.
	* LambdaExp.java (allocFieldFor):   Update getMethodProcType call.
	* ProcInitializer.java (emitLoadModuleMethod):  Likewise.
	* gnu/expr/ModuleExp.java (superType, interfaces):  New field.
	(getSuperType, setSuperType, getInterfaces, setInterfaces):  New.
	(compileToFiles):  Handle explicit specified module name.

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

	* Compilation.java (mangleName):  Add manglings for ascii characters.

	* Expression.java (makeWhile):  New static.
	(noExpressions):  New static field.

	* Expression.java (flags):  New field.
	(setFlag, getFlag, getFlags):  New methods.
	* ReferenceExp.java:  Use inherited flags field and conventions.
	(PREFER_BINDING2):  New flag bit.
	(eval, compile):  More kludges for ELisp support.
	* SetExp.java:  Use inherited flags field and conventions.
	(PREFER_BINDING2):  New flag bit.
	(eval, compile):  Get "noValue" from Interpreter.
	(eval, compile):  More kludges for ELisp support.
	* LambdaExp.java (flags, getFlags, setFlags):  Now inherited.

	* IfExp.java (compile):  Pass interpreter to ConditionalTarget.
	* Interpreter.java (getInterpreter):  New static method.
	* ConditionalTarget.java (interpreter):  New field.
	(<init>):  Take Interpreter argument.
	(compileFromStack):  Use interpreter's boolean values.
	
2000-03-06  Per Bothner  <per@bothner.com>

	* ApplyExp.java (compile):  Handle identifier bound to declaration
	with constant value (as created by `require').
	* Declaration.java *base):  New field.
	(loadOwningObject):  If base is non-null, load that.
	* FindCapturedVars.java (capture):  If captured Declaration has a
	null-null base, mark it as readable, and capture it as well.
	* PrimProcedure.java (compile):  Split into two methods.
	(getMethodFor):  Likewise.

	* LambdaExp.java (getCaller):  Don't loop looking for inlined callers.

	* LambdaExp.java (enterFunction):  Use main methods parameter
	types to set stack type.

	* FindTailCalls (walkSetExp):  Check for decl.isPublic, rather
	if the context is a ModuleExp (which doesn't work for private decls).

	* Special.java (print):  Just print the name.

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

	* CheckedTarget.java (emitCheckedCoerce):  Don't add handler if we
	didn't add any coercion code.  Slightly modified from a patch from
	Daniel Bonniot <bonniot@cma.ensmp.fr>.

	* ExitExp.java (getType):  New method - return Type.neverReturnsType.

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

	* LambdaExp.java (allocChildClasses):  Set firstArgsArrayArg for
	child when isClassGenerated().  Fixes bug reported by Bruce R. Lewis.

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

	Various tweaks for better javadoc processing.
	* overview.html:  Renamed to package.html.

	* Compilation.java (nameField):  Now name is in Procedure, not Named.
	* LambdaExp.java (compileAlloc):  Update for setName method.

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

	* Literal.java (nullIteral):  New final static field.
	(emit):  Handle null value.
	* Compilation.java (findLiteral):  Handle null value.
	(emitLiteral):  Likewise.

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

	* ExpFullWalker.java (walkDefaultArgs):  New method.
	(walkLambdaExp):  Call walkDefaultArgs.
	* FindCapturedVars.java (walkDefaultArgs):  New method.
	Check if default expression captures a parameter.
	* LambdaExp.java (DEFAULT_CAPTURES_ARG):  New flag.
	(setFlag): New (non-public) method.
	(addMethodFor):  Generate stubs unless DEFAULT_CAPTURES_ARG is set.
	(compileAsMethod):  For stubs, make parameter be simple.

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

	* Compilation.java (typeApplyMethodContainer):  New static field.
	(generateApplyMethods):  If applet. implement ApplyMethodContent.
	Add generateApplyMethodContainer local variable.
	* LambdaExp.java (addMethodFor):  Set closureEnv for applets.
	Make method non-static if thisVariable is set.

	* ThisExp.java:  New class; extends ReferenceExp.
	* Makefile.am, Makefile.in (java_JAVA):  Added ThisExp.java.
	* ExpWalker.java (walkThisExp):  New virtual method.
	* FindCapturedVars.java (walkThisExp):  New method.

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

	* BindingInitializer.java:  Create Binding2 instead of Binding
	if the languge hasSeparateFunctionNamespace().
	* Declaration.java (isProcedureDecl, setProcedureDecl):  New flags.
	* Interpreter.java (hasSeparateFunctionNamespace):  New method.
	* ApplyExp.java (eval, compile):  Remove hacks for checking "function
	binding" - let ReferenceExp.isProcedureDecl() handle it instead.
	* ModuleBody.java (runAsMain):  Don't create kawa.standard.Scheme here;
	instead compiler inserts call to Scheme.registerEnvironment.
	* ReferenceExp.java (flags):  New int field.
	(dontereference):  Folded into flags field.
	(isProcedureName, setProcedureName):  New methods.
	(eval, compile):  Use function name space, if appropriate.
	* SetExp.java (getHasValue, setHasValue, isFuncDef, setFunDef,
	isSetIfBound, setSetIfUnbound):  New methods.
	(eval, compile):  Update to use new flags.

	* Compilation.java (scmInterpreterType):  Renamed to typeInterpreter.
	(typeBinding2, functionValueBinding2Field, getBindingEnvironmentMethod,
	getBinding2Method, defineFunctionMethod, typeApplet, typeValues,
	noArgsField):  New static fields.
	(apply*ModuleMethod etc):  Remove many no-longer-needed fields.
	(generateAppletDefault, generateAppletDefault):  New fields.
	(getMethodProcType, getModuleSuperType):  New method.
	(generateApplyMethods):  Fix various small but critical bugs.
	Handle the main class inheriting from Applet.
	(addClass):  Generate code to "registerEnvironment" if main or applet.
	* LambdaExp.java (addMethodFor):  Declare `this' for applet methods.
	(compileAsMethod):  Fix various small but serious bugs.

	* Compilation.java (mangleName):  Mangle initial digit.

	* ProcInitializer.java (emitLoadModuleMethod):  Get ModuleMethod's
	<init> method using ClassType.getDeclaredMethod.
	(constructor_args, initModuleMethod):  No longer needed.

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

	* ApplyExp.java (eval):  Use getProcedure to get function value.
	* Interpreter.java:  Moved from kawa.lang.
	(defaultInterpreter):  New static field.
	(isTrue, booleanObject, noValue):  New methods.
	(boolObject):  Removed method.
	(getName):  Made abstract.
	* Makefile.am, Makefile.in (java_JAVA):  Added Interpreter.java.
	* Compilation.java (getInterpreter):  New method.
	(scmInterpreterType):  Interpreter moved from kawa.lang to gnu.expr.
	(compileConstant):  Use getInterpreter().isTrue method.
	* IfExp.java (eval, compile):  Likewise.
	(getInterpreter):  New method.
	(is_true):  Removed method.

	* SetExp.java (HAS_VALUE):  New flag.
	(getHasValue, setHasValue):  New methods.
	(eval):  If getHasValue() return RHS, else return 
	(compile):  Likewise.

	* QuoteExp.java (getType):  If value is null, type is Object.

2000-01-25  Daniel Bonniot <bonniot@cma.ensmp.fr>

	* QuoteExp.java: (getType):  For null, return Type.pointer_type.

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

	* BeginExp.java (<init>):  New default constructor.
	(setExpressions):  New method.
	(getExpression):  Make private.

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

	* BindingInitializer.java:  New class, inherits from Initializer.
	* Makefile.am, Makefile.in (java_JAVA):  Add BindingInitializer.java.

	* Compilation.java (argsArray):  Removed field.
	(typemacro, typeLocation, getLocationMethod):  New static fields.
	(findLiteral):  If empty Object[], use noArgsProcedureField.
	Handle Object[] where some elements are null.
	(mangleName):  If name starts with "->" mangle to "to", not "To".
	(generateConstructor):  More robust loop for processing initChain.
	Generate code to initialize bindingFields fields (not in "run").
	(generateApplyMethods):  New method.  Code moved from addClass,
	and generalized to handle LambdaExps with multiple primMethods.
	* LambdaExp.java (argArray, firstArgsArrayArg):  New fields.
	(flags):  Make protected.
	(METHODS_COMPILED, NO_FIELD):  New flag enums.
	(isClassgenerated):  Needing closure no longer forces class generation.
	(primMethod):  Rmeoved field; replaced by ...
	(primMethods):  New field.
	(getMethod, getmainmethod, restTypeArgs):  New methods.
	(declareArgsArray):  Removed method.
	(allocFieldFor, compileSetField):  New methods.
	(compile):  Use new methods.
	(addMethodFor):  New interface - can generate multiple Methods.
	(allocParameters, enterFunction):  New longer takes argsArray argument.
	(enterFunction):  Handle both fix args plus final var args array/list.
	Generate better coed for keywordw when default is constant.
	(compileAsMethod):  Handle multiple methods;  generate stubs.
	* ObjectExp.java (compile):  Use LambdaExp's getMainMethod.
	* ApplyExp.java (compile):  Use LambdaExp's getMethod.
	Call that method using PrimProcedure.compileArgs.

	* FindTailCalls.java: Use Declaration's getValue method.
	* FindCapturedVars.java (walkApplyExp):  New method.
	(capture):  No longer return immediately if decl.isStatic().
	No need to chain decl on owner's capturedVars if decl is public.
	* Keyword.java (searchForKeyword):  New static method.
	* ModuleExp.java (evalModule):  Call ClassMemberConstraint.defineAll.
	(allocFields, print):   New methods.
	
	* SetExp.java (compile):  Various hacks mostly so that top-level
	definitions get exported as fields.
	* Literal.java (assign):  New overloaded method.
	(emit):  Better error message if Compilable not implemented.

	* PrimProcedure.java (match):  Optimize if rest arg is LList.
	(compileArgs):  New static helper method.
	(compile):  Use it.
	* ProcInitializer.java (emitLoadModuleMethod):  New static method.
	(emit):  Use emitLoadModuleMethod.
	(<init>):  New constructor.
	* ReferenceExp.java (compile):  Use Compilation.getLocationMethod.
	Handle non-static Binding method.
	
	* Declaration.java (shadowed):  Removed fields.
	(getValue):  Make final.
	(isPublic):  New method.

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

	* Initializer.java:  New abstract class.
	* ProcInitializer.java:  New class;  extends Initializer.
	* Makefile.am, Makefile.in (java_JAVA):  Add new classes.
	* Literal.java:  New inherits from Initializer,
	(next, field):  Replace by super-class fields.
	(assign):  Like to comp.comp.clinitChain not comp.comp.literalsChain.
	(emit):  New method (to satisfy super's abstract method).
	* Compilation.java (dumpLiterals):  Replaced by dumpInitializers.
	(literalsChain):  Rename to clinitChain;  change type to Initializer.
	(initChain):  New field.
	(generateConstructor):  Do dumpInitializers(initChain).

	* Compilation.java (addClass):  Remove now-unused "apply" generation.

	* Expression.java (compileNotePosition):  Do not use a try-finally
	to restore linenumber.
	* Compilation.java (addClass):  If an exception (internal error)
	is thrown while compiling, catch it and print an error.

	* Declaration.java:  No longer inherit from Variable.
	(sym):  Field re-named to `name'.
	(string_name, symbol):  Renmoved methods;  use getName instead.
	(next, var):  New fields.
	(IS_SIMPLE):  New flag.
	(getName, setName, setType, getType, nextDecl, getVariable, isSimple,
	setSimple):  New methods.
	(load, compileStore, initBinding):  Pass getVariable() instead of this.
	(allocateVariable):  New method.
	* ScopeExp.java (decls, last):  New fields.
	(firstDecl, add):  New methods.
	(addDeclaration):  Use new add method.
	* CatchClause.java (compile):  Change Declaration catchDecl
 	to Variable catchVar.
	* LambdaExp.java (declareThis, declareClosureEnv, declareArgsArray):
  	Now return Variables.
	(isClassGenerated):  Always generate class for ObjectExp;  never
	if outerLambda is a ModuleExp. 
 	(heapFrame, closureEnv, thisVariable):	Change from Declaration
 	to Variable.
	* Compilation.java (thisDecl, callStackContext):  Likewise.
	* ObjectExp.java (compile):  May need staticLink even of caller's
	closureEnv is null.  Call the Variable "closureEnv", not "staticLink".
	* FindTailCalls.java:   Update to use Declaration instead of Variable.
	* ApplyExp.java, FluidLetExp.java, LetExp.java, SerExp.java:  Likewise.
	* FindCapturedVars.java:  Likewise.
	(capture):  The heapFrame of a ModuleExp is its thisVariable.
	* ModuleExp.java (<init>):  Call declareThis.

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

	* CheckedTarget.java (emitCheckedCoerce): Use "lambda" as default name.

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

	* FindCapturedVars.java (walkLetExp)  Don't optimize if FluidLetExp.
	* gnu/expr/FindTailCalls.java (walkFluidLetExp):  New method.  Fixes
	bug reported by Walter C. Pelissero <wcp@lpds.sublink.org>.
	* gnu/expr/PushApply.java (walkApplyExp):  Don't re-write if
	function is FluidLetExp.

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

	* PrimProcedure.java (compile):  If too few/many arguments,
	call comp.error instead of throwing WrongArguments.

1999-12-06  Bruce R. Lewis  <brlewis@alum.mit.edu>

	* ModuleExp.java (compileToArchive):  Re-write to use java.util.zip.*
	instead of gnu.bytecode.ZipArchive.

1999-12-05  Daniel Bonniot <bonniot@cma.ensmp.fr>

	* Declaration.java (load):  Call emitPutStatic if appropriate.
	* SetExp.java (compile):  Likewise.

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

	* FindCapturedVars.java (capture):  When chasing down callers of
	inline-only functions, watch out for infinite cycles.
	* FindTailCalls.java (walkLambdaExp): If child has one *or zero*
 	callers, mark it as inline-only.

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

	* FindCapturedVars.java (capture):  If the captured decl is an
	inline-only procedure, we're done.  Likewise if we're calling ourself.
	Fixes bugs reported by Walter C. Pelissero <wcp@lpds.sublink.org>.
	Don't "capture" decl is it is a call-only variable.  (We don't
	need a closureEnv for a call-only ufnction.)  Instead, rely on
	new setCallersNeedStaticLink/setNeedsStaticLink() methods.
	* LambdaExp.java (getNeedsClosureEnv):  New method.  Use it various
 	places instead of (getImportsLexVars() || getNeedsStaticLink()).
	(setNeedsStaticLink()):  New method (overload).
	(setCallersNeedStaticLink):  New helper method.
	(declareThis): Remove duplicate semi-colon.
	(allocChildClasses):  Keep searching parent chain for closureEnvType.

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

	* Compilation.java (compileConstant): Coerce value to target type.
	Tell compileFromStack that the current type is the value's class.
	Suggested by Daniel Bonniot <bonniot@cma.ensmp.fr>.

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

	* ApplyExp.java (compile):  Minor fix for tail-recursion with many
	arguments. (Bug reported by Walter C. Pelissero <wcp@lpds.sublink.org>)

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

	Suggested by Daniel Bonniot <bonniot@cma.ensmp.fr>:
	* ExpFullWalker.java (walkBlockExp):  Test if exitBody is null.
	* Compilation.java (findLiteral):  Use Type.make(value.getClass()).

	* ObjectExp.java (getCompiledClassType):  Use Scheme.exp2Type.

	* MethodProc.java (isApplicable):  Fix incorrect return code.
	(mostSpecific):  New method.
	* GenericProc.java (applyN):  Select most specific matching method.

	* PrimProcedure.java (getParameterType):  Adjust for static/non-static.
	(getMethodFor):  If class is ModuleMethod, get the module's class.

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

	* ApplyExp.java (compile):  If function is Inlineable but we didn't
	line it, try PrimProcedure.getMethodFor.
	* MethodProc.java (isApplicable):  Change arg types and return codes.
	Implementation now uses Type.compare.
	(numParameters, getParameterType, mostSpecific):  New methods.
	* GenericProc.java (isApplicable):  Change arg types and return codes.
	* PrimProcedure.java (setReturnType, getParameterType): New methods.
	(getMethodFor):  New static method.  (Code moved from Translator.)

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

	* ApplyExp.java (popParams):  Take extra argument.
	(compile):  Handle tail-recursion for varargs functions.

	* ClassExp.java:  New class; extends ObjectExp.
	* Makefile.am, Makefile.in (java_JAVA):  Added ClassExp.java.
	* Compilation.java (addClass):  ClassExp cannot have "apply" method.
	* LambdaExp.java (evalToClass):  New method.

	* PrimProcedure.java (compile):  Handle takesVarArgs() methods.

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

	* GenericProc.java:  New inherits from MethodProc.
	(getVarBuffer, isApplicable, match, applyV):  New methods.

	* PrimProcedure.java:  Interpret methods whose names end in "$V"
	as taking a variable number of arguments;  the excess ones are
	bundled in an array passed as the last argument.

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

	No longer create new class for top-level procedures;
	instead allocate a ModuleMethod for each procedure.
	* LambdaExp.java (isClassGenerated):  Update for new behavior.
	(selectorValue, getSelectorValue):  New field and method.
	(compile):  Generate static methods, plus allocate ModuleMethod.
	(addMethodFor):  Better way of selectiing method names.
	* ModuleMethod.java (apply4):  Add "missing" method.
	* ModuleBody.java (apply4):  Likewise.
	(applyN):  Try calling apply0 .. apply4, if appropriate.
	* Compilation.java:  Allocate static types and methods needed.
	(addClass):  Generate the ModuleBody applyX methods.

	* Declaration.java:  New fields and methods for line number info.

	* Compilation.java (typeObject):  Renamed from scmObjectType.
	(typeString, typePair):  New preferred field names.
	* Literal.java, ReferenceExp.java, SetApplyExp.java:  Update
 	references accordingly.

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

	* Declaration.java (PRIVATE, isPrivate, setPrivate):  New flag.
	(isStatic, isLexical):  New methods.
	(load, compileStore):  Don't loadOwningObject if field is static.
	* SetExp.java (eval, compile):  Handle binding to static Declaration.
	* ReferenceExp.java (eval.compile):  Likewise.
	* FindTailCalls.java (walkSetExp):  Likewise.
	* FindCapturedVars.java (capture):  Do nothing if decl.isStatic().

	* ModuleMethod.java:  New class, which extends ProcedureN.
	* ModuleBody.java:  New apply methods that take a ModuleMethod.
	* Makefile.am, Makefile.in (java_JAVA):  Add ModuleMethod.java.

1999-08-26  Per Bothner  <per@bothner.com>

	* GenericProc.java:  New class;  inherits from ProcedureN.
	* MethodProc.java:  New class;  inherits from ProcedureN.
	* Makefile.am, Makefile.in (java_JAVA):  Add new .java files.
	* PrimProcedure.java:   Re-organized to inherit from MethodProc.

	* Declaration.java (sym, value):  Make fields protected.
	(<init>):  New protected empty constructor (for kawa.lang.Syntax).

	* ReferenceExp.java (compile):  Indirect bindings are now Locations.
	* SetExp.java (compile):  Likewise.

1999-08-22  Per Bothner  <per@bothner.com>

	* Compilation.java (error):  New methods, like those in Translator.
	(addClass):  Use new ApplyExp constructor.
	(scmPatternType):  Removed - no longer needed.
	* ApplyExp.java (<init>):  New constructor.
	(compile):  Use new Compilation.error methods.

	* Expression.java (compileNotePosition):  New method.

	* LambdaExp.java:  Provide a cache for evaluated value.

	* BlockExp.java (exitBody):  New field.
	(setBody):  New overloaded methods.
	(compile): Handle exitBody.  Set this.exitLabel.
	* Declaration.java (getValue):  New method.
	(<init>(String, Type)):  Handle the name being null.
	* IfExp.java (compile):  Optimize if else part is ExitExp.
	* ExpFullWalker.java (walkBlockExp, walkExitExp):  New methods.
	* ExitExp.java (<init>):  New constructors.
	(compile):  Remove bogus compilation of void.	
	* BeginExp.java (<init>):  New convenience constructor.
	* LetExp.java (getBody, setBody):  New methods.
	* ReferenceExp.java (<init>):  New overloaded constructor.

1999-08-18  Per Bothner  <per@bothner.com>

	* PrimProcedure.java (getName):  Use super.getName() instead of
 	deprecated name().

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

	* FindTailCalls.java (walkObjectExp):   Don't call super.walkObjectExp,
	instead call walkLambdaExp on each method so setCanRead is not called.
	* LambdaExp.java (allocFrame):  Don't create closureEnvField here,
	since it is not appropriate for ObjectExp.
	(allocChildClasses):  Create closureEnvField here instead.
	* ObjectExp.java (compile):  Don't create staticLinkField if this is
	our parent's heapFrameLambda (since parent has already done it).

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

	* CheckedTarget.java:  New class, extends StackTarget.
	* Makefile.am, Makefile.in:  Update accordingly.
	* StackTarget.java (compileFromStack0):  New protected method.
	* Compilation.java (addClass):  Specificy LambdaExp to PrimProcedure.
	* LambdaExp.java (enterFunction):  Do checked coerce on argument.
	* PrimProcedure.java (applyN):  Catch ClassCastException.
	(<init>):  New overload.
	(compile):  Catch ClassCastException.
	(getVerboseName):  New method.

1999-07-19  Per Bothner  <per@bothner.com>

	* ApplyExp.java (compile):  When doing a direct method call,
	pass the correct closure environment.
	* LambdaExp.java (getCaller):  New method.
	(declareClosureEnv):  Fix problems with inline functions.

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

	* Target.java (pushValue, returnValue):  New static methods.
	* IgnoreTarget.java (compileFromStack):  Use Type.isVoid().
	* TailTarget.java (getInstance):  New method.
	* Compilation.java (addClass):  Use Target.returnValue().
	* ObjectExp.java (compile):  Likewise.
	* Expression.java (compile):  Use StackTarget.getInstance.
	* StackTarget.java (getInstance):  New method.
	(compileFromStack):  Use Type.isVoid and Type.isSubtype.
	* LambdaExp.java (compileAsMethod):  Likewise.

	* ObjectExp.java (print):  New method.
	(getCompiledClassType):  Fix incorrect implied superclass handling.

	* ApplyExp.java (compile):  Check real parent (even if inline), when
	seeing if we need to pass a closure when calling a method directly.	
	* LambdaExp.java (allocFrame):  When allocating closureEnvField, check
 	real parent (even if inline).  Inline functions can have heapFrame.
	(enterFunction):  Fix logic bug when renaming duplicate field.

1999-04-22  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* LetExp.java (compile):  Target for init expr is decl type.

1999-04-22  Per Bothner  <bothner@cygnus.com>

	* Compilation.java (addClass):  Remove (commented-out) call to
 	declareClosureEnv.
	* FindTailCalls.java (walkSetExp):  Don't call walkLambdaExp if the
	value is an ObjectExp.
	* expr/LambdaExp.java (declareClosureEnv):  If isClassMethod(),
	then the closureEnv variable is "this".
	* expr/ObjectExp.java (compile):  Create staticLinkField if needed.

1999-04-15  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* Compilation.java (addClass):  Don't create primitive methods here.
	* LambdaExp.java (allocChildClasses):  Do it here instead,
	* Compilation.java (addClass):  Don't compiled child methods here.
	* LambdaExp.java (compileChildMethods):  Do it here instead (new).
	(compileAsMethod):  New - logic taken from Compilation.addClass.
	* ApplyExp.java (compile):  Call compileChildMethods if inline call.
	* ObjectExp.java (compile):  Likewise for child methods.

1999-04-11  Per Bothner  <bothner@cygnus.com>

	* LambdaExp.java (declareClosureEnv):  Fix for object methods.

Wed Apr  7 18:04:27 1999  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* FluidLetExp.java:  New LetExp class.
	* BlockExp.java:  New Expression class (untested).
	* ExitExp.java:  New Expression class (untested).
	* Makefile.am (java_JAVA), Makefile.in:  Update for new classes.

	* Declaration.java (IS_FLUID):  New flag bit.
	(setFlag, isFluid, setFluid):  New methods.
	* ExpWalker.java (walkBlockExp, walkExitExp, walkFluidLetExp):  New.
	* LetExp.java (getType):  New method.
	* SetExp.java (getType):  New method.
	* ReferenceExp.java (compile, getType):  Check if isFluid().
	* SetExp.java (compile):  Check if isFluid().

Tue Mar 30 17:15:14 1999  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* LambdaExp.java (CLASS_METHOD):  New flag.
	(isClassMethod, setClassMethod):  New methods.
	(isHandlingTailCalls):  Return false if isClassMethod/
	* ObjectExp (compile):  Call compileExp on actual child method.

Mon Mar 29 23:28:59 1999  Per Bothner  <bothner@cygnus.com>

	* LambdaExp.java (getCompiledClassType):  Add Compilation parameter.
	* ObjectExp.java (getCompiledClassType):  Likewise.
	Call Compilation.generateClassName to avoid duplicate names.
	(compile):  Call super.allocFrame.
	* Compilation.java, LambdaExp.java:  Fix getCompiledClassType calls.
	* LambdaExp.java (declareClosureEnv):  If parent is ObjectExp,
	get its parent instead.  Re-order logic for object methods.
	(allocChildClasses):  Move latter half into new method allocFrame.
	(allocFrame):  New method.  Use outerLambdaNotInline.
	(enterFunction):  Initialize closureEnv also for methods in ObjectExp.

	* ApplyExp.java (compile), ReferenceExp.java (compile):  Verifier
	in JDK1.2 rejects emitInvokeSpecial so use emitInvokeVirtual instead.

	* PrimProcedure.java (applyN):  Check for thrown Error.

Sat Mar 20 11:25:01 1999  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* Declaration.java (pushIndirectBinding):  New method.
	(initBinding):  Use pushIndirectBinding.
	* LambdaExp.java (isClassGenerated):  Use isHandlingTailCalls.
	(allocParameters, enterFunction):  Handle isIndirectBinding.
	* ModuleBody.java (runAsMain):  Re-enable, for now.
	* ObjectExp.java (<init>):  Call setCanRead to force class generation.
	* PrimProcedure.java (compile):  Use new Type.isVoid().
	* ReferenceExp.java (lookup):  Remove - no longer used.
	(eval):  Just call env.getChecked.
	(compile):  Use Binding.get rather than Environment.lookup.
	* ApplyExp.java:  If function is a globally-bound symbol,
	emit (get Binding).getProcedure().
	* Compilation (getBindingField):  New method.
	(typeBinding, getBindingMethod, getProcedureBindingMethod,
	getBindingEnvironmentMethod, getCurrentEnvironmentMethod): New statics.
	(addClass):  Move generateConstructor to end.
	Emit code to allocate global Bindings.

	* Compilation (scmProcedureType):  Renamed to typeProcedure.
	(scmEnvironmentType):  Renamed to typeEnvironment.
	* ApplyExp,java, LambdaExp.java, SetApplyExp.java:
  	Update scmProcedureType -> typeProcedure.

Sun Mar  7 17:28:59 1999  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* ApplyExp.java (compileToArray, compile):  Handle full tailcalls.
	* Compilation.java:  Various new static fields.
	(fwitchIndex, callStackContext):  New fields.
	(findLiteral):  Check for null array elements.
	(allocClass):  Set superType differently if handling tailscalls.
	(addClass):  Some things are different if handling tailcalls.
	* Declaration.java (assignField):  New field.
	(ignorable):  Different rules for full tailcalls.
	* FindTailCalls.java (walkBeginExp, walfIfExp):  Last expr is in
	tail context only if whole expr is.
	(walkLambdaExp):  Do setInlineOnly here, not  in FindCapturedVars.
	* FindCapturedVars.java (walkLetExp):  Optimize letrec-style forms.
	(walkLambdaExp):  Removed;  functionality handled by FindTailCalls.
	(capture):  Handle full tail calls;  various bug fixes.
	* LambdaExp.java (closureEnvField, closureEnv):  New fields.
	(NEEDS_STATIC_LINK, CANNOT_INLINE):  New flags.
	(getNeedsStaticLink, setNeedsStaticLink):  New methods.
	(isClassGenerated, isHandlingTailCalls):  New methods.
	(outerLambdaNotInline, declareClosureEnv, compileEnv):  New methods.
	(thisVariable): New field.
	(declareThis):  Set/use thisVariable.
	(compile(Compilation)):  Save/restore comp.callStackContext.
	(compileAlloc):  Simplify by using new closureEnvField.
	(compile(Compilation,Target)):   Redo.  Preliminary cps support.
	(addMethodFor):  Change call interface.  Various changes.
	(loadHeapFrame, allocChildClasses):  Extensive changes.
	(allocParameters, enterFunction):  Still more changes.
	* ModuleBody.java (run):  No longer takes environment arguemnt.
	* ModuleExp.java (evalModule):  ModuleBody.run no longer takes env.
	* ObjectExp.java (compile):  Use compileEnd.
	Update for new LambdaExp.addMethodFor.
	* PrimProcedure.java (applyN):  Catch InvocationTargetException.
	* TailTarget.java (compileFromStack):  New method, for full tailcalls.
	* TryExp.java (compile):  Fix to handle more general Targets.
	* Literal.java (emitArray):  Nothing to do if value is null.

Fri Jan 15 20:30:58 1999  Per Bothner  <bothner@cygnus.com>

	* ApplyExp.java (compile):  Even if a function is inlined, we
	need to call allocChildClasses.

Wed Dec 23 13:51:35 1998  Per Bothner  <bothner@Magnus.Cygnus.COM>

	Literals in immediate mode are now allocated to fields (instead
	of a literals array), just like for non-immediate mode.
	Use reflection to initialize the fields.
	* Compilation.java (literalsField):  Removed field.
	(compileConstant):  Don't generate code to index from literalsField.
	(<init>):  Don't initialize literalsField.
	* LambdaExp.java (compile_setLiterals):  Removed method.
	(eval):  Don't call compile_setLiterals.  Don't create literals array.
	Don't set lierals[literal.index] to literal.value.  Instead, use
	reflection to set the static field uses for the literal.
	* Literal.java (assign):  Create a field, even if immediate.
	(<init>):  Set type from the value's class.
	* Makefile.am (java_JAVA), Makefile.in:  Rmeoved Compiledproc.java.
	* ReferenceExp.java (compile):  No longer need cast if immediate.

	* Compilation.java (mangleName):  More natural mangling.
	E.g.  "foo-bar?" now becomes "isFooBar".

	* ObjectExp.java (initMethod):  New field.
	(getCompiledClassType):  Allow extended super-types and implemented
	interfaces to come in any order.
	(compile):  New method, to make sure $finit$ is called.
 	(compile):  Don't add field for declarations corresponding to methods.
	
	* QuoteExp.java (getType):  If value is Values.empty, type is void.
	* SetExp.java (compile):  Compile rhs to correct type.

	* Expression (compile): Re-use Target.pushObject if possible.

Tue Dec 15 10:50:53 1998  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* ChainLambdas.java:  New ExpFullWalker sub-class.
	* PushApply.java:  New ExpFullWalker sub-class.
	* Makefile.am, Makefile.in (java_Java):  Add new source files.
	* FindTailCalls.java:  Moved some functionality to ChainLambdas
	and PushApply in order to keep things less convoluted.
	(walkObjectExp):  New method.
	* ExpWalker.java (walkObjectExp):  New trivial method.
	* ExpFullWalker.java (walkObjectExp):  New method.
	* Compilation.java (<init>): Invoke ChainLambdas and PushApply walkers.

	* Compilation.java (allocClass):  Use getJavaName.
 	(allocClass):  Use getCompiledClassType for ObjectExp.
	* LambdaExp.java (isSharedSwitchMethod): New (currently unused) method.
	(getJavaName):  New method.
	(eval):  Use getJavaName,
	(loadHeapFrame, allocChildClasses):  Test for and handle ObjectExp.
	(toString):  Tolerate null body (as in ObjectExp).
	* ObjectExp.java (<init>):  Set type initially to null.
	(getJavaName, getCompiledClassType, walk, toString):  New methods.
	* ReferenceExp.java:  Remove Scheme-specific support for <TYPE>.
	(This functionality has moved to kawa.standard.ScmEnv.)

Mon Nov 23 16:04:42 1998  Per Bothner  <bothner@cygnus.com>

	* Inlineable.java (getReturnType):  New method.
	* PrimProcedure.java (getReturnType):  New method.
	* ApplyExp.java (getType):  Generalize with Inlineable.getReturnType;

	* ObjectExp.java:  New Expression class.
	* BeginExp.java (getExpressions):  New method.
	* Compilation.java (addClass):  Remove unused local 'main'.
	* FindTailCalls.java (walkLambdaExp):  Allow null body.
	* ExpFullWalker.java (walkLambdaExp):  Allow null body.
	* LambdaExp.java (firstChild, nextSibling):  Make public.
	* Makefile.am, Makefile.in (java_JAVA):  Add ObjectExp.java.

Sun Nov 15 21:31:59 1998  Per Bothner  <bothner@cygnus.com>

	* ReferenceExp.java (lookup):  Remove magic for Scheme <TYPE>
	(that is now handled by kawa.standard.ScmEnv).

Sat Oct 17 13:23:50 1998  Per Bothner  <bothner@Magnus.Cygnus.COM>

	* SynchronizedExp.java:  New class.
	* Makefile.am (java_JAVA), Makefile.in:  Add SynchronizedExp.java.
	* ExpWalker.java (walkSynchronizedExp):  New method.
	* ExpFullWalker.java (walkSynchronizedExp):  New method.
	* FindTailCalls.java (walkSynchronizedExp):  New method.

	* StackTarget.java (compileFromStack):  Use two-argument emitConvert.

Thu Sep 24 19:35:14 1998  Per Bothner  <bothner@cygnus.com>

	* ExpFullWalker.java:  New conventions to support replacement.
	* FindCapturedVars.java, FindTailCalls.java:  Change to new convention.
	* FindTailCalls.java:  Add some extra optimizations.
	* FindCapturedVars.java (walkLambdaExp):  Inline if single caller.
	* LambdaExp.java (returnContinuation, unknownContinuation):
	New fields, used to determine if local function can be inlined.

	* ApplyExp.java (popParams):  Handle zero parameters, not even "this".

Sun Sep 13 13:00:01 1998  Per Bothner  <bothner@cygnus.com>

	* ApplyExp.java (context, nextCall):  New fields.
	* FindTailCalls.java (walkApplyExp):  Set context and nextCall.
	* Declaration.java (nextCall):  New field.
	(noteValue):  Update LambdaExp.nameDecl.
	* FindCapturedVars.java:  Call new setImportsLexVars variant.
	* LambdaExp.java (nameDecl):  New field. 
	(setImportsLexVars):  New method - also chases down callers.

Fri Sep 11 20:20:12 1998  Per Bothner  <bothner@cygnus.com>

	More efficient procedure representation:  Inlining, directly
	callable statics, procedures that don't require own Classes.
	* ApplyExp.java (compileToArray):  New method.
	(compile):  Handle different kinds of apply methods.
	* Compilation.java (generateConstructor, allocClass):  New methods.
	(addClass):  Handle specialized more efficient procedure schemes.
	* Declaration.java:  Add various flags, getters, and setters.
	* FindCapturedVars.java (capture):  More general (and complex).
	* FindTailCalls.java:  Also setCanRead, setCancall etc of
	of Declarations and LambdaExps, and chain LambdaExp children together.
	* LambdaExp.java:  Add various flags.
	(declareArgsArray, loadHeapFrame, addMethodFor,
	allocChildClasses):  New methods.
	(eval):  Dumping .zip files is now controlled by static dumpZipPrefix.
	* LetExp.java (store_rest):  Don't initBinding if decl is ignorable.
	(compile):  Ignore init expression if target is ignorable.
	
	* PrimProcedure.java:  Moved from kawa.lang package.
	* Makefile.am, Makefile.in:  Update accordingly.

	* QuoteExp.java (nullExp):  New static.

	* QuoteExp.java (getType):  New method.
	* BeginExp.java (getType):  New method.
	* ReferenceExp.java (getType):  New method.

	* SetExp.java (compile):  If lhs is ignorable, target is Ignore.
	* StackTarget.java (compileFromStack):  If stack type inherits
	from target type, we can avoid coercion.

	* TryExp.java (print):  Handle null finally_clause.

Sat Aug 29 20:32:46 1998  Per Bothner  <bothner@cygnus.com>

	* FindCapturedVars.java (capture):  Handle inline functions better.
	* Compilation.java (addClass):  Move lots of stuff to LambdaExp.
	* LambdaExp.java (allocParameters, enterFunctions):  New functions
	* ApplyExp.java:  Handle inlined functions.
	* Declaration.java (loadOwningObject):  Skip inlined functions first.
	* ScopeExp.java (currentLambda):  Inline functions are not special.
	* SetExp.java (<init>):  Handle do special form specially.

	* Compilation.java, Special.java:  Do ClassType.make instead of
	new ClassType.

Sat Aug 29 09:16:01 1998  Per Bothner  <bothner@cygnus.com>

	* ApplyExp.java (compile):  Fix problems with tails-calls.
	* Compilation.java (addClass):  Fix procedure prologue for tails-calls.

	* Declaration.java (toString):  Print with name and new uid.

1998-08-28  Per Bothner  <bothner@cygnus.com>

	* ExpWalker.java, ExpFullWalker.java, FindTailCalls.java,
	FindCapturedVars.java:  New tree-walker (visitor) classes.
	* Expression.java (walk):  New method.
	* *Exp.java:  Add walk method to Expression sub-classes.

	* ApplyExp.java (tailCall, isTailCall, setTailCall):  New flag, methods.
	(compile):  Inline function if it has the getInlineOnly() flag.

	Changed a bunch of stuff for new closure implementation.
	* LambdaExp.java (compileAlloc):  New method.
	* Declaration.java (loadOwningObject, load, compileStore, initBinding):
	New methods for new closures.
	* ReferenceExp.java (compile_load):  Removed.
	* Compilation.java (<init>):  Merge constructors.  Call walkers.

	* LambdaExp.java, ReferenceExp.java:  Add unique number to ease debugging.

1998-08-25  Per Bothner  <bothner@cygnus.com>

	* Declaration.java (isIndirectBinding, setIndirectBinding):  New.

Fri Jul 24 16:11:36 1998  Lynn Quam <quam@ai.sri.com>

	* Compilation.java (putGlobalMethod):  New static field.
	* SetExp.java (compile):  If !isDefining(), compile
	putGlobalMethod instead of defineGlobalMethod.

Wed Jul 22 21:42:42 1998  Per Bothner  <bothner@cygnus.com>

	New directory.  Files mostly moved from ../../kawa/lang.
