Win32: support for getting a handle for the running program... jv
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 15 Jun 2016 10:53:19 +0100
branchjv
changeset 3911 76cf7e990ffe
parent 3910 2ac2e67c40d0
child 3920 7e1d58a3b802
Win32: support for getting a handle for the running program... ...by passing `nil` to `loadDybamicObject:`. This is a follow-up commit to 30b7fc8f1158 that implements the same functionality under Windows.
ObjectFileLoader.st
bc.mak
--- a/ObjectFileLoader.st	Fri Jun 10 07:10:15 2016 +0200
+++ b/ObjectFileLoader.st	Wed Jun 15 10:53:19 2016 +0100
@@ -188,6 +188,7 @@
 #  endif
 # endif /* BORLANDC */
 
+# include <psapi.h>
 
 # ifdef __DEF_Array
 #  define Array __DEF_Array
@@ -1808,7 +1809,42 @@
 	if (__isStringLike(aString)) {
 	    if (@global(Verbose) == true)
 		console_printf("get sym <%s> handle = %"_lx_"\n", __stringVal(aString), (INT)handle);
-	    entry = GetProcAddress(handle, (char *) __stringVal(aString));
+            /*
+             * Unlike POSIX.1-2001 dlopen(), Windows has no such handle that
+             * would, when passed to GetProcAddress(), search current loaded image
+             * (i.e., all loaded .dlls and .exes). To allow this, when #primLoadObjectFile
+             * is asked to return a such a handle, it returns a fake handle with value 0. 
+             *
+             * In this case we have to loop over all loaded modules (HINSTANCEs) and 
+             * try to GetProcAddress() from each of them. If we find only one, then return
+             * it. 
+             *
+             * What a hack!
+             */
+            if (handle == 0) {
+            	HMODULE modules[256];
+            	DWORD   modules_needed;
+		if (EnumProcessModules(GetCurrentProcess(), modules, sizeof(modules), &modules_needed)) {
+		    int i;
+		    entry = NULL;
+		    for (i = 0; i < modules_needed / sizeof(HMODULE); i++) {
+			FARPROC entry_found = GetProcAddress(modules[i], (char *) __stringVal(aString));
+			if (entry_found != NULL) {
+			    if (entry == NULL) {
+			        entry = entry_found;
+			    } else {
+				if (@global(Verbose) == true) {
+				    console_printf("Multiple symbols found for %s: %"_lx_" and %"_lx_"\n", __stringVal(aString), entry, entry_found);
+				}
+				entry = NULL;
+				break;
+			    }
+			}
+		    }
+		}
+            } else {
+	        entry = GetProcAddress(handle, (char *) __stringVal(aString));
+	    }
 	    if (entry != NULL) {
 		addr = (void *)entry;
 		if (@global(Verbose) == true) {
@@ -3057,13 +3093,18 @@
 !
 
 primLoadDynamicObject:pathName into:anInfoBuffer
-    "load an object-file (map into my address space).
+    "Load an object-file (map into my address space).
      Return an OS-handle (whatever that is) - where some space
      (a 3-element array) has to be passed in for this.
      The first two entries are used in a machine dependent way,
      and callers may not depend on what is found there
      (instead, only pass around handles transparently).
-     This function is not supported on all architectures."
+     This function is not supported on all architectures.
+
+     `pathName` is a path to the object file. If nil, 
+     a special handle capable to resolve symbols in
+     'currenty loaded image' ir returned. 
+    "
 
 %{  /* CALLSUNLIMITEDSTACK(noWIN32) */
 
@@ -3147,6 +3188,20 @@
 # endif
 	RETURN ( anInfoBuffer );
     }
+    /*
+     * Unlike POSIX.1-2001 dlopen(), Windows has no such handle that
+     * would, when passed to GetProcAddress(), search current loaded image
+     * (i.e., all loaded .dlls and .exes). This has to be done by enumerating
+     * all loaded modules (HMODULE) and searching there. 
+     *
+     * Hence here we return a special 0 handle. This 0-handle is detected in
+     * #getSymbol:function:from: and handled there.
+     */
+    if (pathName == nil) {
+	__ArrayInstPtr(anInfoBuffer)->a_element[0] = __MKSMALLINT( 0 );
+	__ArrayInstPtr(anInfoBuffer)->a_element[1] = __MKSMALLINT( 0 );
+	RETURN ( anInfoBuffer );
+    }
     RETURN ( nil );
   }
 #endif
--- a/bc.mak	Fri Jun 10 07:10:15 2016 +0200
+++ b/bc.mak	Wed Jun 15 10:53:19 2016 +0100
@@ -1,151 +1,151 @@
-# $Header$
-#
-# DO NOT EDIT
-# automagically generated from the projectDefinition: stx_libcomp.
-#
-# Warning: once you modify this file, do not rerun
-# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
-#
-# Notice, that the name bc.mak is historical (from times, when only borland c was supported).
-# This file contains make rules for the win32 platform using either borland-bcc or visual-c.
-# It shares common definitions with the unix-make in Make.spec.
-# The bc.mak supports the following targets:
-#    bmake         - compile all st-files to a classLib (dll)
-#    bmake clean   - clean all temp files
-#    bmake clobber - clean all
-#
-# Historic Note:
-#  this used to contain only rules to make with borland
-#    (called via bmake, by "make.exe -f bc.mak")
-#  this has changed; it is now also possible to build using microsoft visual c
-#    (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
-#
-TOP=..
-INCLUDE_TOP=$(TOP)\..
-
-
-# see stdHeader_bc for LIBCOMP_BASE
-LIB_BASE=$(LIBCOMP_BASE)
-
-
-!INCLUDE $(TOP)\rules\stdHeader_bc
-
-!INCLUDE Make.spec
-
-LIBNAME=libstx_libcomp
-MODULE_PATH=libcomp
-RESFILES=libcomp.$(RES)
-
-
-
-LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic
-LOCALDEFINES=
-
-STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
-LOCALLIBS=
-
-OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
-
-ALL::  classLibRule
-
-classLibRule: $(OUTDIR) $(OUTDIR)$(LIBNAME).dll
-
-!INCLUDE $(TOP)\rules\stdRules_bc
-
-# build all mandatory prerequisite packages (containing superclasses) for this package
-prereq:
-	pushd ..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
-
-
-
-
-
-
-
-test: $(TOP)\goodies\builder\reports\NUL
-	pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
-	$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
-
-clean::
-	-del *.$(CSUFFIX)
-
-
-# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)Breakpoint.$(O) Breakpoint.$(C) Breakpoint.$(H): Breakpoint.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)BreakpointDescription.$(O) BreakpointDescription.$(C) BreakpointDescription.$(H): BreakpointDescription.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)BreakpointQuery.$(O) BreakpointQuery.$(C) BreakpointQuery.$(H): BreakpointQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
-$(OUTDIR)CompilationErrorHandler.$(O) CompilationErrorHandler.$(C) CompilationErrorHandler.$(H): CompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)CompilationErrorHandlerQuery.$(O) CompilationErrorHandlerQuery.$(C) CompilationErrorHandlerQuery.$(H): CompilationErrorHandlerQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
-$(OUTDIR)DoNotShowCompilerWarningAgainActionQuery.$(O) DoNotShowCompilerWarningAgainActionQuery.$(C) DoNotShowCompilerWarningAgainActionQuery.$(H): DoNotShowCompilerWarningAgainActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
-$(OUTDIR)DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(O) DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(C) DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(H): DoNotShowCompilerWarningAgainForThisMethodActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
-$(OUTDIR)DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(O) DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(C) DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(H): DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
-$(OUTDIR)InstrumentationContext.$(O) InstrumentationContext.$(C) InstrumentationContext.$(H): InstrumentationContext.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)InstrumentationInfo.$(O) InstrumentationInfo.$(C) InstrumentationInfo.$(H): InstrumentationInfo.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)InstrumentedMethod.$(O) InstrumentedMethod.$(C) InstrumentedMethod.$(H): InstrumentedMethod.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)LazyMethod.$(O) LazyMethod.$(C) LazyMethod.$(H): LazyMethod.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ObjectFileHandle.$(O) ObjectFileHandle.$(C) ObjectFileHandle.$(H): ObjectFileHandle.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ObjectFileLoader.$(O) ObjectFileLoader.$(C) ObjectFileLoader.$(H): ObjectFileLoader.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ParseError.$(O) ParseError.$(C) ParseError.$(H): ParseError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
-$(OUTDIR)ParseNode.$(O) ParseNode.$(C) ParseNode.$(H): ParseNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ParseNodeVisitor.$(O) ParseNodeVisitor.$(C) ParseNodeVisitor.$(H): ParseNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ParseWarning.$(O) ParseWarning.$(C) ParseWarning.$(H): ParseWarning.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ParserFlags.$(O) ParserFlags.$(C) ParserFlags.$(H): ParserFlags.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ProgramNodeBuilder.$(O) ProgramNodeBuilder.$(C) ProgramNodeBuilder.$(H): ProgramNodeBuilder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)ProgramNodeEnumerator.$(O) ProgramNodeEnumerator.$(C) ProgramNodeEnumerator.$(H): ProgramNodeEnumerator.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)STCCompilerInterface.$(O) STCCompilerInterface.$(C) STCCompilerInterface.$(H): STCCompilerInterface.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Scanner.$(O) Scanner.$(C) Scanner.$(H): Scanner.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)SourceFileLoader.$(O) SourceFileLoader.$(C) SourceFileLoader.$(H): SourceFileLoader.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Structure.$(O) Structure.$(C) Structure.$(H): Structure.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)UndefinedVariable.$(O) UndefinedVariable.$(C) UndefinedVariable.$(H): UndefinedVariable.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)UndefinedVariableNotification.$(O) UndefinedVariableNotification.$(C) UndefinedVariableNotification.$(H): UndefinedVariableNotification.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)Variable.$(O) Variable.$(C) Variable.$(H): Variable.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-$(OUTDIR)stx_libcomp.$(O) stx_libcomp.$(C) stx_libcomp.$(H): stx_libcomp.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
-$(OUTDIR)AssignmentNode.$(O) AssignmentNode.$(C) AssignmentNode.$(H): AssignmentNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)BlockNode.$(O) BlockNode.$(C) BlockNode.$(H): BlockNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)BreakpointNode.$(O) BreakpointNode.$(C) BreakpointNode.$(H): BreakpointNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)CompilationError.$(O) CompilationError.$(C) CompilationError.$(H): CompilationError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
-$(OUTDIR)EvalScriptingErrorHandler.$(O) EvalScriptingErrorHandler.$(C) EvalScriptingErrorHandler.$(H): EvalScriptingErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
-$(OUTDIR)MessageNode.$(O) MessageNode.$(C) MessageNode.$(H): MessageNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)MethodNode.$(O) MethodNode.$(C) MethodNode.$(H): MethodNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)ParseErrorNode.$(O) ParseErrorNode.$(C) ParseErrorNode.$(H): ParseErrorNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)Parser.$(O) Parser.$(C) Parser.$(H): Parser.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)PluggableParseNodeVisitor.$(O) PluggableParseNodeVisitor.$(C) PluggableParseNodeVisitor.$(H): PluggableParseNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNodeVisitor.$(H) $(STCHDR)
-$(OUTDIR)PrimaryNode.$(O) PrimaryNode.$(C) PrimaryNode.$(H): PrimaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)ProgramNode.$(O) ProgramNode.$(C) ProgramNode.$(H): ProgramNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)SelectorNode.$(O) SelectorNode.$(C) SelectorNode.$(H): SelectorNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)StatementNode.$(O) StatementNode.$(C) StatementNode.$(H): StatementNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)TextCollectingCompilationErrorHandler.$(O) TextCollectingCompilationErrorHandler.$(C) TextCollectingCompilationErrorHandler.$(H): TextCollectingCompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
-$(OUTDIR)UndefinedSuperclassError.$(O) UndefinedSuperclassError.$(C) UndefinedSuperclassError.$(H): UndefinedSuperclassError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
-$(OUTDIR)UndefinedVariableError.$(O) UndefinedVariableError.$(C) UndefinedVariableError.$(H): UndefinedVariableError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
-$(OUTDIR)WarningCompilationErrorHandler.$(O) WarningCompilationErrorHandler.$(C) WarningCompilationErrorHandler.$(H): WarningCompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
-$(OUTDIR)AbstractSyntaxHighlighter.$(O) AbstractSyntaxHighlighter.$(C) AbstractSyntaxHighlighter.$(H): AbstractSyntaxHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)BinaryNode.$(O) BinaryNode.$(C) BinaryNode.$(H): BinaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)BreakpointAnalyzer.$(O) BreakpointAnalyzer.$(C) BreakpointAnalyzer.$(H): BreakpointAnalyzer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)ByteCodeCompiler.$(O) ByteCodeCompiler.$(C) ByteCodeCompiler.$(H): ByteCodeCompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)CascadeNode.$(O) CascadeNode.$(C) CascadeNode.$(H): CascadeNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)ConstantNode.$(O) ConstantNode.$(C) ConstantNode.$(H): ConstantNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
-$(OUTDIR)Explainer.$(O) Explainer.$(C) Explainer.$(H): Explainer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)PrimitiveNode.$(O) PrimitiveNode.$(C) PrimitiveNode.$(H): PrimitiveNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(STCHDR)
-$(OUTDIR)ReturnNode.$(O) ReturnNode.$(C) ReturnNode.$(H): ReturnNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(STCHDR)
-$(OUTDIR)SelfNode.$(O) SelfNode.$(C) SelfNode.$(H): SelfNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
-$(OUTDIR)UnaryNode.$(O) UnaryNode.$(C) UnaryNode.$(H): UnaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
-$(OUTDIR)VariableNode.$(O) VariableNode.$(C) VariableNode.$(H): VariableNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
-$(OUTDIR)ByteCodeCompilerWithBreakpointSupport.$(O) ByteCodeCompilerWithBreakpointSupport.$(C) ByteCodeCompilerWithBreakpointSupport.$(H): ByteCodeCompilerWithBreakpointSupport.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)CodeCoverageHighlighter.$(O) CodeCoverageHighlighter.$(C) CodeCoverageHighlighter.$(H): CodeCoverageHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)Decompiler.$(O) Decompiler.$(C) Decompiler.$(H): Decompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)ECompletionConstantNode.$(O) ECompletionConstantNode.$(C) ECompletionConstantNode.$(H): ECompletionConstantNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ConstantNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
-$(OUTDIR)InstrumentingCompiler.$(O) InstrumentingCompiler.$(C) InstrumentingCompiler.$(H): InstrumentingCompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\InstrumentationInfo.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)SuperNode.$(O) SuperNode.$(C) SuperNode.$(H): SuperNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(INCLUDE_TOP)\stx\libcomp\SelfNode.$(H) $(STCHDR)
-$(OUTDIR)SyntaxHighlighter.$(O) SyntaxHighlighter.$(C) SyntaxHighlighter.$(H): SyntaxHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
-$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
-
-# ENDMAKEDEPEND --- do not remove this line
-
-# **Must be at end**
-
-# Enforce recompilation of package definition class if Mercurial working
-# copy state changes. Together with --guessVersion it ensures that package
-# definition class always contains correct binary revision string.
-!IFDEF HGROOT
-$(OUTDIR)stx_libcomp.$(O): $(HGROOT)\.hg\dirstate
-!ENDIF
+# $Header$
+#
+# DO NOT EDIT
+# automagically generated from the projectDefinition: stx_libcomp.
+#
+# Warning: once you modify this file, do not rerun
+# stmkmp or projectDefinition-build again - otherwise, your changes are lost.
+#
+# Notice, that the name bc.mak is historical (from times, when only borland c was supported).
+# This file contains make rules for the win32 platform using either borland-bcc or visual-c.
+# It shares common definitions with the unix-make in Make.spec.
+# The bc.mak supports the following targets:
+#    bmake         - compile all st-files to a classLib (dll)
+#    bmake clean   - clean all temp files
+#    bmake clobber - clean all
+#
+# Historic Note:
+#  this used to contain only rules to make with borland
+#    (called via bmake, by "make.exe -f bc.mak")
+#  this has changed; it is now also possible to build using microsoft visual c
+#    (called via vcmake, by "make.exe -f bc.mak -DUSEVC")
+#
+TOP=..
+INCLUDE_TOP=$(TOP)\..
+
+
+# see stdHeader_bc for LIBCOMP_BASE
+LIB_BASE=$(LIBCOMP_BASE)
+
+
+!INCLUDE $(TOP)\rules\stdHeader_bc
+
+!INCLUDE Make.spec
+
+LIBNAME=libstx_libcomp
+MODULE_PATH=libcomp
+RESFILES=libcomp.$(RES)
+
+
+
+LOCALINCLUDES= -I$(INCLUDE_TOP)\stx\libbasic
+LOCALDEFINES=
+
+STCLOCALOPT=-package=$(PACKAGE) -I. $(LOCALINCLUDES) -headerDir=. $(STCLOCALOPTIMIZATIONS) $(STCWARNINGS) $(LOCALDEFINES) $(COMMONSYMBOLS) -varPrefix=$(LIBNAME)
+LOCALLIBS=-lPsapi
+
+OBJS= $(COMMON_OBJS) $(WIN32_OBJS)
+
+ALL::  classLibRule
+
+classLibRule: $(OUTDIR) $(OUTDIR)$(LIBNAME).dll
+
+!INCLUDE $(TOP)\rules\stdRules_bc
+
+# build all mandatory prerequisite packages (containing superclasses) for this package
+prereq:
+	pushd ..\libbasic & $(MAKE_BAT) "CFLAGS_LOCAL=$(GLOBALDEFINES) "
+
+
+
+
+
+
+
+test: $(TOP)\goodies\builder\reports\NUL
+	pushd $(TOP)\goodies\builder\reports & $(MAKE_BAT)
+	$(TOP)\goodies\builder\reports\report-runner.bat -D . -r Builder::TestReport -p $(PACKAGE)
+        
+clean::
+	del *.$(CSUFFIX)
+
+
+# BEGINMAKEDEPEND --- do not remove this line; make depend needs it
+$(OUTDIR)Breakpoint.$(O) Breakpoint.$(C) Breakpoint.$(H): Breakpoint.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BreakpointDescription.$(O) BreakpointDescription.$(C) BreakpointDescription.$(H): BreakpointDescription.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BreakpointQuery.$(O) BreakpointQuery.$(C) BreakpointQuery.$(H): BreakpointQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
+$(OUTDIR)CompilationErrorHandler.$(O) CompilationErrorHandler.$(C) CompilationErrorHandler.$(H): CompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)CompilationErrorHandlerQuery.$(O) CompilationErrorHandlerQuery.$(C) CompilationErrorHandlerQuery.$(H): CompilationErrorHandlerQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
+$(OUTDIR)DoNotShowCompilerWarningAgainActionQuery.$(O) DoNotShowCompilerWarningAgainActionQuery.$(C) DoNotShowCompilerWarningAgainActionQuery.$(H): DoNotShowCompilerWarningAgainActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
+$(OUTDIR)DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(O) DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(C) DoNotShowCompilerWarningAgainForThisMethodActionQuery.$(H): DoNotShowCompilerWarningAgainForThisMethodActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
+$(OUTDIR)DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(O) DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(C) DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.$(H): DoNotShowCompilerWarningAgainForThisReceiverSelectorActionQuery.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(STCHDR)
+$(OUTDIR)InstrumentationContext.$(O) InstrumentationContext.$(C) InstrumentationContext.$(H): InstrumentationContext.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)InstrumentationInfo.$(O) InstrumentationInfo.$(C) InstrumentationInfo.$(H): InstrumentationInfo.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)InstrumentedMethod.$(O) InstrumentedMethod.$(C) InstrumentedMethod.$(H): InstrumentedMethod.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)LazyMethod.$(O) LazyMethod.$(C) LazyMethod.$(H): LazyMethod.st $(INCLUDE_TOP)\stx\libbasic\CompiledCode.$(H) $(INCLUDE_TOP)\stx\libbasic\ExecutableFunction.$(H) $(INCLUDE_TOP)\stx\libbasic\Method.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ObjectFileHandle.$(O) ObjectFileHandle.$(C) ObjectFileHandle.$(H): ObjectFileHandle.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ObjectFileLoader.$(O) ObjectFileLoader.$(C) ObjectFileLoader.$(H): ObjectFileLoader.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ParseError.$(O) ParseError.$(C) ParseError.$(H): ParseError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(STCHDR)
+$(OUTDIR)ParseNode.$(O) ParseNode.$(C) ParseNode.$(H): ParseNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ParseNodeVisitor.$(O) ParseNodeVisitor.$(C) ParseNodeVisitor.$(H): ParseNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ParseWarning.$(O) ParseWarning.$(C) ParseWarning.$(H): ParseWarning.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ParserFlags.$(O) ParserFlags.$(C) ParserFlags.$(H): ParserFlags.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ProgramNodeBuilder.$(O) ProgramNodeBuilder.$(C) ProgramNodeBuilder.$(H): ProgramNodeBuilder.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)ProgramNodeEnumerator.$(O) ProgramNodeEnumerator.$(C) ProgramNodeEnumerator.$(H): ProgramNodeEnumerator.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)STCCompilerInterface.$(O) STCCompilerInterface.$(C) STCCompilerInterface.$(H): STCCompilerInterface.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Scanner.$(O) Scanner.$(C) Scanner.$(H): Scanner.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)SourceFileLoader.$(O) SourceFileLoader.$(C) SourceFileLoader.$(H): SourceFileLoader.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Structure.$(O) Structure.$(C) Structure.$(H): Structure.st $(INCLUDE_TOP)\stx\libbasic\Behavior.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UndefinedVariable.$(O) UndefinedVariable.$(C) UndefinedVariable.$(H): UndefinedVariable.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)UndefinedVariableNotification.$(O) UndefinedVariableNotification.$(C) UndefinedVariableNotification.$(H): UndefinedVariableNotification.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)Variable.$(O) Variable.$(C) Variable.$(H): Variable.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)stx_libcomp.$(O) stx_libcomp.$(C) stx_libcomp.$(H): stx_libcomp.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)AssignmentNode.$(O) AssignmentNode.$(C) AssignmentNode.$(H): AssignmentNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)BlockNode.$(O) BlockNode.$(C) BlockNode.$(H): BlockNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)BreakpointNode.$(O) BreakpointNode.$(C) BreakpointNode.$(H): BreakpointNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)CompilationError.$(O) CompilationError.$(C) CompilationError.$(H): CompilationError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
+$(OUTDIR)EvalScriptingErrorHandler.$(O) EvalScriptingErrorHandler.$(C) EvalScriptingErrorHandler.$(H): EvalScriptingErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
+$(OUTDIR)MessageNode.$(O) MessageNode.$(C) MessageNode.$(H): MessageNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)MethodNode.$(O) MethodNode.$(C) MethodNode.$(H): MethodNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)ParseErrorNode.$(O) ParseErrorNode.$(C) ParseErrorNode.$(H): ParseErrorNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)Parser.$(O) Parser.$(C) Parser.$(H): Parser.st $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Notification.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\Query.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)PluggableParseNodeVisitor.$(O) PluggableParseNodeVisitor.$(C) PluggableParseNodeVisitor.$(H): PluggableParseNodeVisitor.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNodeVisitor.$(H) $(STCHDR)
+$(OUTDIR)PrimaryNode.$(O) PrimaryNode.$(C) PrimaryNode.$(H): PrimaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)ProgramNode.$(O) ProgramNode.$(C) ProgramNode.$(H): ProgramNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)SelectorNode.$(O) SelectorNode.$(C) SelectorNode.$(H): SelectorNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)StatementNode.$(O) StatementNode.$(C) StatementNode.$(H): StatementNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)TextCollectingCompilationErrorHandler.$(O) TextCollectingCompilationErrorHandler.$(C) TextCollectingCompilationErrorHandler.$(H): TextCollectingCompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
+$(OUTDIR)UndefinedSuperclassError.$(O) UndefinedSuperclassError.$(C) UndefinedSuperclassError.$(H): UndefinedSuperclassError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
+$(OUTDIR)UndefinedVariableError.$(O) UndefinedVariableError.$(C) UndefinedVariableError.$(H): UndefinedVariableError.st $(INCLUDE_TOP)\stx\libbasic\Error.$(H) $(INCLUDE_TOP)\stx\libbasic\Exception.$(H) $(INCLUDE_TOP)\stx\libbasic\GenericException.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProceedableError.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseError.$(H) $(STCHDR)
+$(OUTDIR)WarningCompilationErrorHandler.$(O) WarningCompilationErrorHandler.$(C) WarningCompilationErrorHandler.$(H): WarningCompilationErrorHandler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\CompilationErrorHandler.$(H) $(STCHDR)
+$(OUTDIR)AbstractSyntaxHighlighter.$(O) AbstractSyntaxHighlighter.$(C) AbstractSyntaxHighlighter.$(H): AbstractSyntaxHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)BinaryNode.$(O) BinaryNode.$(C) BinaryNode.$(H): BinaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)BreakpointAnalyzer.$(O) BreakpointAnalyzer.$(C) BreakpointAnalyzer.$(H): BreakpointAnalyzer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)ByteCodeCompiler.$(O) ByteCodeCompiler.$(C) ByteCodeCompiler.$(H): ByteCodeCompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)CascadeNode.$(O) CascadeNode.$(C) CascadeNode.$(H): CascadeNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)ConstantNode.$(O) ConstantNode.$(C) ConstantNode.$(H): ConstantNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
+$(OUTDIR)Explainer.$(O) Explainer.$(C) Explainer.$(H): Explainer.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)PrimitiveNode.$(O) PrimitiveNode.$(C) PrimitiveNode.$(H): PrimitiveNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(STCHDR)
+$(OUTDIR)ReturnNode.$(O) ReturnNode.$(C) ReturnNode.$(H): ReturnNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\StatementNode.$(H) $(STCHDR)
+$(OUTDIR)SelfNode.$(O) SelfNode.$(C) SelfNode.$(H): SelfNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
+$(OUTDIR)UnaryNode.$(O) UnaryNode.$(C) UnaryNode.$(H): UnaryNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\MessageNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(STCHDR)
+$(OUTDIR)VariableNode.$(O) VariableNode.$(C) VariableNode.$(H): VariableNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
+$(OUTDIR)ByteCodeCompilerWithBreakpointSupport.$(O) ByteCodeCompilerWithBreakpointSupport.$(C) ByteCodeCompilerWithBreakpointSupport.$(H): ByteCodeCompilerWithBreakpointSupport.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)CodeCoverageHighlighter.$(O) CodeCoverageHighlighter.$(C) CodeCoverageHighlighter.$(H): CodeCoverageHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)Decompiler.$(O) Decompiler.$(C) Decompiler.$(H): Decompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)ECompletionConstantNode.$(O) ECompletionConstantNode.$(C) ECompletionConstantNode.$(H): ECompletionConstantNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ConstantNode.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(STCHDR)
+$(OUTDIR)InstrumentingCompiler.$(O) InstrumentingCompiler.$(C) InstrumentingCompiler.$(H): InstrumentingCompiler.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ByteCodeCompiler.$(H) $(INCLUDE_TOP)\stx\libcomp\InstrumentationInfo.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)SuperNode.$(O) SuperNode.$(C) SuperNode.$(H): SuperNode.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\ParseNode.$(H) $(INCLUDE_TOP)\stx\libcomp\PrimaryNode.$(H) $(INCLUDE_TOP)\stx\libcomp\SelfNode.$(H) $(STCHDR)
+$(OUTDIR)SyntaxHighlighter.$(O) SyntaxHighlighter.$(C) SyntaxHighlighter.$(H): SyntaxHighlighter.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libcomp\AbstractSyntaxHighlighter.$(H) $(INCLUDE_TOP)\stx\libcomp\Parser.$(H) $(INCLUDE_TOP)\stx\libcomp\Scanner.$(H) $(STCHDR)
+$(OUTDIR)extensions.$(O): extensions.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+
+# ENDMAKEDEPEND --- do not remove this line
+
+# **Must be at end**
+
+# Enforce recompilation of package definition class if Mercurial working
+# copy state changes. Together with --guessVersion it ensures that package
+# definition class always contains correct binary revision string.
+!IFDEF HGROOT
+$(OUTDIR)stx_libcomp.$(O): $(HGROOT)\.hg\dirstate
+!ENDIF