/***********************************************************************
 *
 *	Declarations for the byte code compiler.
 *
 *	$Revision: 1.4 $
 *	$Date: 1995/07/18 06:25:59 $
 *	$Author: sbb $
 *
 ***********************************************************************/

/***********************************************************************
 *
 * Copyright (C) 1990, 1991, 1992, 1994, 1995 Free Software Foundation, Inc.
 * Written by Steve Byrne.
 *
 * This file is part of GNU Smalltalk.
 *
 * GNU Smalltalk is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the Free
 * Software Foundation; either version 1, or (at your option) any later 
 * version.
 * 
 * GNU Smalltalk is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * GNU Smalltalk; see the file COPYING.  If not, write to the Free Software
 * Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  
 *
 ***********************************************************************/


/*
 *    Change Log
 * ============================================================================
 * Author      Date       Change 
 * sbb	     23 Jun 95	  Switched to GST guard prefix
 *
 * brd       15 Jun 95    Added getByteCodeForSpecialSelector() to support some
 *                        browser operations.
 *
 * sbb	      6 Jun 95	  Switched to new file naming scheme.
 *
 * sbb	     30 May 95	  Boolean switched to mst_Boolean.
 *
 * sbb	     21 Aug 94	  Switched to using low bit int marking.
 *
 * sbb	     10 Nov 90	  Added latestCompiledMethod, so that some of the
 *			  compile methods can get the method that they just
 *			  compiled and set its category.
 *
 * sbyrne     2 Sep 89	  added descriptor support
 *
 * sbyrne     2 Sep 89	  Moved common compiled method structure definition
 *			  here, so that the interpeter could share.
 *
 * sbyrne     1 Jan 89	  Created.
 *
 */

#ifndef __GSTCOMP__
#define __GSTCOMP__

#ifndef __GSTINTERP__
#include "interp.h"
#endif

struct CompiledMethodStruct {
  OBJ_HEADER;
  OOP		descriptor;
  MethodHeader	header;
  OOP		literals[1];	/* actually, literals followed by bytecodes */
};

extern OOP		thisClass, latestCompiledMethod, lastReturnedValue;
extern mst_Boolean	declareTracing;
extern mst_Boolean	emacsProcess;
extern mst_Boolean	skipCompilation;

/* brd Mon Nov  1 09:01:44 PST 1993 */
extern mst_Boolean executeExprsFromBrowser;
extern OOP inspectObject;

extern void		compileMethod(), executeStatements(),
			installInitialMethods(), setCompilationClass(),
			invokeInitBlocks(), compiledMethodAtPut(),
			setMethodDescriptor(), 
/* XXX 			setCompilationCategory(), copyCompileContext(), */
			setCompilationCategory(), markCompileContext(),
			initDefaultCompilationEnvironment();
extern OOP		compiledMethodAt(), getMethodDescriptor(),
			methodNewOOP();
extern int		addForcedObject();
extern mst_Boolean	validMethodIndex();

/* brd Mon Nov  1 09:01:44 PST 1993 */
extern Byte		getByteCodeForSpecialSelector();
/* temps */
extern int numThisContexts, numRealizes, numFakeRealizes, numRealizedMethods, selfReturns, instVarReturns, primitivesExecuted, messagesSent;


#endif /* __GSTCOMP__ */
